docs: remove milestone references and rebrand to SynthOrg#289
docs: remove milestone references and rebrand to SynthOrg#289
Conversation
Remove M0-M7 milestone framing from all documentation, source comments, and skill files. Restructure README with domain-grouped capabilities. Replace milestone-tagged status markers in DESIGN_SPEC with implemented/planned language. Clean ADR-001, ADR-002, worktree skill, and research-link skill. Close GitHub milestones. Add -n auto enforcement to CLAUDE.md testing commands.
Rename project from "AI Company" to "SynthOrg" across all user-facing documentation, config, Docker labels, license, web placeholder, API title, and default company name. Update tests to match new defaults. Python package name (ai_company) and GitHub repo name kept as-is for now — full package rename is a separate effort.
Update all remaining ai-company references to synthorg: - Docker: GHCR image names, compose volume/db path - Config: default db name, sandbox image, config file names (synthorg.yaml, ~/.synthorg/), template user dir - Docs: SECURITY.md, getting_started.md, ADR-001, DESIGN_SPEC - CI: release-please package name, docker workflow - Skills: worktree and research-link project references - Tests: updated all assertions for new defaults
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (17)
📝 WalkthroughSummary by CodeRabbit
WalkthroughRebrands the project from "AI Company" to "SynthOrg": updates package metadata, docs, container/image names, config defaults and discovery paths, tests, and some docstrings. Also removes milestone-specific wording in favor of generic planning language. No substantive runtime behavior changes beyond default-value updates and added logging in one module. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~28 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches
🧪 Generate unit tests (beta)
✨ Simplify code
Comment |
There was a problem hiding this comment.
Actionable comments posted: 10
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
docker/.env.example (1)
24-25:⚠️ Potential issue | 🟡 MinorInconsistent database path with docker/compose.yml.
The example shows
/data/ai-company.dbbutdocker/compose.ymlnow setsAI_COMPANY_DB_PATH="/data/synthorg.db". Users copying this example will get a different default than what compose uses, potentially causing confusion or split databases.Consider updating the comment and default value to match:
Proposed fix
-# SQLite database path (inside container: /data/ai-company.db) -AI_COMPANY_DB_PATH=/data/ai-company.db +# SQLite database path (inside container: /data/synthorg.db) +AI_COMPANY_DB_PATH=/data/synthorg.db🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docker/.env.example` around lines 24 - 25, Update the AI_COMPANY_DB_PATH default in docker/.env.example to match docker/compose.yml by changing the comment and value from /data/ai-company.db to /data/synthorg.db; ensure the AI_COMPANY_DB_PATH entry and its inline comment both use "/data/synthorg.db" so users copying the example get the same default as the compose configuration..claude/skills/research-link/SKILL.md (1)
112-120:⚠️ Potential issue | 🟡 MinorRemove the leftover milestone example from the
LATERrule.Line 120 still uses
M5 Memory & Budgetas the example trigger. That reintroduces the milestone framing this PR is otherwise removing and leaves the skill internally inconsistent.Suggested edit
-- **LATER** must specify the trigger condition (e.g., "when we start M5 Memory & Budget") +- **LATER** must specify the trigger condition (e.g., "when we add the memory and budget subsystems")🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.claude/skills/research-link/SKILL.md around lines 112 - 120, Remove the leftover milestone example "M5 Memory & Budget" from the LATER rule in the SKILL.md "LATER" entry and replace it with a generic trigger phrase (e.g., "when resource constraints or budgeting work begins" or "when memory/budget considerations become relevant") so the rule no longer references the removed milestone; update the line that currently reads `"when we start M5 Memory & Budget"` to the new generic trigger and verify the "LATER" rule text remains consistent with the rest of the Verdict Rules.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.claude/skills/worktree/SKILL.md:
- Around line 43-46: In .claude/skills/worktree/SKILL.md update the fenced
examples (e.g. the "Mode 3 — Issue list only:" block containing "/worktree setup
--issues `#26`,`#30`,`#133`,`#168`" and the other ranges noted 324-326 and 453-459) by
adding a blank line immediately before and after each triple-backtick fence and
by adding a language tag to the opening fence (use "text" for slash-command
examples, e.g. ```text). Ensure every example fence follows this pattern so
MD031/MD040 are not triggered.
- Around line 56-58: Replace the line that says "Repo name extracted from the
current working directory basename" with a derivation that resolves the
canonical repo name from Git metadata (e.g., use git rev-parse --show-toplevel
and take its basename, or parse remote.origin.url) rather than the CWD basename;
ensure you strip any existing wt- prefix from that canonical name before
composing the sibling worktree path so running "worktree setup" from an existing
worktree (e.g., synthorg-wt-foo) does not produce nested names like
synthorg-wt-foo-wt-bar.
- Around line 340-344: The "Compute tiers" description incorrectly implies Tier
N must only depend on Tier N-1; change the tiering rule in the "Compute tiers"
logic so that each issue's tier = 0 if it has no open internal dependencies,
otherwise tier = 1 + max(tier of all its internal dependency issues) (i.e.,
derive tier from any earlier dependency tier, not just the immediate previous
one), ensure circular dependencies are still detected and reported as cycles
(e.g., "#12 → `#17` → `#12`"), render non-circular issues by these computed tiers,
and update the suggestion text to "Break the cycle by removing one dependency
edge, or implement the circular group in a single worktree." to match the
corrected algorithm.
In `@docker/backend/Dockerfile`:
- Around line 73-77: Update the OCI image labels org.opencontainers.image.url
and org.opencontainers.image.source in the LABEL block so they point to the
renamed repository (replace the old "https://github.com/Aureliolo/ai-company"
values with the new repository URL) — modify the LABEL entries for
org.opencontainers.image.url and org.opencontainers.image.source to the correct
new repo path while preserving the existing LABEL keys
(org.opencontainers.image.title and org.opencontainers.image.description).
In `@docker/compose.yml`:
- Line 9: You renamed the Docker volume from ai-company-data to synthorg-data
which breaks upgrades; either document the migration in the
PR/CHANGELOG/migration docs so users know to copy/rename their volume, or add a
backward-compatible volume mapping in the Compose file by declaring the
top-level volumes entry for synthorg-data as external with name: ai-company-data
(e.g., volumes: synthorg-data: external: true name: ai-company-data) so existing
deployments continue to use the old volume, and mention this in the PR notes if
you choose the mapping approach.
In `@docker/web/Dockerfile`:
- Around line 9-12: Update the OCI image metadata LABELs so the image URL and
source point to the renamed repository: change the values of the LABEL keys
org.opencontainers.image.url and org.opencontainers.image.source to the new
repository URL that matches the rebrand (keeping org.opencontainers.image.title
and org.opencontainers.image.description as-is); ensure both LABEL entries use
the exact new repo HTTPS URL used elsewhere in the project.
In `@docs/decisions/ADR-001-memory-layer.md`:
- Around line 30-31: The ADR uses both "synthorg" and "synthorg-backend" for the
same deployable; standardize on "synthorg-backend" everywhere the text or
diagrams refer to the main app container/deployable artifact (replace
occurrences of "synthorg" that denote the backend with "synthorg-backend"),
update any captions/labels in diagrams and architecture descriptions to the
canonical name, and ensure inline references (e.g., container/image identity and
protocol-boundary statements) use the exact symbol "synthorg-backend" for
consistency.
In `@README.md`:
- Line 13: Update the README.md so each level-3 subsection heading (e.g., the
"### Core Framework" heading and the other "###" subsection headings) is
followed by a single blank line before the next content/list item; locate each
"###" heading and insert one empty line beneath it so the markdownlint rule
about headings requiring a blank line is satisfied.
In `@src/ai_company/config/loader.py`:
- Around line 37-42: The config discovery removed legacy paths; update
_CWD_CONFIG_LOCATIONS and _HOME_CONFIG_RELATIVE to include the old filenames as
fallbacks (e.g., add Path("ai-company.yaml") and Path("config/ai-company.yaml")
to _CWD_CONFIG_LOCATIONS and support Path(".ai-company") / "config.yaml" for
home), and when detecting a legacy file emit a deprecation warning (use the
existing loader/search function that references
_CWD_CONFIG_LOCATIONS/_HOME_CONFIG_RELATIVE to log a clear deprecation message
indicating the new filename and that the legacy path will be removed in the next
migration window).
In `@src/ai_company/engine/agent_engine.py`:
- Around line 595-597: The code calls
ctx.with_task_transition(TaskStatus.COMPLETED, reason="Auto-completed (no
reviewers configured)") without verifying reviewer configuration; change this to
either (a) perform a real reviewer lookup first (e.g., call the existing
reviewer resolution method used elsewhere) and only set the "Auto-completed (no
reviewers configured)" reason when that lookup confirms no reviewers, or (b) if
you don't want the lookup here, replace the hardcoded reason with a neutral
message like "Auto-completed" (or omit the reason) to avoid recording an
incorrect reviewer-state claim; update the call site of ctx.with_task_transition
to use the chosen approach so the persisted reason matches actual behavior.
---
Outside diff comments:
In @.claude/skills/research-link/SKILL.md:
- Around line 112-120: Remove the leftover milestone example "M5 Memory &
Budget" from the LATER rule in the SKILL.md "LATER" entry and replace it with a
generic trigger phrase (e.g., "when resource constraints or budgeting work
begins" or "when memory/budget considerations become relevant") so the rule no
longer references the removed milestone; update the line that currently reads
`"when we start M5 Memory & Budget"` to the new generic trigger and verify the
"LATER" rule text remains consistent with the rest of the Verdict Rules.
In `@docker/.env.example`:
- Around line 24-25: Update the AI_COMPANY_DB_PATH default in
docker/.env.example to match docker/compose.yml by changing the comment and
value from /data/ai-company.db to /data/synthorg.db; ensure the
AI_COMPANY_DB_PATH entry and its inline comment both use "/data/synthorg.db" so
users copying the example get the same default as the compose configuration.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: d418ef1f-7094-46ae-9920-1ab95c0a5805
⛔ Files ignored due to path filters (1)
uv.lockis excluded by!**/*.lock
📒 Files selected for processing (42)
.claude/skills/research-link/SKILL.md.claude/skills/worktree/SKILL.md.github/CONTRIBUTING.md.github/SECURITY.md.github/release-please-config.json.github/workflows/docker.ymlCLAUDE.mdDESIGN_SPEC.mdLICENSEREADME.mddocker/.env.exampledocker/backend/Dockerfiledocker/compose.ymldocker/web/Dockerfiledocs/decisions/ADR-001-memory-layer.mddocs/decisions/ADR-002-design-decisions-batch-1.mddocs/getting_started.mdpyproject.tomlsrc/ai_company/__init__.pysrc/ai_company/api/app.pysrc/ai_company/api/approval_store.pysrc/ai_company/budget/quota.pysrc/ai_company/budget/tracker.pysrc/ai_company/communication/conflict_resolution/human_strategy.pysrc/ai_company/config/defaults.pysrc/ai_company/config/loader.pysrc/ai_company/core/approval.pysrc/ai_company/engine/agent_engine.pysrc/ai_company/engine/classification/detectors.pysrc/ai_company/engine/metrics.pysrc/ai_company/persistence/config.pysrc/ai_company/templates/loader.pysrc/ai_company/tools/sandbox/docker_config.pytests/unit/api/test_app.pytests/unit/config/test_defaults.pytests/unit/config/test_loader.pytests/unit/config/test_schema.pytests/unit/persistence/test_config.pytests/unit/tools/sandbox/test_docker_config.pytests/unit/tools/sandbox/test_docker_sandbox.pytests/unit/tools/sandbox/test_sandboxing_config.pyweb/index.html
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Agent
🧰 Additional context used
📓 Path-based instructions (6)
**/*.py
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.py: Never usefrom __future__ import annotations— Python 3.14 has PEP 649 native lazy annotations
Useexcept A, B:syntax without parentheses for exception handling — PEP 758 except syntax (enforced by ruff on Python 3.14)
Add type hints to all public functions and classes; use mypy strict mode
Use Google-style docstrings on all public classes and functions (enforced by ruff D rules)
Keep functions under 50 lines and files under 800 lines
Handle errors explicitly and never silently swallow exceptions
Validate input at system boundaries: user input, external APIs, config files
Use line length of 88 characters (enforced by ruff)
Files:
src/ai_company/engine/agent_engine.pysrc/ai_company/budget/tracker.pytests/unit/tools/sandbox/test_docker_config.pytests/unit/config/test_schema.pytests/unit/persistence/test_config.pysrc/ai_company/engine/classification/detectors.pytests/unit/config/test_defaults.pytests/unit/tools/sandbox/test_docker_sandbox.pysrc/ai_company/budget/quota.pysrc/ai_company/templates/loader.pysrc/ai_company/config/loader.pysrc/ai_company/__init__.pysrc/ai_company/persistence/config.pytests/unit/api/test_app.pysrc/ai_company/engine/metrics.pysrc/ai_company/api/app.pytests/unit/config/test_loader.pytests/unit/tools/sandbox/test_sandboxing_config.pysrc/ai_company/tools/sandbox/docker_config.pysrc/ai_company/config/defaults.pysrc/ai_company/communication/conflict_resolution/human_strategy.pysrc/ai_company/api/approval_store.pysrc/ai_company/core/approval.py
src/ai_company/**/*.py
📄 CodeRabbit inference engine (CLAUDE.md)
src/ai_company/**/*.py: Every module with business logic must import logger viafrom ai_company.observability import get_loggerand createlogger = get_logger(__name__)— never useimport loggingorlogging.getLogger()orprint()
Always use event name constants fromai_company.observability.events.<domain>modules (e.g.PROVIDER_CALL_STARTfromevents.provider) — import directly and log with structured kwargs:logger.info(EVENT, key=value)neverlogger.info("msg %s", val)
Create new objects rather than mutating existing ones. For non-Pydantic internal collections usecopy.deepcopy()at construction and wrap withMappingProxyTypefor read-only enforcement. Fordict/listfields in frozen Pydantic models, usecopy.deepcopy()at system boundaries (tool execution, LLM provider serialization, inter-agent delegation, persistence serialization)
Use frozen Pydantic models for config/identity; use separate mutable-via-copy models (withmodel_copy(update=...)) for runtime state that evolves. Never mix static config fields with mutable runtime fields in one model
Use Pydantic v2 with adopted conventions:BaseModel,model_validator,computed_field,ConfigDict. Use@computed_fieldfor derived values instead of storing redundant fields. UseNotBlankStrfromcore.typesfor all identifier/name fields (including optionalNotBlankStr | Noneand tupletuple[NotBlankStr, ...]variants) instead of manual whitespace validators
Preferasyncio.TaskGroupfor fan-out/fan-in parallel operations in new code (multiple tool invocations, parallel agent calls) — use structured concurrency over barecreate_task
Never use real vendor names (Anthropic, OpenAI, Claude, GPT, etc.) in project-owned code, docstrings, comments, tests, or config examples. Use generic names:example-provider,example-large-001,example-medium-001,example-small-001,large/medium/smallas aliases. Usetest-provider,test-small-001in tests
Files:
src/ai_company/engine/agent_engine.pysrc/ai_company/budget/tracker.pysrc/ai_company/engine/classification/detectors.pysrc/ai_company/budget/quota.pysrc/ai_company/templates/loader.pysrc/ai_company/config/loader.pysrc/ai_company/__init__.pysrc/ai_company/persistence/config.pysrc/ai_company/engine/metrics.pysrc/ai_company/api/app.pysrc/ai_company/tools/sandbox/docker_config.pysrc/ai_company/config/defaults.pysrc/ai_company/communication/conflict_resolution/human_strategy.pysrc/ai_company/api/approval_store.pysrc/ai_company/core/approval.py
.github/workflows/*.yml
📄 CodeRabbit inference engine (CLAUDE.md)
CI jobs run in parallel: lint (ruff) + type-check (mypy src/ tests/) + test (pytest + coverage) → ci-pass gate. Docker workflow builds backend + web images, scans with Trivy and Grype, signs with cosign, only pushes after scans pass
Files:
.github/workflows/docker.yml
tests/**/*.py
📄 CodeRabbit inference engine (CLAUDE.md)
tests/**/*.py: Never use real vendor names (Anthropic, OpenAI, Claude, GPT, etc.) in tests. Usetest-provider,test-small-001, etc.
Mark all tests with@pytest.mark.unit,@pytest.mark.integration,@pytest.mark.e2e, or@pytest.mark.slow
Use@pytest.mark.parametrizeto test similar cases rather than duplicating test logic
Files:
tests/unit/tools/sandbox/test_docker_config.pytests/unit/config/test_schema.pytests/unit/persistence/test_config.pytests/unit/config/test_defaults.pytests/unit/tools/sandbox/test_docker_sandbox.pytests/unit/api/test_app.pytests/unit/config/test_loader.pytests/unit/tools/sandbox/test_sandboxing_config.py
pyproject.toml
📄 CodeRabbit inference engine (CLAUDE.md)
Pin all dependency versions using
==in pyproject.toml. Organize dependencies into groups:test(pytest + plugins),dev(includes test + ruff, mypy, pre-commit, commitizen)
Files:
pyproject.toml
docker/compose.yml
📄 CodeRabbit inference engine (CLAUDE.md)
All Docker configuration files are in
docker/directory: Dockerfiles, compose,.env.example. Web image usesnginxinc/nginx-unprivilegedwith SPA routing and API/WebSocket proxy to backend
Files:
docker/compose.yml
🧬 Code graph analysis (5)
src/ai_company/engine/agent_engine.py (2)
src/ai_company/engine/context.py (1)
with_task_transition(235-278)src/ai_company/core/enums.py (1)
TaskStatus(198-224)
tests/unit/tools/sandbox/test_docker_config.py (2)
src/ai_company/tools/mcp/client.py (1)
config(65-67)src/ai_company/tools/sandbox/docker_sandbox.py (1)
config(113-115)
tests/unit/config/test_defaults.py (1)
src/ai_company/config/defaults.py (1)
default_config_dict(6-43)
tests/unit/tools/sandbox/test_docker_sandbox.py (2)
src/ai_company/tools/mcp/client.py (1)
config(65-67)src/ai_company/tools/sandbox/docker_sandbox.py (1)
config(113-115)
tests/unit/tools/sandbox/test_sandboxing_config.py (2)
src/ai_company/tools/mcp/client.py (1)
config(65-67)src/ai_company/tools/sandbox/docker_sandbox.py (1)
config(113-115)
🪛 LanguageTool
README.md
[uncategorized] ~15-~15: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...-based abstraction with routing, retry, rate limiting - Templates — built-in templates, inher...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
🪛 markdownlint-cli2 (0.21.0)
README.md
[warning] 13-13: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 19-19: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 25-25: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 31-31: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 36-36: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 41-41: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 47-47: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 53-53: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 60-60: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 67-67: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
.claude/skills/worktree/SKILL.md
[warning] 44-44: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
[warning] 44-44: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
[warning] 324-324: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
[warning] 453-453: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
[warning] 453-453: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🔇 Additional comments (17)
src/ai_company/engine/classification/detectors.py (1)
7-8: LGTM.The wording stays accurate, removes milestone-specific terminology cleanly, and matches the module’s current heuristic scope.
src/ai_company/communication/conflict_resolution/human_strategy.py (1)
5-5: LGTM! Clean milestone terminology removal.The documentation updates successfully replace milestone-specific references with clear, timeless language. The change from "M6 dependency" to "dependency" (with proper context about the approval queue API) improves clarity while maintaining accurate tracking via issue
#37.Also applies to: 31-31
src/ai_company/api/app.py (1)
392-392: LGTM!The OpenAPI title correctly updated to "SynthOrg API" as part of the project rebrand.
src/ai_company/__init__.py (1)
1-1: LGTM!Module docstring correctly updated to reflect SynthOrg branding.
src/ai_company/templates/loader.py (1)
47-47: LGTM!User templates directory path correctly updated to
~/.synthorg/templatesas part of the SynthOrg rebrand..github/release-please-config.json (1)
6-6: LGTM!Package name correctly updated to
synthorgfor release-please. Theextra-filespath on line 27 still referencingsrc/ai_company/__init__.pyis consistent with the PR scope — the Python package directory rename is intentionally deferred.src/ai_company/budget/tracker.py (1)
7-8: LGTM!Milestone reference correctly removed from docstring ("planned as part of M5." → "planned.").
src/ai_company/engine/metrics.py (1)
3-4: LGTM!Milestone reference correctly removed from docstring ("(M3)" removed from DESIGN_SPEC reference).
LICENSE (1)
7-7: LGTM!Licensed Work name correctly updated to "SynthOrg" as part of the project rebrand.
src/ai_company/core/approval.py (1)
3-4: LGTM!Milestone reference correctly removed from docstring ("in M7" removed, rephrased to "engine and security subsystems").
tests/unit/tools/sandbox/test_sandboxing_config.py (1)
20-20: LGTM!The test expectation correctly mirrors the updated default in
DockerSandboxConfig. Consistent with the broader SynthOrg rebrand.web/index.html (1)
6-6: LGTM!Branding updates are consistent with the SynthOrg rebrand across the project.
Also applies to: 11-11
src/ai_company/api/approval_store.py (1)
4-5: LGTM!Milestone reference removed in favor of generic wording, consistent with the PR's objective to remove milestone framing.
tests/unit/tools/sandbox/test_docker_sandbox.py (1)
93-96: LGTM!Test expectation correctly updated to match the new
synthorg-sandbox:latestdefault image.src/ai_company/persistence/config.py (1)
33-36: LGTM!Default database path updated to
synthorg.db, consistent with the project rebrand. Validation logic and model structure remain intact.docker/compose.yml (1)
12-14: LGTM on environment and path updates.Database path correctly updated to
synthorg.db. The env var names (AI_COMPANY_*) are intentionally unchanged per PR scope, which is appropriate for this phase of the rebrand..github/SECURITY.md (1)
17-17: Security reporting URL correctly updated to the new repository path. The endpoint is accessible and properly configured for submitting vulnerability reports.
| - "${BACKEND_PORT:-8000}:8000" | ||
| volumes: | ||
| - ai-company-data:/data | ||
| - synthorg-data:/data |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Volume rename may affect existing deployments.
Renaming the volume from ai-company-data to synthorg-data means existing deployments will not automatically use their previous data. Users upgrading will need to either:
- Manually rename/copy the volume, or
- Be informed that a fresh database will be created.
Consider adding a note to the PR description, CHANGELOG, or migration docs to help users preserve their data during the upgrade.
Also applies to: 47-47
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docker/compose.yml` at line 9, You renamed the Docker volume from
ai-company-data to synthorg-data which breaks upgrades; either document the
migration in the PR/CHANGELOG/migration docs so users know to copy/rename their
volume, or add a backward-compatible volume mapping in the Compose file by
declaring the top-level volumes entry for synthorg-data as external with name:
ai-company-data (e.g., volumes: synthorg-data: external: true name:
ai-company-data) so existing deployments continue to use the old volume, and
mention this in the PR notes if you choose the mapping approach.
| _CWD_CONFIG_LOCATIONS: tuple[Path, ...] = ( | ||
| Path("ai-company.yaml"), | ||
| Path("config/ai-company.yaml"), | ||
| Path("synthorg.yaml"), | ||
| Path("config/synthorg.yaml"), | ||
| ) | ||
|
|
||
| _HOME_CONFIG_RELATIVE = Path(".ai-company") / "config.yaml" | ||
| _HOME_CONFIG_RELATIVE = Path(".synthorg") / "config.yaml" |
There was a problem hiding this comment.
Keep the legacy config locations as fallbacks during the rename.
After this change, upgraded installs with an existing ai-company.yaml or ~/.ai-company/config.yaml will fail auto-discovery until users manually rename files. Please keep the old paths in the search list for at least one migration window, ideally with a deprecation warning.
Suggested fix
_CWD_CONFIG_LOCATIONS: tuple[Path, ...] = (
Path("synthorg.yaml"),
Path("config/synthorg.yaml"),
+ Path("ai-company.yaml"),
+ Path("config/ai-company.yaml"),
)
-_HOME_CONFIG_RELATIVE = Path(".synthorg") / "config.yaml"
+_HOME_CONFIG_RELATIVES: tuple[Path, ...] = (
+ Path(".synthorg") / "config.yaml",
+ Path(".ai-company") / "config.yaml",
+)- candidates = [*_CWD_CONFIG_LOCATIONS, Path.home() / _HOME_CONFIG_RELATIVE]
+ candidates = [
+ *_CWD_CONFIG_LOCATIONS,
+ *(Path.home() / rel for rel in _HOME_CONFIG_RELATIVES),
+ ]📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| _CWD_CONFIG_LOCATIONS: tuple[Path, ...] = ( | |
| Path("ai-company.yaml"), | |
| Path("config/ai-company.yaml"), | |
| Path("synthorg.yaml"), | |
| Path("config/synthorg.yaml"), | |
| ) | |
| _HOME_CONFIG_RELATIVE = Path(".ai-company") / "config.yaml" | |
| _HOME_CONFIG_RELATIVE = Path(".synthorg") / "config.yaml" | |
| _CWD_CONFIG_LOCATIONS: tuple[Path, ...] = ( | |
| Path("synthorg.yaml"), | |
| Path("config/synthorg.yaml"), | |
| Path("ai-company.yaml"), | |
| Path("config/ai-company.yaml"), | |
| ) | |
| _HOME_CONFIG_RELATIVES: tuple[Path, ...] = ( | |
| Path(".synthorg") / "config.yaml", | |
| Path(".ai-company") / "config.yaml", | |
| ) |
| _CWD_CONFIG_LOCATIONS: tuple[Path, ...] = ( | |
| Path("ai-company.yaml"), | |
| Path("config/ai-company.yaml"), | |
| Path("synthorg.yaml"), | |
| Path("config/synthorg.yaml"), | |
| ) | |
| _HOME_CONFIG_RELATIVE = Path(".ai-company") / "config.yaml" | |
| _HOME_CONFIG_RELATIVE = Path(".synthorg") / "config.yaml" | |
| candidates = [ | |
| *_CWD_CONFIG_LOCATIONS, | |
| *(Path.home() / rel for rel in _HOME_CONFIG_RELATIVES), | |
| ] |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/ai_company/config/loader.py` around lines 37 - 42, The config discovery
removed legacy paths; update _CWD_CONFIG_LOCATIONS and _HOME_CONFIG_RELATIVE to
include the old filenames as fallbacks (e.g., add Path("ai-company.yaml") and
Path("config/ai-company.yaml") to _CWD_CONFIG_LOCATIONS and support
Path(".ai-company") / "config.yaml" for home), and when detecting a legacy file
emit a deprecation warning (use the existing loader/search function that
references _CWD_CONFIG_LOCATIONS/_HOME_CONFIG_RELATIVE to log a clear
deprecation message indicating the new filename and that the legacy path will be
removed in the next migration window).
There was a problem hiding this comment.
Pull request overview
This PR performs a broad rebrand from “AI Company” to “SynthOrg” across the Python package distribution, web UI copy, default config values, docs, Docker/CI image naming, and test expectations.
Changes:
- Update project identity strings (SynthOrg) across README/spec/docs/UI and API OpenAPI title.
- Rename default artifacts and locations (e.g., config discovery filenames/dirs, SQLite DB filename, Docker sandbox image) and adjust unit tests accordingly.
- Update packaging/automation metadata (pyproject distribution name, release-please package name, GHCR image names).
Reviewed changes
Copilot reviewed 41 out of 43 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| web/index.html | Update landing page title/header branding to SynthOrg |
| uv.lock | Rename editable root package entry to synthorg |
| tests/unit/tools/sandbox/test_sandboxing_config.py | Update expected default Docker sandbox image name |
| tests/unit/tools/sandbox/test_docker_sandbox.py | Update expected default Docker sandbox image name |
| tests/unit/tools/sandbox/test_docker_config.py | Update expected default Docker sandbox image name |
| tests/unit/persistence/test_config.py | Update expected default SQLite DB filename |
| tests/unit/config/test_schema.py | Update expected persistence defaults (SQLite path) |
| tests/unit/config/test_loader.py | Update default company name + config discovery filenames/dirs |
| tests/unit/config/test_defaults.py | Update default company name assertions |
| tests/unit/api/test_app.py | Update OpenAPI title assertion |
| src/ai_company/tools/sandbox/docker_config.py | Change default sandbox image to synthorg-sandbox:latest |
| src/ai_company/templates/loader.py | Move user templates dir to ~/.synthorg/templates |
| src/ai_company/persistence/config.py | Change default SQLite DB filename to synthorg.db |
| src/ai_company/engine/metrics.py | Docstring wording cleanup (remove milestone tag) |
| src/ai_company/engine/classification/detectors.py | Docstring wording cleanup (“initial starting point”) |
| src/ai_company/engine/agent_engine.py | Update TODO tag + completion reason message wording |
| src/ai_company/core/approval.py | Docstring wording cleanup (remove milestone tag) |
| src/ai_company/config/loader.py | Change config discovery paths to synthorg.yaml / ~/.synthorg/config.yaml |
| src/ai_company/config/defaults.py | Change default company name to SynthOrg |
| src/ai_company/communication/conflict_resolution/human_strategy.py | Docstring wording cleanup (remove milestone tag) |
| src/ai_company/budget/tracker.py | Docstring wording cleanup (remove milestone tag) |
| src/ai_company/budget/quota.py | Docstring wording cleanup (“not yet implemented”) |
| src/ai_company/api/approval_store.py | Docstring wording cleanup (“planned”) |
| src/ai_company/api/app.py | Update OpenAPI title to SynthOrg API |
| src/ai_company/init.py | Update top-level package docstring branding |
| README.md | Rebrand README, update repo links/badge, reorganize feature overview |
| pyproject.toml | Rename distribution to synthorg, update description/keywords |
| LICENSE | Update “Licensed Work” name to SynthOrg |
| docs/getting_started.md | Rebrand getting-started text and clone instructions |
| docs/decisions/ADR-002-design-decisions-batch-1.md | Wording updates to remove milestone coupling |
| docs/decisions/ADR-001-memory-layer.md | Rebrand references and remove milestone coupling |
| docker/web/Dockerfile | Rebrand image labels/title/description |
| docker/compose.yml | Rename volume, update DB path to synthorg.db |
| docker/backend/Dockerfile | Rebrand image labels/title/description |
| docker/.env.example | Rebrand header comment |
| DESIGN_SPEC.md | Broad rebrand + milestone-tag removal/wording alignment |
| CLAUDE.md | Rebrand + update suggested pytest commands and guidance |
| .github/workflows/docker.yml | Rename GHCR image targets to synthorg-* |
| .github/SECURITY.md | Update vuln reporting link to new repo path |
| .github/release-please-config.json | Rename release-please package-name to synthorg |
| .github/CONTRIBUTING.md | Rebrand contributing header and clone instructions |
| .claude/skills/worktree/SKILL.md | Rebrand + simplify milestone-driven behavior to issue-driven |
| .claude/skills/research-link/SKILL.md | Rebrand skill text and wording tweaks |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
docker/web/Dockerfile
Outdated
| org.opencontainers.image.url="https://github.com/Aureliolo/ai-company" \ | ||
| org.opencontainers.image.source="https://github.com/Aureliolo/ai-company" \ |
There was a problem hiding this comment.
OCI label metadata still points to the old repo (org.opencontainers.image.url/source are .../ai-company). This makes published images/directories misleading after the SynthOrg rename. Update these label URLs to the new repository location (and keep url/source consistent across backend/web images).
| org.opencontainers.image.url="https://github.com/Aureliolo/ai-company" \ | |
| org.opencontainers.image.source="https://github.com/Aureliolo/ai-company" \ | |
| org.opencontainers.image.url="https://github.com/SynthOrg/synthorg" \ | |
| org.opencontainers.image.source="https://github.com/SynthOrg/synthorg" \ |
docker/backend/Dockerfile
Outdated
| org.opencontainers.image.url="https://github.com/Aureliolo/ai-company" \ | ||
| org.opencontainers.image.source="https://github.com/Aureliolo/ai-company" \ |
There was a problem hiding this comment.
OCI label metadata still points to the old repo (org.opencontainers.image.url/source are .../ai-company). After the SynthOrg rename, these should be updated so image metadata, SBOM links, and scanners resolve to the correct repository.
| org.opencontainers.image.url="https://github.com/Aureliolo/ai-company" \ | |
| org.opencontainers.image.source="https://github.com/Aureliolo/ai-company" \ | |
| org.opencontainers.image.url="https://github.com/SynthOrg/synthorg-backend" \ | |
| org.opencontainers.image.source="https://github.com/SynthOrg/synthorg-backend" \ |
| AI_COMPANY_HOST: "0.0.0.0" | ||
| AI_COMPANY_PORT: "8000" | ||
| AI_COMPANY_DB_PATH: "/data/ai-company.db" | ||
| AI_COMPANY_DB_PATH: "/data/synthorg.db" |
There was a problem hiding this comment.
docker-compose now sets AI_COMPANY_DB_PATH to /data/synthorg.db, but docker/.env.example still documents/defaults AI_COMPANY_DB_PATH to /data/ai-company.db. This inconsistency will cause users to run against an unexpected DB file depending on which source they follow; update the example env file (or adjust compose) to keep them aligned.
| AI_COMPANY_DB_PATH: "/data/synthorg.db" | |
| AI_COMPANY_DB_PATH: "/data/ai-company.db" |
| volumes: | ||
| - ai-company-data:/data | ||
| - synthorg-data:/data | ||
| env_file: .env |
There was a problem hiding this comment.
Renaming the persistent volume from ai-company-data to synthorg-data is a breaking operational change for existing Compose deployments: upgrades will come up with a fresh empty volume unless users manually migrate/rename the old one. Consider preserving the old volume name via a name: mapping, or add an explicit migration note in-compose/comments/docs so existing data isn’t silently ignored.
Greptile SummaryThis PR performs a thorough rebranding of the project from "AI Company" / Key changes:
Confidence Score: 5/5
Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[PR: docs/rebrand to SynthOrg] --> B[Docs & Config]
A --> C[Source Defaults]
A --> D[CI/Docker]
A --> E[Tests]
A --> F[Skills & Tooling]
B --> B1["README, DESIGN_SPEC, CLAUDE.md\nCONTRIBUTING, SECURITY, ADRs\ngetting_started"]
B --> B2["release-please-config.json\n→ package-name: synthorg"]
C --> C1["config/defaults.py\n→ company_name: SynthOrg"]
C --> C2["config/loader.py\n→ synthorg.yaml / ~/.synthorg/"]
C --> C3["persistence/config.py\n→ synthorg.db"]
C --> C4["tools/sandbox/docker_config.py\n→ synthorg-sandbox:latest"]
C --> C5["templates/loader.py\n→ ~/.synthorg/templates"]
C --> C6["api/app.py\n→ title: SynthOrg API"]
D --> D1["docker.yml workflow\n→ ghcr.io/aureliolo/synthorg-backend\n→ ghcr.io/aureliolo/synthorg-web"]
D --> D2["docker/backend/Dockerfile\n→ OCI labels: synthorg-backend\n→ url: Aureliolo/synthorg"]
D --> D3["docker/web/Dockerfile\n→ OCI labels: synthorg-web\n→ url: Aureliolo/synthorg"]
D --> D4["compose.yml\n→ volume: synthorg-data\n→ AI_COMPANY_* env vars kept"]
E --> E1["test_defaults.py → SynthOrg\ntest_loader.py → synthorg.yaml\ntest_config.py → synthorg.db\ntest_docker_config.py → synthorg-sandbox\ntest_app.py → SynthOrg API"]
F --> F1["worktree SKILL.md\n→ milestone-aware → issue-list\n→ better repo name detection"]
F --> F2["pyproject.toml\n→ name: synthorg\n(src/ai_company/ intentionally kept)"]
|
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request undertakes a significant rebranding effort, transitioning the project from 'AI Company' to 'SynthOrg' to better reflect its purpose of building synthetic organizations. Concurrently, it streamlines project documentation and internal references by removing outdated milestone-specific language, making the project's scope and progress more universally understandable and less tied to a rigid development timeline. The changes also include minor technical adjustments to improve development practices, such as enforcing parallel test execution. Highlights
Changelog
Ignored Files
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
…t, and Greptile - Fix OCI image labels in both Dockerfiles (url/source → synthorg) - Fix .env.example db path inconsistency (ai-company.db → synthorg.db) - Fix 3 missed docstring rebrands (communication, core __init__, enums) - Fix leftover milestone reference in research-link skill - Standardize ADR-001 container name to synthorg-backend (6 occurrences) - Fix DESIGN_SPEC commented-out PostgreSQL/MariaDB URLs - Add logger + warning logging to docker_config.py validators - Add blank lines after README ### headings (MD022) - Add -n auto to pytest commands in getting_started + CONTRIBUTING - Fix agent_engine auto-complete reason (review gate not implemented) - Fix approval_store grammar, detectors.py redundant wording - Fix worktree skill: markdown lint, repo name detection, tier computation
There was a problem hiding this comment.
Code Review
This pull request executes a comprehensive rebranding from 'AI Company' to 'SynthOrg' and removes all milestone-related references across the codebase. The changes are extensive, touching documentation, configuration, source code, and tests. The restructuring of the README is a notable improvement in clarity.
My review has identified a few minor oversights where the old repository name is still referenced in Dockerfile labels. I've also suggested a small clarification in one of the skill documentation files to improve command usage examples. Overall, this is a well-executed large-scale refactoring.
| 1. **Fetch all issues for the milestone:** | ||
| 1. **Fetch the specified issues:** | ||
|
|
||
| ```bash |
There was a problem hiding this comment.
The gh issue view <number> command only fetches a single issue. To fetch multiple issues as shown in the example (/worktree tree --issues #26,#30,#133,#168), the gh CLI can accept multiple issue numbers. The documentation should be updated to reflect this to avoid ambiguity. A more accurate command would be gh issue view <numbers...>. For example: gh issue view 26 30 133 168.
| ```bash | |
| gh issue view <numbers...> --repo <owner/repo> --json number,title,state,labels,body |
| org.opencontainers.image.url="https://github.com/Aureliolo/synthorg" \ | ||
| org.opencontainers.image.source="https://github.com/Aureliolo/synthorg" \ |
| org.opencontainers.image.url="https://github.com/Aureliolo/synthorg" \ | ||
| org.opencontainers.image.source="https://github.com/Aureliolo/synthorg" \ |
🤖 I have created a release *beep* *boop* --- ## [0.1.1](v0.1.0...v0.1.1) (2026-03-11) ### Features * add PR preview deployments via Cloudflare Pages ([#302](#302)) ([b73c45a](b73c45a)) ### Bug Fixes * correct deploy-pages SHA and improve preview cleanup reliability ([#304](#304)) ([584d64a](584d64a)) * harden API key hashing with HMAC-SHA256 and clean up legacy changelog ([#292](#292)) ([5e85353](5e85353)) * upgrade upload-pages-artifact to v4 and add zizmor workflow linting ([#299](#299)) ([2eac571](2eac571)) * use Cloudflare Pages API default per_page for pagination ([#305](#305)) ([9fec245](9fec245)) ### Documentation * remove milestone references and rebrand to SynthOrg ([#289](#289)) ([57a03e0](57a03e0)) * set up documentation site, release CI, and sandbox hardening ([#298](#298)) ([0dec9da](0dec9da)) * split DESIGN_SPEC.md into 7 focused design pages ([#308](#308)) ([9ea0788](9ea0788)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --------- Signed-off-by: Aurelio <19254254+Aureliolo@users.noreply.github.com>
Summary
ai-companytosynthorgsynthorg.yaml,~/.synthorg/), db name (synthorg.db), Docker image names (synthorg-backend,synthorg-web,synthorg-sandbox), GHCR paths, compose volume, k8s namespace-n autofor pytest (CLAUDE.md, hookify rule)Files changed (43)
Docs/Config (12 .md + 3 config): README, DESIGN_SPEC, CLAUDE.md, CONTRIBUTING, SECURITY, getting_started, ADR-001, ADR-002, release-please-config, docker.yml, compose.yml, .env.example, LICENSE, pyproject.toml
Source (13 .py): Milestone comment cleanup in 8 files + default value rebranding in 4 files (persistence/config, tools/sandbox/docker_config, config/loader, templates/loader) + api/app title + config/defaults company name + init docstring
Tests (7 .py): Updated assertions for new default values (db name, sandbox image, config file names, API title, company name)
Other: Dockerfiles (labels), web/index.html (title), skill files (worktree, research-link), hookify rule, uv.lock
Test plan
uv run ruff check src/ tests/— passeduv run ruff format src/ tests/— no changesuv run mypy src/ tests/— 0 issues in 869 filesuv run pytest tests/ -n auto --cov=ai_company --cov-fail-under=80— 6828 passed, 94% coverageNotes
src/ai_company/Python package NOT renamed (separate future effort — 500+ file change)AI_COMPANY_*env vars NOT renamed (tied to Python package name)🤖 Generated with Claude Code