-
Resolves the A-2 assumption with a real `claude --agent planner -p` call (--permission-mode auto, $0.05) against a deployed target project: the migrated identity comes through correctly, not the default assistant persona. Verdict is "部分成立" (partially confirmed), per the criterion development-plan.md's U-004 line pre-registered for exactly this outcome -- Planner/Validator's SOUL.md migrated almost verbatim, but Coder's SOUL.md needed real rewriting: the original hardcoded a live Feishu Base API token (redacted, never committed), strongly bound its task-claiming to `lark-cli`/Base status vocabulary, and told itself to shell out `claude --dangerously-skip-permissions` (conflicts directly with 05 §5.3.1's `auto`-mode decision). All three replaced with graphlemon's own task table / c_org_node_trigger / task.status vocabulary. Also resolves a second, higher-stakes conflict found while scoping this Unit: where does `.claude/agents/<org_node>.md` actually live? Architecture doc §13.1 says graphlemon's own platform repo; 03-C §3.3 and 05 §5.1 (both core SDD, not the architecture PRD) explicitly say the target project -- matching how Claude Code's --agent flag actually discovers subagents (relative to invocation cwd). User confirmed 03-C/05 win. Resolved as two different files, not a contradiction: agents/<org_node>/SOUL.md (+ validator/AGENTS.md) here is the canonical migrated source (01-M 1.9 agent_profile.soul_file_path, a singleton with no target-project reference); src/agent_profile.py compiles that into the deployable .claude/agents/<org_node>.md and writes it into a target project via deploy_agent_definitions(). Does not reopen the U-002 correction from the previous commit -- .graphlemon/ scaffolding and agent deployment are different, non-conflicting concerns. validator's tools/disallowedTools frontmatter encodes qa/AGENTS.md's original workspace-permission contract (read-only on source, no git mutation commands) as actual Claude Code permissions instead of prose. 14 new stdlib unittest cases (test_agent_profile.py, all real) + 1 gated real-agent test (test_agent_e2e.py, RUN_REAL_AGENT_E2E=1, mirrors graphloop's pattern per CLAUDE.md's Testing constraint -- this is the first Unit that actually shells out to `claude`, so this is also where that harness gets built, per the harness-ownership decision from the earlier "什么还需要" review). 41 total tests across U-001-004, all passing. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
U-003's coverage in unit_matrix.json is empty (no M/V/C/P/REQ) -- its Done criterion is a property, not a contract: platform dir and any target project dir stay physically separate, and the raw log directory never enters graphlemon's own git history. src/paths.py makes the `~/.graphlemon/ logs/...` example path from 01-M 1.13 / architecture doc §13.2 into the actual convention (GRAPHLEMON_HOME-overridable), defaulting to the user's home directory so it's outside this repo's checkout by construction rather than by a .gitignore rule. is_separate_from() is the property U-003 has to guarantee, tested from both directions (target nested in platform home, platform home nested in target). Also fixes a second stale reference to the pre-correction U-002 scope, found while scoping this Unit: U-036's "supervisor/ directory ownership" open question in development-plan.md still described U-002 as owning a `.claude/`/`skills/`/`src/` target-project tree (already corrected out of U-002 itself last commit). Notes that this makes the open question moot -- supervisor/ was never a real target-project candidate. 8 new stdlib unittest cases (src/test_paths.py); 31 total across U-001/U-002/U-003, all passing. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
Implements c_project_create (03-C §3.0) as a plain function for U-007 to wire up later: idempotent by target_folder_path, creates .graphlemon/ + one init commit in an existing git repo, PATH_NOT_FOUND/PATH_NOT_WRITABLE/ GIT_INIT_DECLINED per contract, never silently `git init`s (02-V §2.1). Also corrects a real SDD-vs-plan conflict found while scoping this Unit: development-plan.md's U-002 line cited architecture doc §7.3's directory tree (.claude/agents/, skills/, top-level runs/) as what to create inside a target project. But §13.1 (a later, confirmed decision) states those are graphlemon's own platform-repo assets (U-003 scope), and 01-M's own graphlemon_subdir_initialized field already points at §13.2, whose target- project tree is only .git/ + .graphlemon/ + the target's pre-existing src/. §7.3 predates the "target project is an independent code space" pivot and was superseded by it. Corrected development-plan.md, unit_matrix.json, CLAUDE.md, and 05-实施约束与依赖.md accordingly (user confirmed, 2026-07-31). 23 stdlib unittest cases (src/test_schema.py + new src/test_project_scaffold.py), all passing. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
Implements docs/sdd/01-M-模型设计.md §1.0-1.14 as stdlib sqlite3 DDL in src/ (deployment/deploy_health_signal §1.15-1.16 are PH5/U-034, deliberately excluded). Covers all entities' fields, enum CHECK constraints, FKs, and the two non-trivial unique indexes (work_graph_run's per-(task_id,org_node) active-run partial index, artifact's (task_id,artifact_type,git_commit_sha) composite key). Per user decision (2026-07-30): bug_record.root_cause_category excludes 'core_engine' for now -- that value is PH5-scoped and development-plan.md assigns adding it to U-034, not U-001; a test locks this in. 14 stdlib unittest cases in src/test_schema.py cover table creation and the Done criterion's named constraint classes (unique/FK/enum), all passing. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
Establishes the first commit for graphlemon before U-001 work begins: architecture/SDD docs (including the PH5 self-hosting design already folded into 01-M/03-C/04-P/mvcp-contract v1.7.0), the A-1 spike results, the graphloop-adapted supervisor/isolation utilities, PH3 wireframe prototypes (now cross-referenced from 02-V), and this session's development-plan review (U-024 dependency split, U-035 regression requirement, new U-004.5 e2e-harness unit, src/ directory convention). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>