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
40 commits
  • graphlemon: auto-commit uncommitted changes for 06c1263c-711b-4cb4-8f4b-5fd29c24… ...
    b0799411
    …2750-main-checkout-drift
    graphlemon authored
    2026-08-03 13:32:35 +0800  
    Browse Code »
  • U-038 fix: http_health polls for startup readiness instead of one-shot ...
    d53156cd
    Attempts 7 and 11 both failed at exactly the same spot: process_alive read
    'ok' within milliseconds of Popen, then http_health hit ECONNREFUSED in the
    same second and gave up. Real cause: process_alive only confirms the
    process EXISTS, not that backend_server.py has finished importing modules
    and actually bound its listen socket -- a real, non-zero startup gap. The
    old check_http_health did one urlopen(timeout=X) call; that timeout only
    bounds how long to wait for a response once connected, not how long to
    wait for the port to start accepting connections at all -- ECONNREFUSED
    fires essentially instantly when nothing's listening yet, regardless of
    timeout.
    
    This touches an explicit 03-C design statement ("不重试——重试属于给坏版本
    第二次机会"), so confirmed with the user before changing it rather than
    just reinterpreting the policy unilaterally. Resolution: tolerating normal
    startup latency within ONE health-check pass isn't "retrying a failed
    check" -- check_process_alive already does exactly this (polls up to 30s
    for the pid to exist). http_health now does the same, polling within its
    own timeout for connection-refused-class errors specifically. A genuine
    non-2xx HTTP response is still a definitive answer from a live server and
    still fails immediately, no polling -- that boundary is unchanged.
    
    Two new real regression tests: a real server that starts listening 0.3s
    late is correctly waited for and passes; a real 500 response still fails
    immediately without being mistaken for "not up yet".
    
    564 tests green (441 src + 123 supervisor).
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    bboonnee authored
    2026-08-03 13:28:29 +0800  
    Browse Code »
  • graphlemon: real agent-memory updates from self-hosting run 11 (validator)
    2ffa71fa
    bboonnee authored
    2026-08-03 13:27:29 +0800  
    Browse Code »
  • Revert "graphlemon: test_report artifact for task 8ea58a57-b53b-4649-a081-de29ac60347d" ...
    e3cce77c
    This reverts commit b14c41371f803541c1f01debb0658ea13e816e0d.
    bboonnee authored
    2026-08-03 13:16:56 +0800  
    Browse Code »
  • graphlemon: test_report artifact for task 8ea58a57-b53b-4649-a081-de29ac60347d
    b14c4137
    graphlemon authored
    2026-08-03 13:12:09 +0800  
    Browse Code »
  • graphlemon: code_diff artifact for task 8ea58a57-b53b-4649-a081-de29ac60347d
    a22220a2
    graphlemon authored
    2026-08-03 13:12:09 +0800  
    Browse Code »
  • graphlemon: merge 4377f28d-6610-4891-a1de-58745b01f55d
    69567be4
    graphlemon authored
    2026-08-03 13:12:09 +0800  
    Browse Code »
  • graphlemon: auto-commit uncommitted changes for 4377f28d-6610-4891-a1de-58745b01f55d
    761681ae
    graphlemon authored
    2026-08-03 13:12:09 +0800  
    Browse Code »
  • graphlemon: benchmark artifact for task 8ea58a57-b53b-4649-a081-de29ac60347d
    93b76bdc
    graphlemon authored
    2026-08-03 13:07:27 +0800  
    Browse Code »
  • graphlemon: sdd artifact for task 8ea58a57-b53b-4649-a081-de29ac60347d
    e7dd5a35
    graphlemon authored
    2026-08-03 13:07:27 +0800  
    Browse Code »
  • graphlemon: prd artifact for task 8ea58a57-b53b-4649-a081-de29ac60347d
    00fb28e5
    graphlemon authored
    2026-08-03 13:07:27 +0800  
    Browse Code »
  • graphlemon: brd artifact for task 8ea58a57-b53b-4649-a081-de29ac60347d
    5faa2197
    graphlemon authored
    2026-08-03 13:07:27 +0800  
    Browse Code »
  • graphlemon: auto-commit uncommitted changes for e30e6617-203e-4941-b85f-131e4ae9… ...
    39213ab2
    …be04-main-checkout-drift
    graphlemon authored
    2026-08-03 13:01:26 +0800  
    Browse Code »
  • U-013 follow-up: drop the exclude pathspec, it was itself a hard error ...
    ebfcc437
    Attempt 10 crashed immediately in the fix committed last: git add -A --
    . ':!.graphlemon-worktrees' throws "paths are ignored by one of your
    .gitignore files" (exit 1, not just advisory text -- confirmed even with
    advice.addIgnoredFile=false suppressed) the moment that path is ALSO
    gitignored, which it now always is. Reproduced locally.
    
    Plain `git add -A` (no explicit pathspec) already skips gitignored paths
    correctly on its own -- the explicit exclude was redundant now that
    .gitignore covers it, and actively conflicting. Simplified
    ensure_worktree_committed() back down. Also added the same .gitignore
    entry to test_work_node_run.py's _init_git_repo() fixture so real-worktree
    tests match production config instead of coincidentally not hitting this.
    
    562 tests green (441 src + 121 supervisor).
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    bboonnee authored
    2026-08-03 12:59:06 +0800  
    Browse Code »
  • U-013 fix: auto-commit main-checkout drift too, not just the worktree's own ...
    b6423cff
    Attempts 8 and 9 both hit "local changes would be overwritten by merge"
    again, despite the earlier _check_prd_consistency worktree-isolation fix.
    Root cause is deeper: git worktrees deliberately SHARE project identity
    with their main checkout (same .git, just another checkout) -- a real
    `claude -p` call's memory:project write doesn't reliably respect the cwd it
    was invoked with, and can land directly on the main checkout regardless of
    which specific call triggered it. Worktree-wrapping one call (as done for
    _check_prd_consistency) only moves around which call happens to trigger
    this; it doesn't fix the underlying issue.
    
    ensure_worktree_committed() now also runs against repo_path itself (not
    just the worktree) right before every merge_worktree() call, in both
    work_node_run.run_work_node() and e2e_pipeline._check_prd_consistency().
    Same already-tested mechanism, now applied generically regardless of which
    real call caused the drift or why.
    
    Fixing this surfaced a second real bug in the fix itself: running `git add
    -A` against repo_path while a node's own .graphlemon-worktrees/<id>/
    checkout is still present on disk picks it up as a gitlink-like entry,
    which then shows as "deleted" the instant remove_worktree() runs right
    after. Fixed by excluding .graphlemon-worktrees/ from both the dirty-check
    and the add via pathspec (not relying on the caller repo's own .gitignore),
    plus added it to graphlemon's own .gitignore for correctness generally.
    
    New regression test: test_drift_on_main_checkout_is_auto_committed_before_merge
    reproduces a run_fn writing directly to repo_path instead of its worktree,
    and confirms a second node's own merge isn't affected by it.
    
    562 tests green (441 src + 121 supervisor).
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    bboonnee authored
    2026-08-03 12:50:34 +0800  
    Browse Code »
  • graphlemon: merge e37929c2-d191-4e22-b669-3d4f7f87f150 (retried after cleanup)
    8d980dec
    bboonnee authored
    2026-08-03 12:49:25 +0800  
    Browse Code »
  • graphlemon: real agent-memory updates from self-hosting run 8
    17a466ba
    bboonnee authored
    2026-08-03 12:48:01 +0800  
    Browse Code »
  • graphlemon: auto-commit uncommitted worktree changes for e37929c2-d191-4e22-b669-3d4f7f87f150
    1f58c5bc
    graphlemon authored
    2026-08-03 12:42:07 +0800  
    Browse Code »
  • 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 »