Skip to content

docs: remove milestone references and rebrand to SynthOrg#289

Merged
Aureliolo merged 4 commits intomainfrom
docs/project-identity-cleanup
Mar 11, 2026
Merged

docs: remove milestone references and rebrand to SynthOrg#289
Aureliolo merged 4 commits intomainfrom
docs/project-identity-cleanup

Conversation

@Aureliolo
Copy link
Copy Markdown
Owner

Summary

  • Remove all M0-M7 milestone references from docs, source comments, and memory files
  • Restructure README from milestone-grouped to domain-grouped feature list
  • Rebrand project from "AI Company" / "ai-company" to "SynthOrg" / "synthorg" across entire codebase
  • Rename GitHub repo from ai-company to synthorg
  • Update all defaults: config file names (synthorg.yaml, ~/.synthorg/), db name (synthorg.db), Docker image names (synthorg-backend, synthorg-web, synthorg-sandbox), GHCR paths, compose volume, k8s namespace
  • Close all GitHub milestones (M1-M7 + M2.5)
  • Enforce -n auto for 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/ — passed
  • uv run ruff format src/ tests/ — no changes
  • uv run mypy src/ tests/ — 0 issues in 869 files
  • uv run pytest tests/ -n auto --cov=ai_company --cov-fail-under=80 — 6828 passed, 94% coverage

Notes

  • CHANGELOG.md intentionally untouched (historical record)
  • 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

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
Copilot AI review requested due to automatic review settings March 11, 2026 09:40
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 11, 2026

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 11, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 9d1a21af-c21f-45df-ad7e-0f9bbfd70845

📥 Commits

Reviewing files that changed from the base of the PR and between 3384d88 and e463bc1.

📒 Files selected for processing (17)
  • .claude/skills/research-link/SKILL.md
  • .claude/skills/worktree/SKILL.md
  • .github/CONTRIBUTING.md
  • DESIGN_SPEC.md
  • README.md
  • docker/.env.example
  • docker/backend/Dockerfile
  • docker/web/Dockerfile
  • docs/decisions/ADR-001-memory-layer.md
  • docs/getting_started.md
  • src/ai_company/api/approval_store.py
  • src/ai_company/communication/__init__.py
  • src/ai_company/core/__init__.py
  • src/ai_company/core/enums.py
  • src/ai_company/engine/agent_engine.py
  • src/ai_company/engine/classification/detectors.py
  • src/ai_company/tools/sandbox/docker_config.py

📝 Walkthrough

Summary by CodeRabbit

  • Chores

    • Rebranded project to SynthOrg across code, configs, CI/CD, Docker metadata, and assets.
    • Updated defaults and discovery paths (config files, DB filenames, template paths, image names) to match new name.
    • Minor runtime/default value updates and added validation logging in sandbox configuration.
  • Documentation

    • Updated README, contributing, security, design docs, ADRs, and getting-started content to reflect rebrand and revised guidance.
  • Tests

    • Adjusted test expectations/fixtures to align with renamed resources and defaults.

Walkthrough

Rebrands 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

