-
trigger_org_node_full(): guards (TASK_NOT_READY -- wrong task.status or required artifacts not validation_status=passed; CONCURRENCY_LIMIT_REACHED -- only on the planner/queued transition, per 04-P's guard column; USAGE_LIMIT_REACHED -- detected from the underlying claude error text, best-effort against REQ-14's cited "hit your session limit" phrasing) then calls U-005's trigger_org_node for the real subprocess call, then advances task.status: queued->planning_brd_prd_sdd (planner), planning_brd_prd_sdd ->coding (coder, gated on brd/prd/sdd/benchmark all passed), coding->validating (validator, gated on code_diff/test_report both passed). Verified for real: all three Org Agents actually triggered in sequence (chained claude --agent calls, ~15s/~$0.15 total) with task.status advancing correctly at each step -- not just planner like U-004/U-005's tests, all three personas confirmed invokable. Also corrects two more development-plan.md issues found while scoping this Unit, same class as U-002/U-009/U-036: - U-010's Done line cited '架构文档 §11"手工调用验证"里程碑' -- that phrase doesn't exist in architecture doc §11 at all. The real source is 05 §5.5's rollout step 2 ("手工调用验证...三个 Org Agent 分别可被触发"), whose "分别" (separately/respectively) is the load-bearing word: verify each CAN be triggered, not that a full artifact-validated chain runs end to end. That distinction is why this Unit's scope is exactly what got built -- not chasing planning_failed/coding_failed retries or validator PASS/FAIL routing, which need real Work Graph output (U-011+) or Org-level Loop routing (U-015/016, PH2) that don't exist yet. - Added an explicit scope note spelling out exactly which 3 transitions this Unit owns vs. which parts of p_org_task_lifecycle it deliberately doesn't touch, so nobody has to re-derive this from the code later. 11 new mocked stdlib unittest cases + 1 gated real chained-trigger test. 87 total mocked tests across U-001-010, all passing; the real test independently re-run and confirmed passing. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> -
create_task(): validates goal_text/project_id/task_type (INVALID_PARAM per 03-C §3.1), inserts the task row (status=queued, assigned_org_node=planner, loop_round=0 -- 04-P p_org_task_lifecycle start_state) plus a task_status_changed execution_event, both in one transaction (explicit rollback on failure between the two inserts, tested by dropping execution_event mid-call). c_project_create isn't reimplemented -- it's already complete in U-002 (project_scaffold.create_project). Corrects another Done-line overreach found while scoping this Unit: development-plan.md claimed U-009 alone satisfies all three REQ-01 cases (happy/boundary/failure), but the happy case ("依次触发 planner/coder/ validator...task.status 按状态机正确流转") needs c_org_node_trigger's full implementation -- U-010's own Done criterion is almost that exact sentence, and U-009 doesn't depend on U-010 or even touch org-node triggering. Same class of issue as the U-002/U-036 corrections earlier this session (an SDD/plan line claiming more than the Unit's actual dependencies support), judged low-stakes enough (doesn't change what code to write, just when the REQ-01 happy case gets marked satisfied) to fix directly rather than stop and ask, per the graduated caution this session has been using. Boundary (concurrency limit doesn't block task *creation*, only later scheduling) and failure (INVALID_PARAM) are both fully real at U-009's scope and tested; happy completes cumulatively once U-010 lands. 12 new stdlib unittest cases. 75 total across U-001-009, 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>
-
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>