chore(gitea-sync): record first status-driven Gitea sync

- buglog: gitea_issue / gitea_synced_status for the 20 bugs created and the
  30 already-synced entries (#25/#35 reopened as partial)
- .kiro/specs/*/spec.json: "gitea" milestone/issue mapping for all 66 specs
  (65 milestones + 195 issues created, 158 closed at creation)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Rongsong Shen 2026-09-24 10:22:05 +00:00
parent e915f8def4
commit b0f2aea466
Signed by untrusted user: rshen
GPG key ID: 80533536B0EB651C
66 changed files with 645 additions and 56 deletions

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 2,
"issues": {
"requirements_design": 49,
"implementation": 50,
"validation": 51
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 3,
"issues": {
"requirements_design": 54,
"implementation": 55,
"validation": 57
}
}
}

View file

@ -20,5 +20,13 @@
},
"ready_for_implementation": false,
"sibling_specs": ["scheduler-dispatch-commit", "job-array-single-wal-record", "worker-rejoin-resync"],
"note": "Parked/tracked, not actively being pursued. Originally scoped narrowly as job-dispatch-commit-batching; broadened (2026-08-31, same session) to a general time-windowed batch-commit facility for ANY WAL-worthy fact needing a durability-gated external side effect, not just job dispatch -- job dispatch remains the motivating first use case. User assessed this as a substantial cross-cutting change (core commit pipeline, latency/throughput tradeoffs, hook/notification timing, soak-level correctness verification), not a small project. Revisit in a dedicated future session."
"note": "Parked/tracked, not actively being pursued. Originally scoped narrowly as job-dispatch-commit-batching; broadened (2026-08-31, same session) to a general time-windowed batch-commit facility for ANY WAL-worthy fact needing a durability-gated external side effect, not just job dispatch -- job dispatch remains the motivating first use case. User assessed this as a substantial cross-cutting change (core commit pipeline, latency/throughput tradeoffs, hook/notification timing, soak-level correctness verification), not a small project. Revisit in a dedicated future session.",
"gitea": {
"milestone_id": 4,
"issues": {
"requirements_design": 60,
"implementation": 62,
"validation": 63
}
}
}

View file

@ -34,5 +34,13 @@
"reopened_at": "2026-08-15T13:10:00Z",
"reopen_reason": "component-failover-adoption's own /kiro-validate-impl run found Req 2 AC4 unmet in the common case (fast controller election, apiserver idle) -- a defect inside this spec's own ApiserverBackendBridge/task 4.4 boundary, not legitimately out of scope. Remediated as tasks.md Phase 6 (6.1/6.2) plus two non-blocking build-tooling fixes (bug-1558, bug-1559) found during the same validation pass."
}
},
"gitea": {
"milestone_id": 5,
"issues": {
"requirements_design": 66,
"implementation": 68,
"validation": 69
}
}
}

View file

@ -20,5 +20,13 @@
}
},
"ready_for_implementation": false,
"blocked_on": []
"blocked_on": [],
"gitea": {
"milestone_id": 6,
"issues": {
"requirements_design": 72,
"implementation": 73,
"validation": 76
}
}
}

View file

@ -27,5 +27,13 @@
"known_limitations": [
"bug-1471 / bug-1472-remainder: a host admin-closed before the final checkpoint can produce host-frame byte divergence (WAL_WORKER_CTRL apply path, worker.c/persist.c) -- explicitly out of this spec's own materialization boundary per its research.md/tasks.md notes, never converted into a task here. No existing spec currently owns fixing it; flagged for a new task/spec."
]
},
"gitea": {
"milestone_id": 7,
"issues": {
"requirements_design": 79,
"implementation": 80,
"validation": 82
}
}
}

View file

@ -18,5 +18,13 @@
"approved": false
}
},
"ready_for_implementation": false
"ready_for_implementation": false,
"gitea": {
"milestone_id": 8,
"issues": {
"requirements_design": 85,
"implementation": 86,
"validation": 87
}
}
}

View file

@ -61,5 +61,13 @@
"note": "First post-implementation validation run -- all tasks (1.1-6.4) were already [x] with no prior validate_impl record, and this delta block's impl_status field had gone stale (still said 6.4 BLOCKED despite tasks.md recording it VERIFIED since 2026-07-02). Full suite 9/9 green (one transient ASAN failure during the run was traced to a concurrent second session competing for the same build directory, not a regression -- reproduced clean 3x in isolation), 36/36 requirement acceptance criteria mapped, cross-task wire contract verified field-for-field end to end (schema -> typemap -> handler -> dispatch -> libxce client -> CLI), two live smoke runs (a 3-round sequential HA soak plus a targeted live 3-node deploy exercising Req 10/11 directly) both PASS."
}
}
},
"gitea": {
"milestone_id": 9,
"issues": {
"requirements_design": 90,
"implementation": 91,
"validation": 92
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 10,
"issues": {
"requirements_design": 93,
"implementation": 94,
"validation": 95
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 11,
"issues": {
"requirements_design": 96,
"implementation": 97,
"validation": 98
}
}
}

View file

@ -22,5 +22,13 @@
}
},
"ready_for_implementation": false,
"blocked_on": []
"blocked_on": [],
"gitea": {
"milestone_id": 12,
"issues": {
"requirements_design": 99,
"implementation": 100,
"validation": 101
}
}
}

View file

@ -20,5 +20,13 @@
}
},
"ready_for_implementation": true,
"note": "All 16 tasks implemented 2026-06-12/13 via /kiro-impl autonomous mode (each independently reviewed; task 5.2 required one remediation round for two CRITICAL findings). kiro-impl validate gate (task 7.2): GO \u2014 full controller suite 508 PASS / 0 FAIL / 0 sanitizer aborts under ASAN, independently re-censused. Discovered+fixed bug-447 (key_find found-rc leak \u2014 queue/host control silently unpersisted) and bug-396 (worker fact loss on quorum-loss gate rejection). Logged not-fixed: bug-448 (job_ctrl ref leak), bug-451 (RUSAGE va_list OOB read). Barrier-before-state-removal precondition for ha-single-leader-role satisfied. Next: ha-single-leader-role (deps satisfied)."
}
"note": "All 16 tasks implemented 2026-06-12/13 via /kiro-impl autonomous mode (each independently reviewed; task 5.2 required one remediation round for two CRITICAL findings). kiro-impl validate gate (task 7.2): GO \u2014 full controller suite 508 PASS / 0 FAIL / 0 sanitizer aborts under ASAN, independently re-censused. Discovered+fixed bug-447 (key_find found-rc leak \u2014 queue/host control silently unpersisted) and bug-396 (worker fact loss on quorum-loss gate rejection). Logged not-fixed: bug-448 (job_ctrl ref leak), bug-451 (RUSAGE va_list OOB read). Barrier-before-state-removal precondition for ha-single-leader-role satisfied. Next: ha-single-leader-role (deps satisfied).",
"gitea": {
"milestone_id": 13,
"issues": {
"requirements_design": 102,
"implementation": 103,
"validation": 104
}
}
}

View file

@ -32,5 +32,13 @@
"bug-1446 (this session, test-harness only): src/tools/test-commit-durability.sh's --deterministic mode produces a false RED in any environment whose `date` lacks GNU date's %N support (e.g. BusyBox date, as in this sandbox) because its submit-to-ack window arithmetic silently breaks on the unexpanded literal \"%N\". The soak mode used for this session's live re-validation is unaffected and remains the authoritative live check in such environments. A future fix should make the script detect/require GNU date or use an alternative sub-second time source, and fail loud on an incompatible date rather than emitting a false verdict.",
"The group-commit batching mechanism's interaction with the newer job-array-single-wal-record feature (multi-entry array WAL records) was confirmed consistent at the shared committed_lsn/durable_lsn-invariant level (code read) but was not independently re-exercised by a dedicated array-specific durability soak in this pass; job-array-single-wal-record carries its own validate_impl track for that."
]
},
"gitea": {
"milestone_id": 14,
"issues": {
"requirements_design": 105,
"implementation": 106,
"validation": 107
}
}
}

View file

@ -20,5 +20,13 @@
}
},
"ready_for_implementation": true,
"note": "All 12 tasks implemented 2026-06-11/12 via /kiro-impl autonomous mode (each task independently reviewed). kiro-validate-impl: GO. Suite: 46 groups / 467 tests / 0 failures. Deferred follow-ups recorded in tasks.md Implementation Notes (6.1): LSN-0 interim, 6 pre-existing leak groups, persist.c:1151 stale comment, n_peers==0 legacy-path advisory. Next sub-spec: ha-commit-barrier-rollout."
}
"note": "All 12 tasks implemented 2026-06-11/12 via /kiro-impl autonomous mode (each task independently reviewed). kiro-validate-impl: GO. Suite: 46 groups / 467 tests / 0 failures. Deferred follow-ups recorded in tasks.md Implementation Notes (6.1): LSN-0 interim, 6 pre-existing leak groups, persist.c:1151 stale comment, n_peers==0 legacy-path advisory. Next sub-spec: ha-commit-barrier-rollout.",
"gitea": {
"milestone_id": 15,
"issues": {
"requirements_design": 108,
"implementation": 109,
"validation": 110
}
}
}

View file

@ -20,5 +20,13 @@
"approved": true
}
},
"note": "CLOSED 2026-08-16. All 3 known deviations from the 2026-06-09 gap analysis resolved or deliberately superseded, confirmed by this spec's own 2026-06-18 re-audit (research.md) plus a fresh cross-check: (1) redirect fields never populated -- closed by libxce-failover's fill_redirect_reply() (join.c:28), validate-impl GO 2026-07-18, explicitly closing this spec's Req 7 gap. Caveat: OP_upgradeConfig replies still lack redirect wiring, a narrower still-open gap found by admin-config-tool task 6.3 (2026-08-16) -- NOT a reopening of this deviation, since Req 7 only ever covered libxce's generic retry path, never OP_upgradeConfig specifically; track it under whichever spec next touches xceadmin/config-push. (2) WAL majority-commit covers WAL_JOB_SUBMIT only -- superseded by the deliberate wal_classify() WAIT/RETAIN scheme (ha-commit-barrier-rollout/ha-consistency-invariants, complete 2026-07-13); not a coverage gap, an intentional latency-driven design, not ha-repl-hardening as originally noted. (3) commit timeout silently degrades -- resolved as bug-661 via ha-commit-durability (17/17 tasks, validate-impl GO, re-verified live 2026-07-18: 8/8 rolling+cold-restart soak rounds, zero job loss)."
"note": "CLOSED 2026-08-16. All 3 known deviations from the 2026-06-09 gap analysis resolved or deliberately superseded, confirmed by this spec's own 2026-06-18 re-audit (research.md) plus a fresh cross-check: (1) redirect fields never populated -- closed by libxce-failover's fill_redirect_reply() (join.c:28), validate-impl GO 2026-07-18, explicitly closing this spec's Req 7 gap. Caveat: OP_upgradeConfig replies still lack redirect wiring, a narrower still-open gap found by admin-config-tool task 6.3 (2026-08-16) -- NOT a reopening of this deviation, since Req 7 only ever covered libxce's generic retry path, never OP_upgradeConfig specifically; track it under whichever spec next touches xceadmin/config-push. (2) WAL majority-commit covers WAL_JOB_SUBMIT only -- superseded by the deliberate wal_classify() WAIT/RETAIN scheme (ha-commit-barrier-rollout/ha-consistency-invariants, complete 2026-07-13); not a coverage gap, an intentional latency-driven design, not ha-repl-hardening as originally noted. (3) commit timeout silently degrades -- resolved as bug-661 via ha-commit-durability (17/17 tasks, validate-impl GO, re-verified live 2026-07-18: 8/8 rolling+cold-restart soak rounds, zero job loss).",
"gitea": {
"milestone_id": 16,
"issues": {
"requirements_design": 111,
"implementation": 112,
"validation": 113
}
}
}

View file

@ -20,5 +20,13 @@
},
"ready_for_implementation": false,
"note": "UMBRELLA CONTRACT spec (decomposed 2026-06-11): requirements.md/design.md/research.md are the authoritative contract for four implementation sub-specs — ha-commit-engine, ha-commit-barrier-rollout, ha-single-leader-role, ha-convergence-recovery (dependency order in steering/roadmap.md). Do NOT generate tasks for this spec; implement via the sub-specs. Design approved as contract; sub-spec designs inherit and slice it.",
"implementation_status": "implemented — all 4 sub-specs complete (ha-commit-engine 18/18, ha-commit-barrier-rollout 23/23, ha-single-leader-role 17/17, ha-convergence-recovery 19/19; phases reconciled 2026-07-03, all were mislabeled tasks-generated). Requirements 1-7 satisfied. Criterion 2.9 (Facts-Apply invariant, added 2026-06-25) is now SATISFIED — closed by raft-apply-decoupling task 4 (\"Fact apply-after-commit split\", 4.1/4.2) plus D1 (quorum-loss fact policy, resolved+implemented block-but-durable). WAL_MODE_RETAIN facts append-only on receipt; state mutation + reactions moved to the post-commit apply_committed_entry() seam (persist.c:2721) via apply_job_update_transition() for all 9 job-state fact types; the old apply-on-receipt path (apply_wal_entry()) has zero production call sites. Verified by task 6.3 (command/fact apply-notify timing), 7.2 (live-cluster kill-primary-mid-fact-stream soak), 7.4 (throughput regression). design.approved corrected true->matches the note's 'Design approved as contract' (was inconsistently false)."
"implementation_status": "implemented — all 4 sub-specs complete (ha-commit-engine 18/18, ha-commit-barrier-rollout 23/23, ha-single-leader-role 17/17, ha-convergence-recovery 19/19; phases reconciled 2026-07-03, all were mislabeled tasks-generated). Requirements 1-7 satisfied. Criterion 2.9 (Facts-Apply invariant, added 2026-06-25) is now SATISFIED — closed by raft-apply-decoupling task 4 (\"Fact apply-after-commit split\", 4.1/4.2) plus D1 (quorum-loss fact policy, resolved+implemented block-but-durable). WAL_MODE_RETAIN facts append-only on receipt; state mutation + reactions moved to the post-commit apply_committed_entry() seam (persist.c:2721) via apply_job_update_transition() for all 9 job-state fact types; the old apply-on-receipt path (apply_wal_entry()) has zero production call sites. Verified by task 6.3 (command/fact apply-notify timing), 7.2 (live-cluster kill-primary-mid-fact-stream soak), 7.4 (throughput regression). design.approved corrected true->matches the note's 'Design approved as contract' (was inconsistently false).",
"gitea": {
"milestone_id": 17,
"issues": {
"requirements_design": 114,
"implementation": 115,
"validation": 116
}
}
}

View file

@ -20,5 +20,13 @@
}
},
"ready_for_implementation": true,
"implementation_status": "implemented — 19/19 tasks complete, 8-round live-cluster E2E validated (task 8). Phase reconciled 2026-07-03 (was mislabeled tasks-generated)."
"implementation_status": "implemented — 19/19 tasks complete, 8-round live-cluster E2E validated (task 8). Phase reconciled 2026-07-03 (was mislabeled tasks-generated).",
"gitea": {
"milestone_id": 18,
"issues": {
"requirements_design": 117,
"implementation": 118,
"validation": 119
}
}
}

View file

@ -28,5 +28,13 @@
"bug-1447 (open, NOT-FIXED, owned by raft-drive-async / src/lib/netio.c, not this spec): a timing-dependent ASAN SEGV in handle_ssl_handshake/io_worker. Did not reproduce in either soak run in this pass (failed or passing). No action item for this spec.",
"Requirement 4.3 names both sequential AND chaotic /xce-test-ha regression modes. Per the explicit validation-scope instruction for this pass, only the sequential 10-round soak was (re-)run; chaotic mode was not independently re-run for this spec. This mirrors the evidence scope of the sibling ha-prevote validation (also sequential-only) and is a low-risk gap given this is a pure memory-lifetime fix with zero semantic surface on election/failover outcomes (chaotic mode's specific hazard class -- double-fault commit-prefix divergence timing -- is orthogonal to carrier refcounting)."
]
},
"gitea": {
"milestone_id": 19,
"issues": {
"requirements_design": 120,
"implementation": 121,
"validation": 122
}
}
}

View file

@ -29,5 +29,13 @@
"tasks.md Implementation Note (5.2): restore_queue_state's -ENOENT ('queue not yet built from config') aborts the ENTIRE checkpoint restore, including already-successfully-restored jobs earlier in the same file. This is design-compliant (Requirement 2.3 is unconditional: any restore failure leaves position unchanged) but is a real residual availability risk -- a benign config-lag on the destination member could make catch-up fail outright rather than skip-and-continue. Flagged as a WATCH-ITEM in the spec's own notes if a future catch-up round is observed to stall.",
"Test-only, non-production: a pre-existing ASan leak in the test fixture itself (snapent_make -> makeInstance/makeJob/makeQueue/xkvmgr_add, ~18KB/113 allocations across the whole test file), masked by this suite's standing ASAN_OPTIONS=detect_leaks=0 convention; and a minor verbatim-duplicated 'skip past job section' loop between snapent_read_checkpoint_jobs and snapent_read_checkpoint_queues. Neither blocks any requirement; both are called out in tasks.md's own Implementation Notes as candidates for a future fixture cleanup pass if the test file keeps growing."
]
},
"gitea": {
"milestone_id": 20,
"issues": {
"requirements_design": 123,
"implementation": 124,
"validation": 125
}
}
}

View file

@ -34,5 +34,13 @@
"File Structure Plan drift (non-blocking, doc-only): design.md's New Files section names only test_ha_heartbeat_committed.c; the vote-floor safety integration test landed as a second registered file, test_ha_vote_floor_heartbeat.c. Coverage is equivalent/additive; a future doc pass could update design.md to match.",
"design.md's File Structure Plan lists the ha.h path as src/controller/include/ha.h; the actual file is src/controller/ha.h. Cosmetic path drift already flagged in tasks.md's own Implementation Notes, not a functional gap."
]
},
"gitea": {
"milestone_id": 21,
"issues": {
"requirements_design": 126,
"implementation": 127,
"validation": 128
}
}
}

View file

@ -19,5 +19,13 @@
}
},
"ready_for_implementation": true,
"note": "Req 1.3 fixed 2026-06-10: WAL/snapshot/config handlers update last_activity. Req 3.3/3.4 are benign constraints. Controller suite green."
"note": "Req 1.3 fixed 2026-06-10: WAL/snapshot/config handlers update last_activity. Req 3.3/3.4 are benign constraints. Controller suite green.",
"gitea": {
"milestone_id": 22,
"issues": {
"requirements_design": 129,
"implementation": 130,
"validation": 131
}
}
}

View file

@ -19,5 +19,13 @@
}
},
"ready_for_implementation": true,
"note": "Test-fixture ASAN leaks fixed 2026-06-10 (free(ep0)/free(ep1) in two tests). Controller suite green under ASAN. Req 5.5 closed."
"note": "Test-fixture ASAN leaks fixed 2026-06-10 (free(ep0)/free(ep1) in two tests). Controller suite green under ASAN. Req 5.5 closed.",
"gitea": {
"milestone_id": 23,
"issues": {
"requirements_design": 132,
"implementation": 133,
"validation": 134
}
}
}

View file

@ -34,5 +34,13 @@
"design.md's original Service Interface signature for raft_on_pre_vote_request (2 params: from_idx, cand_term) is now stale documentation -- the shipped function additionally takes cand_last_log_term/cand_last_log_index and runs the (lastLogTerm,lastLogIndex) freshness gate inside the raft library itself (the later raft-commit-safety spec's G6 vote-freshness closure, layered onto this spec's foundation). Functionally strictly stronger than the original design, not a regression; a future doc pass could update design.md's Service Interface block to match the shipped signature.",
"research.md's own file already documents one non-blocking, functionally-equivalent routing drift: PreVote replies are routed via peer_ctrl_msg_handler's role+pre_vote_in_progress state check rather than a dedicated cluster.c OPCode_preVoteReply switch case as task 5.1's text literally phrased it. Not re-verified independently in this pass beyond confirming the request-side opcode (preVoteReply @39) is still emitted and the reply still reaches the tally live (confirmed via the soak's 13 live PreVote round WON events)."
]
},
"gitea": {
"milestone_id": 24,
"issues": {
"requirements_design": 135,
"implementation": 136,
"validation": 137
}
}
}

View file

@ -19,5 +19,13 @@
}
},
"ready_for_implementation": true,
"note": "Payload data plane tasks 7.1-7.7 complete 2026-06-10. Formula reconciled to n_peers/2. All unit tests green (lib wire round-trips + controller convergence). Snapshot E2E assertion gated on WAL accumulation infrastructure. Spec closed."
"note": "Payload data plane tasks 7.1-7.7 complete 2026-06-10. Formula reconciled to n_peers/2. All unit tests green (lib wire round-trips + controller convergence). Snapshot E2E assertion gated on WAL accumulation infrastructure. Spec closed.",
"gitea": {
"milestone_id": 25,
"issues": {
"requirements_design": 138,
"implementation": 139,
"validation": 140
}
}
}

View file

@ -20,5 +20,13 @@
}
},
"ready_for_implementation": true,
"implementation_status": "implemented — 17/17 tasks complete. Phase reconciled 2026-07-03 (was mislabeled tasks-generated)."
"implementation_status": "implemented — 17/17 tasks complete. Phase reconciled 2026-07-03 (was mislabeled tasks-generated).",
"gitea": {
"milestone_id": 26,
"issues": {
"requirements_design": 141,
"implementation": 142,
"validation": 143
}
}
}

View file

@ -30,5 +30,13 @@
"design.md's AppendEntries send-side architecture (on_send_append_entries/raft_send_append_entries, task 2.3) is dormant in production per a later cross-spec comment (raft-ha-core-safety task 6.2, ha.c:2530-2536) -- the live send path is the pre-existing repl_broadcast, patched by task 3.4 to carry entry.term/prev_log_term. The receive side IS live and correctly processes these entries -- live-verified safe, just not what the design.md diagram depicts. Documentation-drift note only. RESOLVED 2026-07-29: raft-adapter-conformance has now formally documented and regression-guarded this exact drift -- see src/controller/CLAUDE.md's TLA+ Action-to-Code Mapping table (the dormant nextIndex-driven sender row) and that spec's design.md 'Decision: dormant AppendEntries sender resolution' section for the authoritative disposition; a future reader should land there instead of re-discovering this drift.",
"ha.c:1844 has a stale 'TODO(ha-term-safety task 2.x): REPLACE these stubs' header comment whose own body lines each say '-- IMPLEMENTED'; a companion stale doc-comment sits in ha_convergence.c ~357-360 describing retired behavior. Cosmetic only, self-flagged in tasks.md's own 5.5 cleanup list, never executed."
]
},
"gitea": {
"milestone_id": 27,
"issues": {
"requirements_design": 144,
"implementation": 145,
"validation": 146
}
}
}
}

View file

@ -28,5 +28,13 @@
"File Structure Plan drift (non-blocking): design.md specified a new test_ha_wal_repl.c; actual tests landed in test_repl_unit.c (+ cross-spec integration pins in test_p2_integration.c/test_commit_engine.c/test_convergence_verification.c). Coverage is equivalent; a future doc pass could update design.md's File Structure Plan to match, but this is cosmetic.",
"Req 5.2's DEBUG3-level broadcast log is implemented as TRACE level in the current logging framework's naming, not a literal \"DEBUG3\" call site -- functionally satisfies the intent (per-send LSN/opcode visibility at a low log level) but is a naming mismatch against the requirement's literal wording."
]
},
"gitea": {
"milestone_id": 28,
"issues": {
"requirements_design": 147,
"implementation": 148,
"validation": 149
}
}
}

View file

@ -34,5 +34,13 @@
"reopen_reason": "User directed all of this feature's own open residual gaps be fixed (2026-07-16): bug-1443 (bulk-insert partial-visibility), task 4.2's boot-replay fence gap, and task 5.3b's bounded leak. Added as Phase 7 (tasks 7.1-7.3) in tasks.md. Unrelated pre-existing bugs 1437/1438 explicitly excluded from this reopening per user's scope decision.",
"note": "bug-1443 was closed by task 7.1 (commit dcf9f39); superseded by this validation's fresh GO."
}
},
"gitea": {
"milestone_id": 29,
"issues": {
"requirements_design": 150,
"implementation": 151,
"validation": 152
}
}
}

View file

@ -18,5 +18,13 @@
"approved": false
}
},
"ready_for_implementation": false
"ready_for_implementation": false,
"gitea": {
"milestone_id": 30,
"issues": {
"requirements_design": 153,
"implementation": 154,
"validation": 155
}
}
}

View file

@ -28,5 +28,13 @@
"Per-daemon adoption (worker, scheduler, apiserver master-list config and liveness-safe bounded blocking) is explicitly out of scope by design -- owned by the follow-on specs component-failover-adoption and worker-rejoin-resync, both of which depend on this spec.",
"Fire-and-forget notifications (XCECLI_FF_CALL: notify/heartbeat/nop) have no reply and get only a single-shot best-effort reconnect attempt, not the full retry/backoff loop -- a fact genuinely lost in a failover window is accepted-by-design here; redelivery is owned by worker-rejoin-resync."
]
},
"gitea": {
"milestone_id": 31,
"issues": {
"requirements_design": 156,
"implementation": 157,
"validation": 158
}
}
}

View file

@ -30,5 +30,13 @@
"bug-1474 (angle-a only; the repl.c defense-in-depth slot-reuse hardening is already fixed elsewhere): a spurious duplicate/late-joiner reconnect during WAL trim, root-caused to a vote_ep_ctx_t.peer_idx convention mismatch in ha.c's heartbeat-reconnect-sweep (~ha.c:9219-9254). Never converted into a task here despite being tracked in related_bugs -- this spec's tasks 1-7 are entirely about config-push reply integrity and vote/pre-vote failure routing, a different part of ha.c. Natural fit for a new appended task given its scope match.",
"bug-1471 / bug-1472-remainder: listed in related_bugs but never converted into a task -- root mechanism (worker.c/persist.c's WAL_WORKER_CTRL apply path) is outside this spec's ha.c/repl.c-adapter boundary; see config-upgrade-snapshot's own known_limitations for the primary tracking."
]
},
"gitea": {
"milestone_id": 32,
"issues": {
"requirements_design": 159,
"implementation": 160,
"validation": 161
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 33,
"issues": {
"requirements_design": 162,
"implementation": 163,
"validation": 164
}
}
}

View file

@ -20,5 +20,13 @@
},
"ready_for_implementation": true,
"implementation_status": "implemented — commit-safety + vote-freshness half landed + validated (18/18 tasks, raft_sim GO per memory project_raft_commit_safety_done). Phase reconciled 2026-06-25 (was mislabeled tasks-generated).",
"note": "Auto-approved (-y mode). Adds the commit-safety + election-freshness half of raft.tla on top of raft-log-replication's library log. raft_advance_commit (AdvanceCommitIndex, raft.tla:259) advances commit_index to Max(agreeIndexes from match_index[]) ONLY when on_get_entry_term(Max)==currentTerm (Figure-8 current-term rule, G4); new callback on_commit_advanced(ctx, commit_index) TRIGGERS the existing synchronous commit barrier / persist-before-ACK durability (does NOT replace it). Vote/PreVote freshness upgraded from LSN-only to (lastLogTerm,lastLogIndex) lexicographic compare (HandleRequestVoteRequest logOk, raft.tla:285, G6) carried via last_log_term in raft_on_vote_request + on_vote_eligible/vote-request payload. Simulator asserts Figure-8 refusal + Leader Completeness. Boundary: owns commit-index advance + vote freshness in src/lib/raft ONLY; NOT the log model/AppendEntries (raft-log-replication), the barrier/durability mechanism (controller), config markers/snapshot (ha-term-safety), or the conformance harness (raft-sim-conformance). Depends: raft-log-replication (HARD). Closes bug-851 G4/G6."
"note": "Auto-approved (-y mode). Adds the commit-safety + election-freshness half of raft.tla on top of raft-log-replication's library log. raft_advance_commit (AdvanceCommitIndex, raft.tla:259) advances commit_index to Max(agreeIndexes from match_index[]) ONLY when on_get_entry_term(Max)==currentTerm (Figure-8 current-term rule, G4); new callback on_commit_advanced(ctx, commit_index) TRIGGERS the existing synchronous commit barrier / persist-before-ACK durability (does NOT replace it). Vote/PreVote freshness upgraded from LSN-only to (lastLogTerm,lastLogIndex) lexicographic compare (HandleRequestVoteRequest logOk, raft.tla:285, G6) carried via last_log_term in raft_on_vote_request + on_vote_eligible/vote-request payload. Simulator asserts Figure-8 refusal + Leader Completeness. Boundary: owns commit-index advance + vote freshness in src/lib/raft ONLY; NOT the log model/AppendEntries (raft-log-replication), the barrier/durability mechanism (controller), config markers/snapshot (ha-term-safety), or the conformance harness (raft-sim-conformance). Depends: raft-log-replication (HARD). Closes bug-851 G4/G6.",
"gitea": {
"milestone_id": 34,
"issues": {
"requirements_design": 165,
"implementation": 166,
"validation": 167
}
}
}

View file

@ -28,5 +28,13 @@
"upstream_spec": "N/A",
"blocking_bug": null,
"remediation": []
},
"gitea": {
"milestone_id": 35,
"issues": {
"requirements_design": 168,
"implementation": 169,
"validation": 170
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 36,
"issues": {
"requirements_design": 171,
"implementation": 172,
"validation": 173
}
}
}

View file

@ -19,5 +19,13 @@
}
},
"ready_for_implementation": true,
"note": "bug-339 (voted_for_term restore) fixed 2026-06-09. handle_request_vote guarded under XCE_TESTING \u2014 production path is cluster.c \u2192 raft_on_vote_request. Controller suite green. Req 3.4/3.5 text reflects current behavior (freshness gate in cluster.c dispatcher, higher-term leader step-down)."
"note": "bug-339 (voted_for_term restore) fixed 2026-06-09. handle_request_vote guarded under XCE_TESTING \u2014 production path is cluster.c \u2192 raft_on_vote_request. Controller suite green. Req 3.4/3.5 text reflects current behavior (freshness gate in cluster.c dispatcher, higher-term leader step-down).",
"gitea": {
"milestone_id": 37,
"issues": {
"requirements_design": 174,
"implementation": 175,
"validation": 176
}
}
}

View file

@ -20,5 +20,13 @@
},
"ready_for_implementation": true,
"implementation_status": "implemented — library log half landed + validated (24/24 tasks, raft_sim GO per memory project_raft_log_replication_done). Phase reconciled 2026-06-25 (was mislabeled tasks-generated).",
"note": "Auto-approved (-y mode). Extends election-only src/lib/raft into a strict raft.tla log-half implementation: ClientRequest/AppendEntries/HandleAppendEntriesRequest/HandleAppendEntriesResponse/UpdateTerm-on-any-RPC. Closes bug-851 G1/G2/G3/G5. Authoritative shared callback contract (on_persist_entry, on_get_entry_term, on_send_append_entries, on_truncate_from) consumed verbatim by raft-commit-safety, raft-sim-conformance, and ha-term-safety. Boundary: owns src/lib/raft log additions + (term,index) reconcile seam only; NOT commit-index advance, vote freshness, config, or controller WAL/transport internals."
"note": "Auto-approved (-y mode). Extends election-only src/lib/raft into a strict raft.tla log-half implementation: ClientRequest/AppendEntries/HandleAppendEntriesRequest/HandleAppendEntriesResponse/UpdateTerm-on-any-RPC. Closes bug-851 G1/G2/G3/G5. Authoritative shared callback contract (on_persist_entry, on_get_entry_term, on_send_append_entries, on_truncate_from) consumed verbatim by raft-commit-safety, raft-sim-conformance, and ha-term-safety. Boundary: owns src/lib/raft log additions + (term,index) reconcile seam only; NOT commit-index advance, vote freshness, config, or controller WAL/transport internals.",
"gitea": {
"milestone_id": 38,
"issues": {
"requirements_design": 177,
"implementation": 178,
"validation": 179
}
}
}

View file

@ -30,5 +30,13 @@
"design.md's invariant-checker narrative does not reflect the leader-only commit model correction recorded in tasks.md's own Implementation Notes for tasks 5.1/5.2: a FOLLOWER never advances commit_index/applied[] from AppendEntries (raft_on_append_entries_request does (void)leader_commit -- intended XCE design, follower commit visibility is a controller/heartbeat concern owned by ha-heartbeat-committed-propagation, not this library). Scenario tests correctly assert leader-side commit_index and log convergence rather than follower commit_index equality; design.md's prose was not back-ported to state this explicitly. Documentation-drift note only.",
"raft.h's XCE_TESTING sim section is also extended by a later, adjacent spec (raft-apply-decoupling, commit 5f98d1b, test_sim_apply_decoupling_* tests) building on this harness's scheduler/checkers. This is expected downstream consumption, not a boundary violation of this spec, but a future change to raft-sim-conformance's scheduler/action-record shape should check that spec's tests too."
]
},
"gitea": {
"milestone_id": 39,
"issues": {
"requirements_design": 180,
"implementation": 181,
"validation": 182
}
}
}

View file

@ -18,5 +18,13 @@
"approved": false
}
},
"ready_for_implementation": false
"ready_for_implementation": false,
"gitea": {
"milestone_id": 40,
"issues": {
"requirements_design": 183,
"implementation": 184,
"validation": 185
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 41,
"issues": {
"requirements_design": 186,
"implementation": 187,
"validation": 188
}
}
}

View file

@ -23,5 +23,13 @@
"validate_impl_decision": "GO",
"related_specs": ["scheduler-allocation"],
"related_bugs": ["bug-1770"],
"motivation": "scheduler-allocation's task 5.3/6.2 review confirmed parjob_allocator's entire multi-host combinatorial allocation path (implemented, reviewed, and soak-tested by that feature) has zero live production reachability today, because no real job submission can ever produce xce_primary_resreq_t.maxTasks > 1. This spec exists to close that gap."
"motivation": "scheduler-allocation's task 5.3/6.2 review confirmed parjob_allocator's entire multi-host combinatorial allocation path (implemented, reviewed, and soak-tested by that feature) has zero live production reachability today, because no real job submission can ever produce xce_primary_resreq_t.maxTasks > 1. This spec exists to close that gap.",
"gitea": {
"milestone_id": 42,
"issues": {
"requirements_design": 189,
"implementation": 190,
"validation": 191
}
}
}

View file

@ -20,5 +20,13 @@
"approved": true
}
},
"note": "CLOSED 2026-08-16. Recommended fix was implemented, not just proposed -- collect_resval_with_idx() replaced by name-keyed collect_resval() (commit d47b3375, 2026-05-13, landed one day after this spec was created). Verified in current code: zero remaining callers of the old idx-keyed function; controller.capnp's Worker.resvals/Conf4Sched.resvals are List(NameValue); scheduler resolves via key_find() by name (scheduler.c, schedobj.c). Related hazard bug-335 (UPDATE_RESVALS hardcoded slot 0) closed 2026-06-10. research.md's own Gap Re-Audit (2026-06-18): 21/23 EARS requirements met, functionally complete. 2 SHOULD-level residuals left as separate small cleanup, not a spec: delete the now-dead ValueWithIdx/xce_val_with_idx_t type (zero real callers); add one regression test for divergent controller/scheduler registration order (EARS-R6-1)."
"note": "CLOSED 2026-08-16. Recommended fix was implemented, not just proposed -- collect_resval_with_idx() replaced by name-keyed collect_resval() (commit d47b3375, 2026-05-13, landed one day after this spec was created). Verified in current code: zero remaining callers of the old idx-keyed function; controller.capnp's Worker.resvals/Conf4Sched.resvals are List(NameValue); scheduler resolves via key_find() by name (scheduler.c, schedobj.c). Related hazard bug-335 (UPDATE_RESVALS hardcoded slot 0) closed 2026-06-10. research.md's own Gap Re-Audit (2026-06-18): 21/23 EARS requirements met, functionally complete. 2 SHOULD-level residuals left as separate small cleanup, not a spec: delete the now-dead ValueWithIdx/xce_val_with_idx_t type (zero real callers); add one regression test for divergent controller/scheduler registration order (EARS-R6-1).",
"gitea": {
"milestone_id": 43,
"issues": {
"requirements_design": 192,
"implementation": 193,
"validation": 194
}
}
}

View file

@ -26,5 +26,13 @@
"RESOLVED 2026-09-04: requirements.md approved after extensive review -- 7 original findings plus several more surfaced during live design discussion (a self-contradiction in the parjob_allocator changes section, a plan/host-iterator init calling-convention mismatch vs. the declared struct interface, and a real correctness bug in the composition algorithm: host_iter was shared/forward-only across all buckets of a multi-bucket plan instead of freshly re-scanned per bucket, which would silently drop solvable multi-host allocations), all fixed in place; brief.md brought back into alignment with requirements.md's corrected architecture (it had drifted, still showing the pre-fix 2-level algorithm). Two adjacent, pre-existing gaps found along the way (sched_make_compound_allocation()'s missing rollback on partial failure; the recurring schedobj-reconstruction-duplication pattern in snapshot_load.c) logged as bug-1766/bug-1767 and deliberately kept out of this spec's boundary. No remaining blocker -- design phase clear to start."
],
"sibling_specs": ["scheduler-core", "scheduler-preemption", "scheduler-dispatch-commit"],
"sequencing_note": "Added 2026-08-23 (user directive): blocked on scheduler-dispatch-commit landing first -- this spec's try_alloc_on_host() reads the same resInUse/sharedInUse totals bug-1624 (fixed by scheduler-dispatch-commit) corrupts, and the planned XCE_ALLOC_PREEMPT borrowing mode interacts with what counts as committed/borrowable under that spec's redefined RUN-state timing."
"sequencing_note": "Added 2026-08-23 (user directive): blocked on scheduler-dispatch-commit landing first -- this spec's try_alloc_on_host() reads the same resInUse/sharedInUse totals bug-1624 (fixed by scheduler-dispatch-commit) corrupts, and the planned XCE_ALLOC_PREEMPT borrowing mode interacts with what counts as committed/borrowable under that spec's redefined RUN-state timing.",
"gitea": {
"milestone_id": 44,
"issues": {
"requirements_design": 195,
"implementation": 196,
"validation": 197
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 45,
"issues": {
"requirements_design": 198,
"implementation": 199,
"validation": 200
}
}
}

View file

@ -20,5 +20,13 @@
"approved": true
}
},
"note": "CLOSED 2026-08-16. Both open items resolved: sched_pend_update_killer leak fixed in commit 93124c56 (2026-06-19, bug-765 G-3) -- verified current scheduler.c:394-460 correctly frees all 5 payload types. Test coverage gap substantially closed in commit 276e26c3 (bug-765 G-6) -- added test_handlers.c (6 tests) + test_job_update.c (10 tests); msg-gap-relevant suites now 31/31 (the prior '15/15' predates these files). Bugs 335/336 confirmed fixed 2026-06-10. 3 low-value residuals remain individually documented in tasks.md's Implementation Notes (9.2 -ENOMEM fault-injection, 9.6 dormant worker-resvals apply path, 9.9 log-capture-gated WARN test) -- non-blocking, not worth standalone tracking."
"note": "CLOSED 2026-08-16. Both open items resolved: sched_pend_update_killer leak fixed in commit 93124c56 (2026-06-19, bug-765 G-3) -- verified current scheduler.c:394-460 correctly frees all 5 payload types. Test coverage gap substantially closed in commit 276e26c3 (bug-765 G-6) -- added test_handlers.c (6 tests) + test_job_update.c (10 tests); msg-gap-relevant suites now 31/31 (the prior '15/15' predates these files). Bugs 335/336 confirmed fixed 2026-06-10. 3 low-value residuals remain individually documented in tasks.md's Implementation Notes (9.2 -ENOMEM fault-injection, 9.6 dormant worker-resvals apply path, 9.9 log-capture-gated WARN test) -- non-blocking, not worth standalone tracking.",
"gitea": {
"milestone_id": 46,
"issues": {
"requirements_design": 201,
"implementation": 202,
"validation": 203
}
}
}

View file

@ -22,5 +22,13 @@
},
"ready_for_implementation": true,
"blocked_on": [],
"sibling_specs": ["scheduler-allocation", "scheduler-preemption"]
"sibling_specs": ["scheduler-allocation", "scheduler-preemption"],
"gitea": {
"milestone_id": 47,
"issues": {
"requirements_design": 204,
"implementation": 205,
"validation": 206
}
}
}

View file

@ -26,5 +26,13 @@
"blocks": ["scheduler-allocation"],
"related_bugs": ["bug-1624", "bug-1625", "bug-1626", "bug-1627"],
"design_validation": "5 rounds of /kiro-validate-design, all findings fixed in place (no NO-GO carried forward): RTTI_LOCK_WRITE gap (bug-1626), unused scheduler-side field removed, requirements.md AC 2.1 wording reconciled, double-notify race (notify_dispatch fires on success too) fixed by moving classification+notification inside dispatch_a_job_(), rc-value classification replaced with an exhaustive site-identity enum, a 6th failure site (RPC failure) found and added, dispatch_a_job_() reference leak found and fixed (bug-1627, 4 sites), WAL apply logic corrected to cover both apply_wal_entry() and apply_committed_entry(). Final pass found no further issues. GO.",
"sequencing_note": "User directive (2026-08-22): this spec must land before scheduler-allocation begins implementation -- scheduler-allocation's iterator-based try_alloc_on_host() reads the same resInUse/sharedInUse totals bug-1624 corrupts, and its planned XCE_ALLOC_PREEMPT borrowing mode interacts with what counts as committed/borrowable. scheduler-allocation's own spec.json should be updated to note this dependency."
"sequencing_note": "User directive (2026-08-22): this spec must land before scheduler-allocation begins implementation -- scheduler-allocation's iterator-based try_alloc_on_host() reads the same resInUse/sharedInUse totals bug-1624 corrupts, and its planned XCE_ALLOC_PREEMPT borrowing mode interacts with what counts as committed/borrowable. scheduler-allocation's own spec.json should be updated to note this dependency.",
"gitea": {
"milestone_id": 48,
"issues": {
"requirements_design": 207,
"implementation": 208,
"validation": 209
}
}
}

View file

@ -21,5 +21,13 @@
},
"ready_for_implementation": false,
"blocked_on": [],
"child_specs": ["scheduler-core", "scheduler-allocation", "scheduler-preemption"]
"child_specs": ["scheduler-core", "scheduler-allocation", "scheduler-preemption"],
"gitea": {
"milestone_id": 49,
"issues": {
"requirements_design": 210,
"implementation": 211,
"validation": 212
}
}
}

View file

@ -24,5 +24,13 @@
"blocked_on": [
"RESOLVED 2026-09-03: scheduler-core reached implementation-complete (2026-08-19). No remaining dependency blocker; requirements.md still awaits approval before design can proceed."
],
"sibling_specs": ["scheduler-core", "scheduler-allocation"]
"sibling_specs": ["scheduler-core", "scheduler-allocation"],
"gitea": {
"milestone_id": 50,
"issues": {
"requirements_design": 213,
"implementation": 214,
"validation": 215
}
}
}

View file

@ -22,5 +22,13 @@
"validation_note": "kiro-spec-tasks 2026-09-02: 6 major tasks / 15 sub-tasks (plus 2 collapsed single-item major tasks) drafted covering all 25 requirement IDs (1.1-6.3) and every design.md component (SchedulerProcessManager, SchedulerConnectionBookkeeping, SchedOwnerWatch, the graceful-exit wire message). Independent task-graph sanity review (fresh subagent, pass 1): NEEDS_FIXES -- (1) task 1.2's (P) marker missing a _Boundary:_ tag, (2) task 2.4's _Depends:_ omitted 2.2 despite needing it, (3) Requirement 1.5's heartbeat-driven start-retry had no task wiring an actual periodic call site, (4) the old-rejoin-logic removal task was sequenced in Core, before ha.c wiring and tooling reconciliation, contradicting design.md's own Migration Strategy phase order (removal must be last), (5) design.md's own Testing Strategy lists a dedicated \"job survives scheduler killed mid-decision\" integration test with no owning task, (6) the tooling-reconciliation task covered only the known run-ha-soak.sh case, not design.md's broader \"flag any other dependent spec\" commitment. All 6 fixed: boundary tag added; dependency completed; new task 4.3 combines the heartbeat-driven start-retry and wedge-check wiring; the removal task became standalone Task 6 (last in the file, depending on 3, 4.1, 4.2, 5.7, 5.8, matching the Migration Strategy phases); new task 5.3 added for the job-durability scenario; task 5.8 broadened to sweep other specs/tooling. Sanity review pass 2 (fresh subagent): PASS -- all 6 fixes verified correct, plus fresh independent checks (full requirement-ID coverage, all _Depends:_ references resolve to real tasks including the two collapsed single-item major tasks, no (P)-marker boundary conflicts, Task 6's dependency list matches the Migration Strategy phases). Awaiting user approval before implementation."
}
},
"ready_for_implementation": false
"ready_for_implementation": false,
"gitea": {
"milestone_id": 51,
"issues": {
"requirements_design": 216,
"implementation": 217,
"validation": 218
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 52,
"issues": {
"requirements_design": 219,
"implementation": 220,
"validation": 221
}
}
}

View file

@ -20,5 +20,13 @@
}
},
"ready_for_implementation": true,
"blocked_on": []
"blocked_on": [],
"gitea": {
"milestone_id": 53,
"issues": {
"requirements_design": 222,
"implementation": 223,
"validation": 224
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 54,
"issues": {
"requirements_design": 225,
"implementation": 226,
"validation": 227
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": false
"ready_for_implementation": false,
"gitea": {
"milestone_id": 55,
"issues": {
"requirements_design": 228,
"implementation": 229,
"validation": 230
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 56,
"issues": {
"requirements_design": 231,
"implementation": 232,
"validation": 233
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 57,
"issues": {
"requirements_design": 234,
"implementation": 235,
"validation": 236
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 58,
"issues": {
"requirements_design": 237,
"implementation": 238,
"validation": 239
}
}
}

View file

@ -18,6 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 59,
"issues": {
"requirements_design": 240,
"implementation": 241,
"validation": 242
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 60,
"issues": {
"requirements_design": 243,
"implementation": 244,
"validation": 245
}
}
}

View file

@ -22,5 +22,13 @@
}
},
"ready_for_implementation": true,
"blocked_on": []
"blocked_on": [],
"gitea": {
"milestone_id": 61,
"issues": {
"requirements_design": 246,
"implementation": 247,
"validation": 248
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 62,
"issues": {
"requirements_design": 249,
"implementation": 250,
"validation": 251
}
}
}

View file

@ -21,5 +21,13 @@
"approved": false
}
},
"ready_for_implementation": false
"ready_for_implementation": false,
"gitea": {
"milestone_id": 63,
"issues": {
"requirements_design": 252,
"implementation": 253,
"validation": 254
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 64,
"issues": {
"requirements_design": 255,
"implementation": 256,
"validation": 257
}
}
}

View file

@ -23,5 +23,13 @@
"approved": true
}
},
"ready_for_implementation": true
}
"ready_for_implementation": true,
"gitea": {
"milestone_id": 65,
"issues": {
"requirements_design": 258,
"implementation": 259,
"validation": 260
}
}
}

View file

@ -18,5 +18,13 @@
"approved": true
}
},
"ready_for_implementation": true
"ready_for_implementation": true,
"gitea": {
"milestone_id": 66,
"issues": {
"requirements_design": 261,
"implementation": 262,
"validation": 263
}
}
}

View file

@ -11476,6 +11476,7 @@
},
{
"id": "bug-1095",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-06-24",
@ -16084,6 +16085,7 @@
},
{
"id": "bug-1439",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"status_note": "654c6e8c, c1c6c9a2",
@ -16285,6 +16287,7 @@
},
{
"id": "bug-1446",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-07-18T00:47:00Z",
@ -16310,6 +16313,7 @@
},
{
"id": "bug-1447",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-07-18T01:05:02Z",
@ -16349,6 +16353,7 @@
},
{
"id": "bug-1448",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-07-18T01:54:00Z",
@ -16377,6 +16382,7 @@
},
{
"id": "bug-1449",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-07-18T09:56:00.000Z",
@ -16405,6 +16411,7 @@
},
{
"id": "bug-1450",
"gitea_synced_status": "partial",
"status": "partial",
"status_updated": "2026-09-24",
"status_note": "slow-lane offload exists (f88e4ef4) but flag defaults OFF (ha_convergence.c)",
@ -16436,6 +16443,7 @@
},
{
"id": "bug-1451",
"gitea_synced_status": "partial",
"status": "partial",
"status_updated": "2026-09-24",
"status_note": "slow-lane offload exists (f88e4ef4) but flag defaults OFF (config_repl.c)",
@ -16468,6 +16476,7 @@
},
{
"id": "bug-1452",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-07-18T00:00:00Z",
@ -16506,6 +16515,7 @@
},
{
"id": "bug-1453",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-07-20T00:00:00.000Z",
@ -16532,6 +16542,7 @@
},
{
"id": "bug-1454",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"status_note": "94f50ce6",
@ -16555,6 +16566,7 @@
},
{
"id": "bug-1455",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-07-20T00:00:00.000Z",
@ -16579,6 +16591,7 @@
},
{
"id": "bug-1456",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-07-20T00:00:00.000Z",
@ -16605,6 +16618,7 @@
},
{
"id": "bug-1457",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-07-20T22:56:00Z",
@ -22431,6 +22445,7 @@
},
{
"id": "bug-1673",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-08-24T13:40:00Z",
@ -22459,6 +22474,7 @@
},
{
"id": "bug-1674",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-08-24T13:40:00Z",
@ -22484,6 +22500,7 @@
},
{
"id": "bug-1675",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-08-24T13:40:00Z",
@ -22509,6 +22526,7 @@
},
{
"id": "bug-1676",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-08-24T13:40:00Z",
@ -22558,6 +22576,7 @@
},
{
"id": "bug-1678",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-08-24T13:55:00Z",
@ -24463,6 +24482,7 @@
},
{
"id": "bug-1742",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-01T04:10:00Z",
@ -24491,6 +24511,7 @@
},
{
"id": "bug-1743",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-01T04:10:00Z",
@ -24536,6 +24557,7 @@
},
{
"id": "bug-1744",
"gitea_synced_status": "open",
"status": "open",
"status_updated": "2026-09-24",
"status_note": "malformed resreq accepted at submit then silently dropped (controllers/jobs.go length-only check)",
@ -25321,6 +25343,8 @@
},
{
"id": "bug-1772",
"gitea_synced_status": "fixed",
"gitea_issue": 52,
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-05T00:00:00Z",
@ -25565,6 +25589,7 @@
},
{
"id": "bug-1781",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-07T08:35:00Z",
@ -25596,6 +25621,7 @@
},
{
"id": "bug-1782",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-07T08:40:00Z",
@ -25622,6 +25648,7 @@
},
{
"id": "bug-1784",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-07T09:00:00Z",
@ -25653,6 +25680,7 @@
},
{
"id": "bug-1785",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-07T09:15:00Z",
@ -25682,6 +25710,7 @@
},
{
"id": "bug-1786",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-07T09:30:00Z",
@ -25713,6 +25742,7 @@
},
{
"id": "bug-1787",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-07T09:45:00Z",
@ -25743,6 +25773,7 @@
},
{
"id": "bug-1788",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-07T10:00:00Z",
@ -25775,6 +25806,7 @@
},
{
"id": "bug-1789",
"gitea_synced_status": "fixed",
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-07T10:30:00Z",
@ -27031,6 +27063,8 @@
},
{
"id": "bug-1830",
"gitea_synced_status": "cannot-reproduce",
"gitea_issue": 53,
"status": "cannot-reproduce",
"status_updated": "2026-09-24",
"status_note": "downgraded 07b5c989; user's own retest showed mem limit usage correctly",
@ -27064,6 +27098,8 @@
},
{
"id": "bug-1831",
"gitea_synced_status": "fixed",
"gitea_issue": 56,
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-20T10:00:00Z",
@ -27091,6 +27127,8 @@
},
{
"id": "bug-1832",
"gitea_synced_status": "fixed",
"gitea_issue": 58,
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-20T10:00:00Z",
@ -27118,6 +27156,8 @@
},
{
"id": "bug-1833",
"gitea_synced_status": "fixed",
"gitea_issue": 59,
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-20T11:00:00Z",
@ -27146,6 +27186,8 @@
},
{
"id": "bug-1834",
"gitea_synced_status": "fixed",
"gitea_issue": 61,
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-20T09:35:00Z",
@ -27179,6 +27221,8 @@
},
{
"id": "bug-1835",
"gitea_synced_status": "fixed",
"gitea_issue": 64,
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-21T03:47:10Z",
@ -27215,6 +27259,8 @@
},
{
"id": "bug-1836",
"gitea_synced_status": "fixed",
"gitea_issue": 65,
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-20T22:00:00Z",
@ -27250,6 +27296,8 @@
},
{
"id": "bug-1837",
"gitea_synced_status": "fixed",
"gitea_issue": 67,
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-20T22:05:00Z",
@ -27282,6 +27330,8 @@
},
{
"id": "bug-1838",
"gitea_synced_status": "fixed",
"gitea_issue": 70,
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-21T00:30:00Z",
@ -27317,6 +27367,8 @@
},
{
"id": "bug-1839",
"gitea_synced_status": "fixed",
"gitea_issue": 71,
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-22T02:30:00Z",
@ -27349,6 +27401,8 @@
},
{
"id": "bug-1840",
"gitea_synced_status": "investigating",
"gitea_issue": 74,
"status": "investigating",
"status_updated": "2026-09-24",
"status_note": "scheduler heap corruption (malloc_consolidate abort) during TLS handshake; awaiting ASAN repro",
@ -27378,6 +27432,8 @@
},
{
"id": "bug-1841",
"gitea_synced_status": "fixed",
"gitea_issue": 75,
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-22T09:00:00Z",
@ -27409,6 +27465,8 @@
},
{
"id": "bug-1842",
"gitea_synced_status": "fixed",
"gitea_issue": 77,
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-22T19:35:00Z",
@ -27443,6 +27501,8 @@
},
{
"id": "bug-1843",
"gitea_synced_status": "fixed",
"gitea_issue": 78,
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-22T19:35:00Z",
@ -27476,6 +27536,8 @@
},
{
"id": "bug-1844",
"gitea_synced_status": "fixed",
"gitea_issue": 81,
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-23T09:15:00Z",
@ -27506,6 +27568,8 @@
},
{
"id": "bug-1845",
"gitea_synced_status": "fixed",
"gitea_issue": 83,
"status": "fixed",
"status_updated": "2026-09-24",
"timestamp": "2026-09-23T10:00:00Z",
@ -27536,6 +27600,8 @@
},
{
"id": "bug-1846",
"gitea_synced_status": "fixed",
"gitea_issue": 84,
"status": "fixed",
"status_updated": "2026-09-24",
"status_note": "77f047f2, a9feded8, ac033f47",
@ -27714,6 +27780,8 @@
},
{
"id": "bug-1855",
"gitea_synced_status": "fixed",
"gitea_issue": 88,
"status_note": "commit 'feat(buglog): status field, buglog skill, status-driven gitea-sync' (2026-09-24)",
"status": "fixed",
"status_updated": "2026-09-24",
@ -27721,7 +27789,7 @@
"error_message": "gitea-sync mirrored unfixed bugs as closed + bug:fixed: an issue was closed whenever the buglog entry's fix text was non-empty, including fix texts reading 'NOT FIXED', 'PENDING' or 'PARTIALLY FIXED' (e.g. bug-1450 #25, bug-1451 #35, bug-1744 #47)",
"file": "scripts/gitea-sync.py,.claude/skills/gitea-sync/SKILL.md",
"root_cause": "buglog.json had no status field, so scripts/gitea-sync.py and the gitea-sync skill inferred open/closed from fix being non-empty. Same script also: crashed on entries whose fix is a list (.strip() on list); replaced an issue's whole label set with just bug:fixed on close (wiping bug/category/user labels); wrote gitea_issue back only after the whole loop via a full json.dumps rewrite (a mid-run failure lost issue numbers -> duplicate issues next run, and the rewrite churned ~1,200 unrelated lines); read approvals.implementation, which no spec.json has, so spec implementation/validation issues and milestones never closed; never reopened an issue whose bug came back.",
"fix": "Added a status field to every buglog entry (backfilled 2026-09-24) and made status the only open/closed source: STATUS_MAP -> state + one bug:<status> label; entries sharing an issue take the most-open status; only status labels are swapped (other labels kept); reopen supported; gitea_synced_status tracks what was mirrored so unchanged entries make no API calls; per-entry surgical write-back via scripts/buglog.py set_fields; spec issues close on DONE_PHASES (implementation-complete/implemented/superseded). Skill doc updated to match.",
"fix": "Added a status field to every buglog entry (backfilled 2026-09-24) and made status the only open/closed source: STATUS_MAP -> state + one bug:<status> label; entries sharing an issue take the most-open status; only status labels are swapped (other labels kept); reopen supported; gitea_synced_status tracks what was mirrored so unchanged entries make no API calls; per-entry surgical write-back via scripts/buglog.py set_fields; spec issues close on DONE_PHASES (implementation-complete/implemented/superseded). Skill doc updated to match.\n\nUPDATE (2026-09-24): Found during the first live run: DELETE/204 replies have an empty body (json.loads crashed the run after the first label removal), requests had no timeout (a stalled call hung the run), spec.json write-back reflowed 15 hand-formatted files, and the implementation-issue body showed the tasks approval flag as 'Tasks generated'. All fixed; first live run: bugs 20 created, 2 reopened (#25, #35), 14 relabelled; specs 65 milestones + 195 issues (158 closed at creation).",
"tags": [
"gitea-sync",
"tooling",
@ -27735,6 +27803,8 @@
},
{
"id": "bug-1856",
"gitea_synced_status": "open",
"gitea_issue": 89,
"status": "open",
"status_updated": "2026-09-24",
"status_note": "upstream OpenWolf defect; mitigated locally by openwolf.buglog.auto_detect=false; scripts/buglog.py add uses max id + 1; report upstream",