Logo white

宜博 / lemongraph

Sign in
  • Sign in
  • Project
  • Files
  • Commits
  • Network
  • Graphs
  • Milestones
  • Issues 0
  • Merge Requests 0
  • Labels
  • Wiki
  • Commits 341
  • Compare
  • Branches 1
  • Tags 0
  • lemongraph
03 Aug, 2026
37 commits
  • U-041 fix: rollback path A now removes the candidate's worktree checkout ...
    4b293a8e
    The 7th real self-hosting attempt was the first to actually reach a real
    health check against a real candidate process -- it correctly failed and
    triggered rollback_path_a for real: candidate terminated, git revert landed
    cleanly. But the candidate's `git worktree add --detach` checkout
    (candidate_instance_dir, tracked since U-037 specifically to know where
    this lives) was never removed -- left permanently on disk and still
    registered in `git worktree list`. A confirmed-bad candidate is never
    needed again after path A, unlike a successful cutover's candidate (which
    correctly becomes previous_instance_dir, kept until the monitoring window
    closes) -- these are different lifecycles that shouldn't share the same
    "leave it" behavior.
    
    rollback_path_a gains an optional candidate_instance_dir parameter
    (default None, existing tests unaffected) and removes the worktree before
    git revert when provided. self_hosting_e2e.py now threads through the
    value stage_deployment() already returns. New regression test uses a real
    `git worktree add --detach` checkout and confirms both the directory and
    its git worktree registration are gone after rollback.
    
    Also cleaned up 3 orphaned processes left by earlier test_deploy_rollback.py
    runs (backing temp dirs already gone) and the real leftover candidate
    worktree from this run.
    
    561 tests green (440 src + 121 supervisor).
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    bboonnee authored
    2026-08-03 01:01:50 +0800  
    Browse Code »
  • graphlemon: real agent-memory updates from self-hosting run 7 (validator)
    f220d91d
    bboonnee authored
    2026-08-03 01:01:40 +0800  
    Browse Code »
  • Revert "graphlemon: test_report artifact for task 4fda1803-3ee0-40c8-8209-b0baef56d54b" ...
    b5308c13
    This reverts commit d77320f8d5b0600c99dcb6969e868f6d348ce9fb.
    bboonnee authored
    2026-08-03 00:56:54 +0800  
    Browse Code »
  • graphlemon: test_report artifact for task 4fda1803-3ee0-40c8-8209-b0baef56d54b
    d77320f8
    graphlemon authored
    2026-08-03 00:54:59 +0800  
    Browse Code »
  • graphlemon: code_diff artifact for task 4fda1803-3ee0-40c8-8209-b0baef56d54b
    0ad6e42a
    graphlemon authored
    2026-08-03 00:54:59 +0800  
    Browse Code »
  • graphlemon: merge b24c881d-ecea-4caa-ab32-39beca07f9c4
    52663300
    graphlemon authored
    2026-08-03 00:54:59 +0800  
    Browse Code »
  • graphlemon: auto-commit uncommitted worktree changes for b24c881d-ecea-4caa-ab32-39beca07f9c4
    5bb25db3
    graphlemon authored
    2026-08-03 00:54:59 +0800  
    Browse Code »
  • graphlemon: benchmark artifact for task 4fda1803-3ee0-40c8-8209-b0baef56d54b
    c8c1548c
    graphlemon authored
    2026-08-03 00:53:35 +0800  
    Browse Code »
  • graphlemon: sdd artifact for task 4fda1803-3ee0-40c8-8209-b0baef56d54b
    a6cf3689
    graphlemon authored
    2026-08-03 00:53:35 +0800  
    Browse Code »
  • graphlemon: prd artifact for task 4fda1803-3ee0-40c8-8209-b0baef56d54b
    222c956c
    graphlemon authored
    2026-08-03 00:53:35 +0800  
    Browse Code »
  • graphlemon: brd artifact for task 4fda1803-3ee0-40c8-8209-b0baef56d54b
    a003b4c5
    graphlemon authored
    2026-08-03 00:53:35 +0800  
    Browse Code »
  • graphlemon: merge 64673231-c2e5-4160-9840-426fae66fe8d
    207153dd
    graphlemon authored
    2026-08-03 00:48:26 +0800  
    Browse Code »
  • graphlemon: auto-commit uncommitted worktree changes for 64673231-c2e5-4160-9840-426fae66fe8d
    70f05579
    graphlemon authored
    2026-08-03 00:48:26 +0800  
    Browse Code »
  • U-011 fix: deterministically enforce the canonical BRD->PRD->SDD->Benchmark chain ...
    0d602ed4
    The 6th real self-hosting attempt (first to reach the full 4-node doc-writing
    graph after the previous five bugs) hit a genuinely new failure: this real
    graph_manifest had no edges at all, not just wrong field names -- worse than
    the case _normalize_graph_manifest already handled. With zero dependency
    info to normalize from, topological_order() scheduled 'benchmark' before
    'sdd' (alphabetically first among zero-in-degree nodes), and build_prompt()
    crashed with KeyError: 'sdd_content' trying to format a template needing
    sdd's not-yet-produced output.
    
    _PROMPT_TEMPLATE always asks for exactly the same fixed 4-node linear chain
    -- that's a constant architectural fact, not something that should be
    re-inferred from the LLM's output every call. _normalize_graph_manifest now
    deterministically enforces brd->prd->sdd->benchmark whenever all four
    canonical artifact_types are present, regardless of what depends_on/edges
    the LLM did or didn't provide. Same "机制用代码" principle as
    ensure_worktree_committed and the earlier normalize logic.
    
    Three new regression tests: zero dependency info still gets the chain
    enforced, node_id != artifact_type still resolves to the real node_id (not
    a guessed string), and a partial set (missing one of the four types) is
    correctly left alone rather than guessed at.
    
    560 tests green (440 src + 120 supervisor).
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    bboonnee authored
    2026-08-03 00:45:00 +0800  
    Browse Code »
  • graphlemon: test_report artifact for task 0175484a-8498-48f6-a82b-f229fc015d28
    2aa68435
    graphlemon authored
    2026-08-03 00:38:51 +0800  
    Browse Code »
  • graphlemon: code_diff artifact for task 0175484a-8498-48f6-a82b-f229fc015d28
    6e9b7a3a
    graphlemon authored
    2026-08-03 00:38:51 +0800  
    Browse Code »
  • graphlemon: merge 9d0b0265-5b00-4fd2-b748-f5d0cd5faf77
    2f2db22d
    graphlemon authored
    2026-08-03 00:38:51 +0800  
    Browse Code »
  • graphlemon: auto-commit uncommitted worktree changes for 9d0b0265-5b00-4fd2-b748-f5d0cd5faf77
    81fefe76
    graphlemon authored
    2026-08-03 00:38:51 +0800  
    Browse Code »
  • graphlemon: benchmark artifact for task 0175484a-8498-48f6-a82b-f229fc015d28
    d1e40a2a
    graphlemon authored
    2026-08-03 00:37:03 +0800  
    Browse Code »
  • graphlemon: sdd artifact for task 0175484a-8498-48f6-a82b-f229fc015d28
    48d55945
    graphlemon authored
    2026-08-03 00:37:03 +0800  
    Browse Code »
  • graphlemon: prd artifact for task 0175484a-8498-48f6-a82b-f229fc015d28
    f9af13aa
    graphlemon authored
    2026-08-03 00:37:03 +0800  
    Browse Code »
  • graphlemon: brd artifact for task 0175484a-8498-48f6-a82b-f229fc015d28
    7447be7f
    graphlemon authored
    2026-08-03 00:37:03 +0800  
    Browse Code »
  • U-031 fix: worktree-isolate the PRD consistency check for self-target ...
    0b32b95a
    The 4th real self-hosting attempt (first to reach the actual doc-writing
    Work Graph after the previous three bugs) hit a real git merge failure:
    "local changes would be overwritten by merge", exit code 2.
    
    Root cause: _check_prd_consistency() calls execute_work_graph() directly
    against target_folder_path, completely bypassing work_node_run.run_work_node's
    worktree isolation. It uses agentType='planner' with memory:project, which
    writes a real update to .claude/agent-memory/planner/MEMORY.md in whatever
    cwd it runs with. Every prior real run of this check only ever targeted a
    throwaway clone, so this never mattered -- until self-targeting, where cwd
    IS the main checkout: the memory write landed as an uncommitted local
    change on master, which then blocked the SDD node's own (correctly
    isolated) worktree merge right after it.
    
    Fix: apply 05 §5.8's same unconditional self-target worktree rule here,
    reusing work_node_run's existing create_worktree/ensure_worktree_committed/
    merge_worktree/remove_worktree rather than inventing a new mechanism.
    Non-self-target calls are unaffected (verified by both regression tests).
    
    Also cleaned up the real, now-recovered state from the failed 4th attempt:
    merged a real SDD-node worktree branch that got stranded uncommitted
    (conflict was just two near-identical memory file wordings, resolved by
    hand), and removed three orphaned worktrees left by earlier test runs.
    
    557 tests green (437 src + 120 supervisor).
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    bboonnee authored
    2026-08-03 00:27:40 +0800  
    Browse Code »
  • graphlemon: merge 044315ed-c80e-4866-a582-92efda9e9315 (retried after cleanup)
    c425ab85
    bboonnee authored
    2026-08-03 00:23:47 +0800  
    Browse Code »
  • graphlemon: real agent-memory updates from self-hosting investigation runs
    6eb24998
    bboonnee authored
    2026-08-03 00:23:06 +0800  
    Browse Code »
  • graphlemon: auto-commit uncommitted worktree changes for 044315ed-c80e-4866-a582-92efda9e9315
    edd48331
    graphlemon authored
    2026-08-03 00:19:55 +0800  
    Browse Code »
  • U-037 fix: bootstrap a fresh db when prod_db_path doesn't exist yet ...
    2b9b9a90
    The third real self-hosting attempt (first to actually reach stage_deployment
    itself, past the earlier bootstrap/commit bugs) hit an uncaught
    FileNotFoundError: _copy_prod_db() assumed prod_db_path always exists and
    shutil.copy2()'d it unconditionally. graphlemon has never actually run as a
    persistent service, so ~/.graphlemon/graphlemon.db never existed.
    stage_deployment() already handles this exact class of "no prior state"
    bootstrap case for previous_commit_hash/previous_instance_dir -- prod_db_path
    never got the same treatment, and every existing test seeds a prod db in
    setUp so this was never exercised.
    
    Fix: when prod_db_path doesn't exist, create a fresh schema'd db instead of
    copying -- semantically correct, since a genuinely-first deployment has no
    production data to inherit. New regression test (BootstrapProdDbTest) covers
    it. 555 tests green (435 src + 120 supervisor).
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    bboonnee authored
    2026-08-03 00:16:10 +0800  
    Browse Code »
  • graphlemon: test_report artifact for task 16f1d360-5117-40bf-98e6-0821058a61b8
    438607d6
    graphlemon authored
    2026-08-03 00:11:29 +0800  
    Browse Code »
  • graphlemon: code_diff artifact for task 16f1d360-5117-40bf-98e6-0821058a61b8
    045aa97a
    graphlemon authored
    2026-08-03 00:11:29 +0800  
    Browse Code »
  • graphlemon: merge e512b26e-556f-42c7-98db-6969c5c810a2
    9b244fcd
    graphlemon authored
    2026-08-03 00:11:29 +0800  
    Browse Code »
  • graphlemon: auto-commit uncommitted worktree changes for e512b26e-556f-42c7-98db-6969c5c810a2
    ea3561a6
    graphlemon authored
    2026-08-03 00:11:29 +0800  
    Browse Code »
  • graphlemon: benchmark artifact for task 16f1d360-5117-40bf-98e6-0821058a61b8
    1555dfc0
    graphlemon authored
    2026-08-03 00:10:26 +0800  
    Browse Code »
  • graphlemon: sdd artifact for task 16f1d360-5117-40bf-98e6-0821058a61b8
    f0272b71
    graphlemon authored
    2026-08-03 00:10:26 +0800  
    Browse Code »
  • graphlemon: prd artifact for task 16f1d360-5117-40bf-98e6-0821058a61b8
    6ab6700b
    graphlemon authored
    2026-08-03 00:10:25 +0800  
    Browse Code »
  • graphlemon: brd artifact for task 16f1d360-5117-40bf-98e6-0821058a61b8
    2d3baada
    graphlemon authored
    2026-08-03 00:10:25 +0800  
    Browse Code »
  • U-013 fix: auto-commit uncommitted worktree changes before merge ...
    8af3d4e4
    A real self-hosting run (U-042, first real exercise of needs_worktree=True
    since U-035 forces it unconditionally for self-target) exposed a real bug
    RealGitWorktreeIsolationTest never caught: its own run_fn always committed
    its edits, but a real Coder isn't instructed anywhere to git commit its own
    changes. The Coder genuinely edited src/org_loop_route.py and verified it
    in its own test_report -- but never committed, so merge_worktree()'s `git
    merge` was a true no-op ("Already up to date"), and remove_worktree() then
    silently discarded the dirty worktree along with the real work. code_diff
    came out empty; the change never reached the branch at all.
    
    Adds ensure_worktree_committed(): checks `git status --porcelain` in the
    worktree before merging and auto-commits any dirty state found. A no-op
    when the worktree is legitimately clean (e.g. a pure investigation task).
    Same "判断用 Agent,机制用代码" principle already used elsewhere in this
    codebase -- don't rely on persona prompt-engineering for a mechanical
    correctness guarantee that the system itself should hold.
    
    Two new regression tests: one reproducing the exact "edited but never
    committed" scenario, one confirming a legitimately-clean worktree still
    merges fine. 554 tests green (435 src + 119 supervisor).
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    bboonnee authored
    2026-08-03 00:02:31 +0800  
    Browse Code »
  • Bootstrap graphlemon's own .claude/agents/ and gitignore workflow scratch files ...
    afb478d5
    U-004 migrated the Hermes personas into agents/{planner,coder,validator}/SOUL.md
    (the canonical source) but nothing had ever actually deployed the compiled
    .claude/agents/*.md into graphlemon's own repo -- every real test throughout
    PH1-PH4 ran against throwaway target-project clones that got this step via
    project_scaffold, never against graphlemon self-targeting itself. The real
    U-042 self-hosting attempt surfaced this immediately: `claude --agent planner`
    failed outright with "--agent 'planner' not found". Deployed via
    agent_profile.deploy_agent_definitions() and committed -- self-target worktree
    isolation only sees committed content, so this has to be tracked, not just
    written to disk, for any future self-target task to find its own persona.
    
    Also commits the real agent-memory files a genuine self-target run generated
    (architecture doc §8 decision 1: memory must be git-traceable) and gitignores
    .claude/workflows/ (one-shot, uniquely-named dynamic-workflow scripts written
    per Work Node call -- pure runtime clutter, never reused, not source content).
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    bboonnee authored
    2026-08-03 00:02:17 +0800  
    Browse Code »

02 Aug, 2026
3 commits
  • graphlemon: test_report artifact for task 8c580bee-de0c-4109-984b-b1464333e940
    54f0d1eb
    graphlemon authored
    2026-08-02 23:55:13 +0800  
    Browse Code »
  • graphlemon: code_diff artifact for task 8c580bee-de0c-4109-984b-b1464333e940
    d582890b
    graphlemon authored
    2026-08-02 23:55:13 +0800  
    Browse Code »
  • graphlemon: benchmark artifact for task 8c580bee-de0c-4109-984b-b1464333e940
    32354822
    graphlemon authored
    2026-08-02 23:53:32 +0800  
    Browse Code »