Cohort / File(s) Summary
Project Metadata & Packaging
pyproject.toml, .github/release-please-config.json, LICENSE
Project name, description, keywords, and release config renamed from ai-company → synthorg; license "Licensed Work" updated.
Docs & Onboarding
README.md, CLAUDE.md, .github/CONTRIBUTING.md, docs/getting_started.md, .github/SECURITY.md
Repository URLs, clone instructions, test snippets, and security advisory URL updated to synthorg; README reorganized and milestone wording generalized.
Skills / CLI Guidance
.claude/skills/research-link/SKILL.md, .claude/skills/worktree/SKILL.md
Replaced ai-company → SynthOrg and converted milestone-centric guidance to issue/issue-list terminology and examples.
Docker, Compose & CI Images
docker/backend/Dockerfile, docker/web/Dockerfile, docker/compose.yml, docker/.env.example, .github/workflows/docker.yml
OCI labels, image refs, compose volume names, and DB paths changed from ai-company* → synthorg*; CI workflow image/signing targets updated.
Config Discovery & Defaults
src/ai_company/config/defaults.py, src/ai_company/config/loader.py, src/ai_company/persistence/config.py, src/ai_company/templates/loader.py
Default company_name, SQLite default filename, config discovery filenames/paths, and user templates dir updated to SynthOrg/.synthorg and synthorg.db.
Core Code & Docstrings
src/ai_company/__init__.py, src/ai_company/communication/__init__.py, src/ai_company/core/__init__.py, src/ai_company/core/enums.py, src/ai_company/core/approval.py
Module docstrings and descriptive text updated to reference SynthOrg and to remove milestone labels. No API changes.
Engine & Metrics
src/ai_company/engine/agent_engine.py, src/ai_company/engine/classification/detectors.py, src/ai_company/engine/metrics.py
Removed explicit milestone markers from comments/logs and generalized TODO/log reasons. Minor textual tweaks only.
API & Services
src/ai_company/api/app.py, src/ai_company/api/approval_store.py
OpenAPI title changed to "SynthOrg API"; docstrings generalized.
Sandbox / Tools
src/ai_company/tools/sandbox/docker_config.py
Default sandbox image updated to synthorg-sandbox:latest; added observability imports, module logger, and CONFIG_VALIDATION_FAILED warning logs for validation failures (logging only).
Budget / Tracker
src/ai_company/budget/quota.py, src/ai_company/budget/tracker.py
Docstring wording changed to remove milestone references; no behavior changes.
Config Tests & Loader Tests
tests/unit/config/*, tests/unit/persistence/test_config.py
Test fixtures and expectations updated from ai-company → synthorg (company_name, config filenames, sqlite path).
API & Sandbox Tests
tests/unit/api/test_app.py, tests/unit/tools/sandbox/*
Assertions adjusted for OpenAPI title and sandbox image default names to match rebrand.
Architecture Decisions & Docs
docs/decisions/ADR-001-memory-layer.md, docs/decisions/ADR-002-design-decisions-batch-1.md
Container names and phase/milestone labels generalized; minor wording clarifications.
Web UI
web/index.html
Page title and main heading changed to "SynthOrg".

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~28 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 16.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the two main changes: removal of milestone references and rebranding to SynthOrg, which align with the primary objectives.
Description check ✅ Passed The description comprehensively covers the changeset, detailing milestone removal, rebranding scope, file changes, and intentional exclusions with clear test verification.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch docs/project-identity-cleanup
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch docs/project-identity-cleanup

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 | 🟡 Minor

Inconsistent database path with docker/compose.yml.

The example shows /data/ai-company.db but docker/compose.yml now sets AI_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 | 🟡 Minor

Remove the leftover milestone example from the LATER rule.

Line 120 still uses M5 Memory & Budget as 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

📥 Commits

Reviewing files that changed from the base of the PR and between 0857288 and 3384d88.

⛔ Files ignored due to path filters (1)
  • uv.lock is 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.yml
  • CLAUDE.md
  • DESIGN_SPEC.md
  • LICENSE
  • README.md
  • docker/.env.example
  • docker/backend/Dockerfile
  • docker/compose.yml
  • docker/web/Dockerfile
  • docs/decisions/ADR-001-memory-layer.md
  • docs/decisions/ADR-002-design-decisions-batch-1.md
  • docs/getting_started.md
  • pyproject.toml
  • src/ai_company/__init__.py
  • src/ai_company/api/app.py
  • src/ai_company/api/approval_store.py
  • src/ai_company/budget/quota.py
  • src/ai_company/budget/tracker.py
  • src/ai_company/communication/conflict_resolution/human_strategy.py
  • src/ai_company/config/defaults.py
  • src/ai_company/config/loader.py
  • src/ai_company/core/approval.py
  • src/ai_company/engine/agent_engine.py
  • src/ai_company/engine/classification/detectors.py
  • src/ai_company/engine/metrics.py
  • src/ai_company/persistence/config.py
  • src/ai_company/templates/loader.py
  • src/ai_company/tools/sandbox/docker_config.py
  • tests/unit/api/test_app.py
  • tests/unit/config/test_defaults.py
  • tests/unit/config/test_loader.py
  • tests/unit/config/test_schema.py
  • tests/unit/persistence/test_config.py
  • tests/unit/tools/sandbox/test_docker_config.py
  • tests/unit/tools/sandbox/test_docker_sandbox.py
  • tests/unit/tools/sandbox/test_sandboxing_config.py
  • web/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 use from __future__ import annotations — Python 3.14 has PEP 649 native lazy annotations
Use except 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.py
  • src/ai_company/budget/tracker.py
  • tests/unit/tools/sandbox/test_docker_config.py
  • tests/unit/config/test_schema.py
  • tests/unit/persistence/test_config.py
  • src/ai_company/engine/classification/detectors.py
  • tests/unit/config/test_defaults.py
  • tests/unit/tools/sandbox/test_docker_sandbox.py
  • src/ai_company/budget/quota.py
  • src/ai_company/templates/loader.py
  • src/ai_company/config/loader.py
  • src/ai_company/__init__.py
  • src/ai_company/persistence/config.py
  • tests/unit/api/test_app.py
  • src/ai_company/engine/metrics.py
  • src/ai_company/api/app.py
  • tests/unit/config/test_loader.py
  • tests/unit/tools/sandbox/test_sandboxing_config.py
  • src/ai_company/tools/sandbox/docker_config.py
  • src/ai_company/config/defaults.py
  • src/ai_company/communication/conflict_resolution/human_strategy.py
  • src/ai_company/api/approval_store.py
  • src/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 via from ai_company.observability import get_logger and create logger = get_logger(__name__) — never use import logging or logging.getLogger() or print()
Always use event name constants from ai_company.observability.events.<domain> modules (e.g. PROVIDER_CALL_START from events.provider) — import directly and log with structured kwargs: logger.info(EVENT, key=value) never logger.info("msg %s", val)
Create new objects rather than mutating existing ones. For non-Pydantic internal collections use copy.deepcopy() at construction and wrap with MappingProxyType for read-only enforcement. For dict/list fields in frozen Pydantic models, use copy.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 (with model_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_field for derived values instead of storing redundant fields. Use NotBlankStr from core.types for all identifier/name fields (including optional NotBlankStr | None and tuple tuple[NotBlankStr, ...] variants) instead of manual whitespace validators
Prefer asyncio.TaskGroup for fan-out/fan-in parallel operations in new code (multiple tool invocations, parallel agent calls) — use structured concurrency over bare create_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/small as aliases. Use test-provider, test-small-001 in tests

Files:

  • src/ai_company/engine/agent_engine.py
  • src/ai_company/budget/tracker.py
  • src/ai_company/engine/classification/detectors.py
  • src/ai_company/budget/quota.py
  • src/ai_company/templates/loader.py
  • src/ai_company/config/loader.py
  • src/ai_company/__init__.py
  • src/ai_company/persistence/config.py
  • src/ai_company/engine/metrics.py
  • src/ai_company/api/app.py
  • src/ai_company/tools/sandbox/docker_config.py
  • src/ai_company/config/defaults.py
  • src/ai_company/communication/conflict_resolution/human_strategy.py
  • src/ai_company/api/approval_store.py
  • src/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. Use test-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.parametrize to test similar cases rather than duplicating test logic

Files:

  • tests/unit/tools/sandbox/test_docker_config.py
  • tests/unit/config/test_schema.py
  • tests/unit/persistence/test_config.py
  • tests/unit/config/test_defaults.py
  • tests/unit/tools/sandbox/test_docker_sandbox.py
  • tests/unit/api/test_app.py
  • tests/unit/config/test_loader.py
  • tests/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 uses nginxinc/nginx-unprivileged with 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/templates as part of the SynthOrg rebrand.

.github/release-please-config.json (1)

6-6: LGTM!

Package name correctly updated to synthorg for release-please. The extra-files path on line 27 still referencing src/ai_company/__init__.py is 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:latest default 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
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 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:

  1. Manually rename/copy the volume, or
  2. 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.

Comment on lines 37 to +42
_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"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

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.

Suggested change
_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",
)
Suggested change
_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).

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment on lines 11 to 12
org.opencontainers.image.url="https://github.com/Aureliolo/ai-company" \
org.opencontainers.image.source="https://github.com/Aureliolo/ai-company" \
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Suggested change
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" \

Copilot uses AI. Check for mistakes.
Comment on lines 76 to 77
org.opencontainers.image.url="https://github.com/Aureliolo/ai-company" \
org.opencontainers.image.source="https://github.com/Aureliolo/ai-company" \
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
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" \

Copilot uses AI. Check for mistakes.
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"
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
AI_COMPANY_DB_PATH: "/data/synthorg.db"
AI_COMPANY_DB_PATH: "/data/ai-company.db"

Copilot uses AI. Check for mistakes.
Comment on lines 8 to 10
volumes:
- ai-company-data:/data
- synthorg-data:/data
env_file: .env
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
@greptile-apps
Copy link
Copy Markdown

greptile-apps bot commented Mar 11, 2026

Greptile Summary

This PR performs a thorough rebranding of the project from "AI Company" / ai-company to "SynthOrg" / synthorg across docs, config defaults, Docker infrastructure, CI workflows, and skill files — while also cleaning up all M0–M7 milestone references. The Python package path (src/ai_company/) and AI_COMPANY_* environment variable prefixes are intentionally preserved as a deferred effort.

Key changes:

  • All config file discovery paths updated to synthorg.yaml / ~/.synthorg/config.yaml, default DB to synthorg.db, sandbox image to synthorg-sandbox:latest, and company name default to "SynthOrg"
  • Docker OCI image labels, GHCR push targets, cosign signing references, and compose volume all renamed to synthorg-*
  • CI workflow (docker.yml) fully updated — backend and web image paths, scan references, and signing targets are all consistent
  • release-please-config.json package name updated to synthorg
  • pyproject.toml project name updated; hatch build still targets src/ai_company (intentional — noted in PR)
  • Worktree skill improved with better repo-name detection (git rev-parse --show-toplevel) and milestone-aware commands replaced with issue-list equivalents
  • Test assertions updated across 7 test files to match all new default values
  • One minor ambiguity: CLAUDE.md line 80 still uses milestone as a progressive trust strategy label — worth confirming whether this is an intentional code concept name or a missed cleanup item

Confidence Score: 5/5

  • This PR is safe to merge — it is a well-scoped docs/config rebrand with no functional logic changes, all tests pass, and all default values are internally consistent.
  • The changes are purely renaming and documentation cleanup with no algorithmic or security-sensitive logic introduced. Default value changes (DB name, config paths, image names) are all reflected in updated tests. Docker OCI labels and CI targets are fully consistent. The only open question is whether milestone in the progressive trust strategy description (CLAUDE.md line 80) is an intentional code-level strategy name or a missed cleanup — but this is a doc/comment concern, not a runtime issue. Full test suite (6828 tests, 94% coverage) and static analysis passed.
  • No files require special attention — CLAUDE.md has a minor ambiguity on line 80 worth a quick confirmation before closing.

Important Files Changed

Filename Overview
src/ai_company/config/loader.py Config discovery paths updated to synthorg.yaml / ~/.synthorg/config.yaml; clean rebranding.
src/ai_company/persistence/config.py SQLite default database filename updated to synthorg.db; no issues.
src/ai_company/tools/sandbox/docker_config.py Default sandbox Docker image renamed to synthorg-sandbox:latest; no issues.
docker/backend/Dockerfile OCI image labels updated to synthorg-backend and repo URL updated to Aureliolo/synthorg; previous concern is resolved.
docker/web/Dockerfile OCI image labels updated to synthorg-web and repo URL updated to Aureliolo/synthorg; previous concern is resolved.
.github/workflows/docker.yml All GHCR image references updated from ai-company-backend/web to synthorg-backend/web; cosign signing targets updated too.
docker/compose.yml Volume renamed to synthorg-data; AI_COMPANY_* env vars intentionally preserved per PR notes; no issues.
pyproject.toml Package name updated to synthorg; hatch build target still points to src/ai_company per intentional deferred rename.
CLAUDE.md Rebranded to SynthOrg; -n auto pytest flag enforced; one residual milestone reference remains in the progressive trust strategy list (line 80).
.claude/skills/worktree/SKILL.md Milestone-aware commands replaced with issue-list-based equivalents; repo name detection improved to use git rev-parse --show-toplevel.

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)"]
Loading

Comments Outside Diff (1)

  1. CLAUDE.md, line 80 (link)

    Residual milestone reference in progressive trust strategy list

    The security/ module description still lists milestone as one of the four progressive trust strategies: disabled/weighted/per-category/milestone. Since this PR explicitly aims to remove milestone references from all docs and source comments, it's worth clarifying whether milestone here is:

    1. An actual code-level strategy name (a TrustStrategy enum variant whose value is "milestone"), in which case it's correct to keep it — the strategy name isn't a project-workflow concept.
    2. A leftover label that was describing a trust strategy tied to milestone completion (i.e. "trust advances when the agent completes a milestone"), which should now be renamed/reworded.

    If it's (1), a brief clarifying comment like # "milestone" here is a strategy name, not a project milestone would prevent future confusion. If it's (2), this line should be updated to match whatever the strategy was renamed to in the implementation.

Last reviewed commit: e463bc1

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, 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

  • Project Rebranding: The project has been comprehensively rebranded from "AI Company" to "SynthOrg" across documentation, configuration, and code references. This includes updating repository names, Docker image names, and default configuration file paths.
  • Milestone References Removed: All explicit references to M0-M7 milestones have been removed from documentation, source code comments, and skill definitions, shifting towards a more general and flexible development roadmap.
  • README Restructuring: The main README.md file has been reorganized to group features by domain rather than by milestone, providing a clearer overview of the project's capabilities.
  • Pytest Parallelism Enforcement: The CLAUDE.md documentation and skill definitions now explicitly enforce the use of -n auto for pytest to ensure parallel test execution.
  • Worktree Skill Updates: The worktree skill has been updated to remove milestone-aware commands, focusing instead on issue-list based dependency management and worktree creation.
Changelog
  • .claude/skills/research-link/SKILL.md
    • Updated project name references from "ai-company" to "SynthOrg".
    • Removed "milestones" from the description of DESIGN_SPEC.md as an authoritative source.
    • Changed the "LATER" verdict description from "not for current milestone" to "not for current scope".
  • .claude/skills/worktree/SKILL.md
    • Updated the description of the Worktree Manager to change "milestone tree view" to "dependency tree view".
    • Modified Mode 3 setup command to be "Issue list only" by removing the --milestone option.
    • Updated directory naming examples to use synthorg-wt- instead of ai-company-wt-.
    • Removed milestone progress reporting from the cleanup command.
    • Updated the tree command to operate on a set of issues instead of a milestone.
    • Adjusted input validation for milestone identifiers to be for "Label/filter values".
    • Updated the usage guide to reflect the removal of milestone-specific commands.
  • .github/CONTRIBUTING.md
    • Updated the project title from "AI Company" to "SynthOrg".
    • Modified the git clone URL to use synthorg.git.
  • .github/SECURITY.md
    • Updated the GitHub private vulnerability reporting URL to reference synthorg instead of ai-company.
  • .github/release-please-config.json
    • Updated the package-name from ai-company to synthorg.
  • CLAUDE.md
    • Updated the document title from "AI Company" to "SynthOrg".
    • Revised the project description to reflect the "SynthOrg" branding.
    • Added -n auto to pytest commands for unit, integration, and e2e tests.
    • Updated the example path in shell usage instructions from ai-company to synthorg.
    • Emphasized the requirement to always include -n auto when running pytest.
  • LICENSE
    • Updated the "Licensed Work" name from "AI Company" to "SynthOrg".
  • README.md
    • Updated the main title from "AI Company" to "SynthOrg".
    • Updated the CI badge URL to reflect the synthorg repository name.
    • Revised the project concept description to use "SynthOrg".
    • Restructured the "Current Capability Snapshot" into a "What's Built" section with domain-grouped features, removing milestone references.
    • Updated the project status description to remove milestone-specific language.
    • Modified the git clone command to use synthorg.git.
  • docker/.env.example
    • Updated the comment header from "AI Company" to "SynthOrg".
  • docker/backend/Dockerfile
    • Updated the comment header from "AI Company Backend" to "SynthOrg Backend".
    • Modified the OCI image title label from ai-company-backend to synthorg-backend.
  • docker/compose.yml
    • Updated the Docker volume name from ai-company-data to synthorg-data.
    • Changed the AI_COMPANY_DB_PATH environment variable default to /data/synthorg.db.
  • docker/web/Dockerfile
    • Updated the comment header from "AI Company Web" to "SynthOrg Web".
    • Modified the OCI image title label from ai-company-web to synthorg-web.
  • docs/decisions/ADR-001-memory-layer.md
    • Removed the reference to "M5 milestone" and replaced it with "memory subsystem implementation".
    • Updated references to the Docker container name from ai-company to synthorg.
    • Renamed memory layer phases from "M5-Phase X" to "Phase X".
  • docs/decisions/ADR-002-design-decisions-batch-1.md
    • Updated the decision for Docker sandbox evaluation from "post-M7" to "later".
    • Removed specific "M7" references from descriptions related to SecOps agent and approval mapping.
  • docs/getting_started.md
    • Updated the document title from "AI Company" to "SynthOrg".
    • Modified the git clone command to use synthorg.git.
    • Updated the project layout root directory from ai-company/ to synthorg/.
  • pyproject.toml
    • Updated the project name from ai-company to synthorg.
    • Revised the project description to reflect the new branding.
    • Updated project keywords to include synthetic-organization and synthorg.
  • src/ai_company/init.py
    • Updated the package docstring from "AI Company" to "SynthOrg".
  • src/ai_company/api/app.py
    • Modified the OpenAPI title from "AI Company API" to "SynthOrg API".
  • src/ai_company/api/approval_store.py
    • Removed the "in M7" reference from the comment about persistence-backed implementation.
  • src/ai_company/budget/quota.py
    • Removed the "in M5" reference from the comment about queueing degradation action.
  • src/ai_company/budget/tracker.py
    • Removed the "as part of M5" reference from the comment about persistence integration.
  • src/ai_company/communication/conflict_resolution/human_strategy.py
    • Removed the "M6" reference from the comment about human approval queue integration.
  • src/ai_company/config/defaults.py
    • Updated the default company_name from "AI Company" to "SynthOrg".
  • src/ai_company/config/loader.py
    • Updated default config file names from ai-company.yaml to synthorg.yaml.
    • Modified the home directory config path from .ai-company to .synthorg.
    • Updated the config discovery search order examples.
  • src/ai_company/core/approval.py
    • Removed the "in M7" reference from the comment about engine/security subsystem usage.
  • src/ai_company/engine/agent_engine.py
    • Removed "M4" and "M3" references from a TODO comment regarding review gates.
  • src/ai_company/engine/classification/detectors.py
    • Removed the "M5" reference from the comment about detection heuristics.
  • src/ai_company/engine/metrics.py
    • Removed the "M3" reference from the comment about task completion metrics model.
  • src/ai_company/persistence/config.py
    • Updated the default SQLite database path from ai-company.db to synthorg.db.
  • src/ai_company/templates/loader.py
    • Modified the user templates directory path from .ai-company to .synthorg.
  • src/ai_company/tools/sandbox/docker_config.py
    • Updated the default Docker sandbox image name from ai-company-sandbox:latest to synthorg-sandbox:latest.
  • tests/unit/api/test_app.py
    • Updated the assertion for the OpenAPI title to expect "SynthOrg API".
  • tests/unit/config/test_defaults.py
    • Updated assertions for the default company_name to "SynthOrg".
  • tests/unit/config/test_loader.py
    • Updated assertions and file paths in config discovery tests to reflect the synthorg rebranding.
  • tests/unit/config/test_schema.py
    • Updated the assertion for the default SQLite database path to synthorg.db.
  • tests/unit/persistence/test_config.py
    • Updated the assertion for the default SQLite database path to synthorg.db.
  • tests/unit/tools/sandbox/test_docker_config.py
    • Updated the assertion for the default Docker sandbox image to synthorg-sandbox:latest.
  • tests/unit/tools/sandbox/test_docker_sandbox.py
    • Updated the assertion for the default Docker sandbox image to synthorg-sandbox:latest.
  • tests/unit/tools/sandbox/test_sandboxing_config.py
    • Updated the assertion for the default Docker sandbox image to synthorg-sandbox:latest.
  • uv.lock
    • Removed the ai-company package entry and added a synthorg package entry, reflecting the project name change and its dependencies.
  • web/index.html
    • Updated the HTML page title and the main heading from "AI Company" to "SynthOrg".
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/docker.yml
Using Gemini Code Assist

The 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 /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

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 .gemini/ folder in the base of the repository. Detailed instructions can be found here.

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

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

…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
@Aureliolo Aureliolo merged commit 57a03e0 into main Mar 11, 2026
10 of 12 checks passed
@Aureliolo Aureliolo deleted the docs/project-identity-cleanup branch March 11, 2026 10:11
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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.

Suggested change
```bash
gh issue view <numbers...> --repo <owner/repo> --json number,title,state,labels,body

Comment on lines +76 to +77
org.opencontainers.image.url="https://github.com/Aureliolo/synthorg" \
org.opencontainers.image.source="https://github.com/Aureliolo/synthorg" \
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The repository has been renamed to synthorg. These URLs should be updated to reflect the new repository name.

      org.opencontainers.image.url="https://github.com/Aureliolo/synthorg" \
      org.opencontainers.image.source="https://github.com/Aureliolo/synthorg" \

Comment on lines +11 to +12
org.opencontainers.image.url="https://github.com/Aureliolo/synthorg" \
org.opencontainers.image.source="https://github.com/Aureliolo/synthorg" \
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The repository has been renamed to synthorg. These URLs should be updated to reflect the new repository name.

      org.opencontainers.image.url="https://github.com/Aureliolo/synthorg" \
      org.opencontainers.image.source="https://github.com/Aureliolo/synthorg" \

Aureliolo added a commit that referenced this pull request Mar 11, 2026
🤖 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants