diff --git a/.kiro/specs/build-time-versioning/spec.json b/.kiro/specs/build-time-versioning/spec.json index 22c30f87..eb66c80b 100644 --- a/.kiro/specs/build-time-versioning/spec.json +++ b/.kiro/specs/build-time-versioning/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/clusterconfig-schema-split/spec.json b/.kiro/specs/clusterconfig-schema-split/spec.json index a5fceb4d..4f9231ad 100644 --- a/.kiro/specs/clusterconfig-schema-split/spec.json +++ b/.kiro/specs/clusterconfig-schema-split/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/commit-batch-window/spec.json b/.kiro/specs/commit-batch-window/spec.json index 6da2aa3b..fefd9e30 100644 --- a/.kiro/specs/commit-batch-window/spec.json +++ b/.kiro/specs/commit-batch-window/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/component-failover-adoption/spec.json b/.kiro/specs/component-failover-adoption/spec.json index ef4c98cd..731a7c82 100644 --- a/.kiro/specs/component-failover-adoption/spec.json +++ b/.kiro/specs/component-failover-adoption/spec.json @@ -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 + } } } diff --git a/.kiro/specs/component-rejoin-resync/spec.json b/.kiro/specs/component-rejoin-resync/spec.json index 483a4bd5..9ed79f39 100644 --- a/.kiro/specs/component-rejoin-resync/spec.json +++ b/.kiro/specs/component-rejoin-resync/spec.json @@ -20,5 +20,13 @@ } }, "ready_for_implementation": false, - "blocked_on": [] + "blocked_on": [], + "gitea": { + "milestone_id": 6, + "issues": { + "requirements_design": 72, + "implementation": 73, + "validation": 76 + } + } } diff --git a/.kiro/specs/config-upgrade-snapshot/spec.json b/.kiro/specs/config-upgrade-snapshot/spec.json index e118f82a..918ea416 100644 --- a/.kiro/specs/config-upgrade-snapshot/spec.json +++ b/.kiro/specs/config-upgrade-snapshot/spec.json @@ -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 + } } } diff --git a/.kiro/specs/controller-peers-env-fallback/spec.json b/.kiro/specs/controller-peers-env-fallback/spec.json index 9225d4dc..6069522c 100644 --- a/.kiro/specs/controller-peers-env-fallback/spec.json +++ b/.kiro/specs/controller-peers-env-fallback/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/controller-status/spec.json b/.kiro/specs/controller-status/spec.json index 6c736660..f18f9a46 100644 --- a/.kiro/specs/controller-status/spec.json +++ b/.kiro/specs/controller-status/spec.json @@ -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 + } } } diff --git a/.kiro/specs/dirty-content-fingerprint/spec.json b/.kiro/specs/dirty-content-fingerprint/spec.json index 50662e88..712b7591 100644 --- a/.kiro/specs/dirty-content-fingerprint/spec.json +++ b/.kiro/specs/dirty-content-fingerprint/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/election-iomgr-refactor/spec.json b/.kiro/specs/election-iomgr-refactor/spec.json index af4a68d1..69590837 100644 --- a/.kiro/specs/election-iomgr-refactor/spec.json +++ b/.kiro/specs/election-iomgr-refactor/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/eliminate-frontend-makefile/spec.json b/.kiro/specs/eliminate-frontend-makefile/spec.json index fbe1d015..1afa10cd 100644 --- a/.kiro/specs/eliminate-frontend-makefile/spec.json +++ b/.kiro/specs/eliminate-frontend-makefile/spec.json @@ -22,5 +22,13 @@ } }, "ready_for_implementation": false, - "blocked_on": [] + "blocked_on": [], + "gitea": { + "milestone_id": 12, + "issues": { + "requirements_design": 99, + "implementation": 100, + "validation": 101 + } + } } diff --git a/.kiro/specs/ha-commit-barrier-rollout/spec.json b/.kiro/specs/ha-commit-barrier-rollout/spec.json index 7e508828..9e45c8e0 100644 --- a/.kiro/specs/ha-commit-barrier-rollout/spec.json +++ b/.kiro/specs/ha-commit-barrier-rollout/spec.json @@ -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)." -} \ No newline at end of file + "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 + } + } +} diff --git a/.kiro/specs/ha-commit-durability/spec.json b/.kiro/specs/ha-commit-durability/spec.json index e54de69c..e0c63254 100644 --- a/.kiro/specs/ha-commit-durability/spec.json +++ b/.kiro/specs/ha-commit-durability/spec.json @@ -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 + } } } diff --git a/.kiro/specs/ha-commit-engine/spec.json b/.kiro/specs/ha-commit-engine/spec.json index 307b8f9a..4837238b 100644 --- a/.kiro/specs/ha-commit-engine/spec.json +++ b/.kiro/specs/ha-commit-engine/spec.json @@ -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." -} \ No newline at end of file + "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 + } + } +} diff --git a/.kiro/specs/ha-config-bootstrap/spec.json b/.kiro/specs/ha-config-bootstrap/spec.json index 86f5e0ec..edd15dbd 100644 --- a/.kiro/specs/ha-config-bootstrap/spec.json +++ b/.kiro/specs/ha-config-bootstrap/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/ha-consistency-invariants/spec.json b/.kiro/specs/ha-consistency-invariants/spec.json index c75a4caa..7d37a573 100644 --- a/.kiro/specs/ha-consistency-invariants/spec.json +++ b/.kiro/specs/ha-consistency-invariants/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/ha-convergence-recovery/spec.json b/.kiro/specs/ha-convergence-recovery/spec.json index 58b6b6a1..066195ac 100644 --- a/.kiro/specs/ha-convergence-recovery/spec.json +++ b/.kiro/specs/ha-convergence-recovery/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/ha-elect-ctx-lifecycle/spec.json b/.kiro/specs/ha-elect-ctx-lifecycle/spec.json index e146b1d6..39321326 100644 --- a/.kiro/specs/ha-elect-ctx-lifecycle/spec.json +++ b/.kiro/specs/ha-elect-ctx-lifecycle/spec.json @@ -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 + } } } diff --git a/.kiro/specs/ha-entity-snapshots/spec.json b/.kiro/specs/ha-entity-snapshots/spec.json index 85390fcd..76e7093b 100644 --- a/.kiro/specs/ha-entity-snapshots/spec.json +++ b/.kiro/specs/ha-entity-snapshots/spec.json @@ -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 + } } } diff --git a/.kiro/specs/ha-heartbeat-committed-propagation/spec.json b/.kiro/specs/ha-heartbeat-committed-propagation/spec.json index 104b28de..93c46922 100644 --- a/.kiro/specs/ha-heartbeat-committed-propagation/spec.json +++ b/.kiro/specs/ha-heartbeat-committed-propagation/spec.json @@ -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 + } } } diff --git a/.kiro/specs/ha-heartbeat-liveness/spec.json b/.kiro/specs/ha-heartbeat-liveness/spec.json index a819a47a..5bc821e0 100644 --- a/.kiro/specs/ha-heartbeat-liveness/spec.json +++ b/.kiro/specs/ha-heartbeat-liveness/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/ha-peer-connection-reuse/spec.json b/.kiro/specs/ha-peer-connection-reuse/spec.json index cc594f37..39e875d1 100644 --- a/.kiro/specs/ha-peer-connection-reuse/spec.json +++ b/.kiro/specs/ha-peer-connection-reuse/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/ha-prevote/spec.json b/.kiro/specs/ha-prevote/spec.json index c0d8957c..11628b71 100644 --- a/.kiro/specs/ha-prevote/spec.json +++ b/.kiro/specs/ha-prevote/spec.json @@ -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 + } } } diff --git a/.kiro/specs/ha-repl-hardening/spec.json b/.kiro/specs/ha-repl-hardening/spec.json index f7d8115c..f308139d 100644 --- a/.kiro/specs/ha-repl-hardening/spec.json +++ b/.kiro/specs/ha-repl-hardening/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/ha-single-leader-role/spec.json b/.kiro/specs/ha-single-leader-role/spec.json index 307caab8..cc11b0bf 100644 --- a/.kiro/specs/ha-single-leader-role/spec.json +++ b/.kiro/specs/ha-single-leader-role/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/ha-term-safety/spec.json b/.kiro/specs/ha-term-safety/spec.json index 4e806aa5..a00d918b 100644 --- a/.kiro/specs/ha-term-safety/spec.json +++ b/.kiro/specs/ha-term-safety/spec.json @@ -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 + } } -} \ No newline at end of file +} diff --git a/.kiro/specs/ha-wal-replication/spec.json b/.kiro/specs/ha-wal-replication/spec.json index 21415154..8f8acb2a 100644 --- a/.kiro/specs/ha-wal-replication/spec.json +++ b/.kiro/specs/ha-wal-replication/spec.json @@ -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 + } } } diff --git a/.kiro/specs/job-array-single-wal-record/spec.json b/.kiro/specs/job-array-single-wal-record/spec.json index 26308404..30155ab7 100644 --- a/.kiro/specs/job-array-single-wal-record/spec.json +++ b/.kiro/specs/job-array-single-wal-record/spec.json @@ -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 + } } } diff --git a/.kiro/specs/libxce-alloc-preason-equality/spec.json b/.kiro/specs/libxce-alloc-preason-equality/spec.json index 0e043321..442f6467 100644 --- a/.kiro/specs/libxce-alloc-preason-equality/spec.json +++ b/.kiro/specs/libxce-alloc-preason-equality/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/libxce-failover/spec.json b/.kiro/specs/libxce-failover/spec.json index d03d414b..1d0ffcb4 100644 --- a/.kiro/specs/libxce-failover/spec.json +++ b/.kiro/specs/libxce-failover/spec.json @@ -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 + } } } diff --git a/.kiro/specs/raft-adapter-conformance/spec.json b/.kiro/specs/raft-adapter-conformance/spec.json index 84896f92..e0d5cb11 100644 --- a/.kiro/specs/raft-adapter-conformance/spec.json +++ b/.kiro/specs/raft-adapter-conformance/spec.json @@ -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 + } } } diff --git a/.kiro/specs/raft-apply-decoupling/spec.json b/.kiro/specs/raft-apply-decoupling/spec.json index d17fd15f..b7c2d4f2 100644 --- a/.kiro/specs/raft-apply-decoupling/spec.json +++ b/.kiro/specs/raft-apply-decoupling/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/raft-commit-safety/spec.json b/.kiro/specs/raft-commit-safety/spec.json index e4c903fd..8481cf7a 100644 --- a/.kiro/specs/raft-commit-safety/spec.json +++ b/.kiro/specs/raft-commit-safety/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/raft-drive-async/spec.json b/.kiro/specs/raft-drive-async/spec.json index ad9cc761..f3c54a01 100644 --- a/.kiro/specs/raft-drive-async/spec.json +++ b/.kiro/specs/raft-drive-async/spec.json @@ -28,5 +28,13 @@ "upstream_spec": "N/A", "blocking_bug": null, "remediation": [] + }, + "gitea": { + "milestone_id": 35, + "issues": { + "requirements_design": 168, + "implementation": 169, + "validation": 170 + } } } diff --git a/.kiro/specs/raft-ha-core-safety/spec.json b/.kiro/specs/raft-ha-core-safety/spec.json index e338608c..034e7384 100644 --- a/.kiro/specs/raft-ha-core-safety/spec.json +++ b/.kiro/specs/raft-ha-core-safety/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/raft-library/spec.json b/.kiro/specs/raft-library/spec.json index 9e43cd9a..9306fb57 100644 --- a/.kiro/specs/raft-library/spec.json +++ b/.kiro/specs/raft-library/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/raft-log-replication/spec.json b/.kiro/specs/raft-log-replication/spec.json index 5556247c..7521ba2e 100644 --- a/.kiro/specs/raft-log-replication/spec.json +++ b/.kiro/specs/raft-log-replication/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/raft-sim-conformance/spec.json b/.kiro/specs/raft-sim-conformance/spec.json index 83fa1b2e..50d19b4a 100644 --- a/.kiro/specs/raft-sim-conformance/spec.json +++ b/.kiro/specs/raft-sim-conformance/spec.json @@ -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 + } } } diff --git a/.kiro/specs/resource-distribution-mapping/spec.json b/.kiro/specs/resource-distribution-mapping/spec.json index 6f1890e7..bafc902b 100644 --- a/.kiro/specs/resource-distribution-mapping/spec.json +++ b/.kiro/specs/resource-distribution-mapping/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/resource-value-verification/spec.json b/.kiro/specs/resource-value-verification/spec.json index 55f25ab1..697906da 100644 --- a/.kiro/specs/resource-value-verification/spec.json +++ b/.kiro/specs/resource-value-verification/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/resreq-maxtasks-wiring/spec.json b/.kiro/specs/resreq-maxtasks-wiring/spec.json index 2a96f3ac..7446899d 100644 --- a/.kiro/specs/resreq-maxtasks-wiring/spec.json +++ b/.kiro/specs/resreq-maxtasks-wiring/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/resval-id-decoupling/spec.json b/.kiro/specs/resval-id-decoupling/spec.json index c4160055..8b5c790c 100644 --- a/.kiro/specs/resval-id-decoupling/spec.json +++ b/.kiro/specs/resval-id-decoupling/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/scheduler-allocation/spec.json b/.kiro/specs/scheduler-allocation/spec.json index 7cf11dc2..505f3875 100644 --- a/.kiro/specs/scheduler-allocation/spec.json +++ b/.kiro/specs/scheduler-allocation/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/scheduler-config-version-tag/spec.json b/.kiro/specs/scheduler-config-version-tag/spec.json index cf8b1067..e9ccb449 100644 --- a/.kiro/specs/scheduler-config-version-tag/spec.json +++ b/.kiro/specs/scheduler-config-version-tag/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/scheduler-controller-msg-gap/spec.json b/.kiro/specs/scheduler-controller-msg-gap/spec.json index 368cf47c..15209957 100644 --- a/.kiro/specs/scheduler-controller-msg-gap/spec.json +++ b/.kiro/specs/scheduler-controller-msg-gap/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/scheduler-core/spec.json b/.kiro/specs/scheduler-core/spec.json index 97192ecc..41f3428a 100644 --- a/.kiro/specs/scheduler-core/spec.json +++ b/.kiro/specs/scheduler-core/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/scheduler-dispatch-commit/spec.json b/.kiro/specs/scheduler-dispatch-commit/spec.json index a3342f8e..eb7e4eae 100644 --- a/.kiro/specs/scheduler-dispatch-commit/spec.json +++ b/.kiro/specs/scheduler-dispatch-commit/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/scheduler-framework/spec.json b/.kiro/specs/scheduler-framework/spec.json index 8c5192d2..30e9a716 100644 --- a/.kiro/specs/scheduler-framework/spec.json +++ b/.kiro/specs/scheduler-framework/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/scheduler-preemption/spec.json b/.kiro/specs/scheduler-preemption/spec.json index c54c227f..50c431ba 100644 --- a/.kiro/specs/scheduler-preemption/spec.json +++ b/.kiro/specs/scheduler-preemption/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/scheduler-primary-lifecycle/spec.json b/.kiro/specs/scheduler-primary-lifecycle/spec.json index 2c1f6a66..d621e802 100644 --- a/.kiro/specs/scheduler-primary-lifecycle/spec.json +++ b/.kiro/specs/scheduler-primary-lifecycle/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/scheduler-sim-decision-parity/spec.json b/.kiro/specs/scheduler-sim-decision-parity/spec.json index 1ffc7eb4..d8347316 100644 --- a/.kiro/specs/scheduler-sim-decision-parity/spec.json +++ b/.kiro/specs/scheduler-sim-decision-parity/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/scheduler-sim-diagnostics/spec.json b/.kiro/specs/scheduler-sim-diagnostics/spec.json index b8ada5a2..5e397a65 100644 --- a/.kiro/specs/scheduler-sim-diagnostics/spec.json +++ b/.kiro/specs/scheduler-sim-diagnostics/spec.json @@ -20,5 +20,13 @@ } }, "ready_for_implementation": true, - "blocked_on": [] + "blocked_on": [], + "gitea": { + "milestone_id": 53, + "issues": { + "requirements_design": 222, + "implementation": 223, + "validation": 224 + } + } } diff --git a/.kiro/specs/scheduler-sim-eager-reconciliation/spec.json b/.kiro/specs/scheduler-sim-eager-reconciliation/spec.json index 166fba39..03f7a965 100644 --- a/.kiro/specs/scheduler-sim-eager-reconciliation/spec.json +++ b/.kiro/specs/scheduler-sim-eager-reconciliation/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/scheduler-sim-live-allocation/spec.json b/.kiro/specs/scheduler-sim-live-allocation/spec.json index 6108f324..eb1ef0b7 100644 --- a/.kiro/specs/scheduler-sim-live-allocation/spec.json +++ b/.kiro/specs/scheduler-sim-live-allocation/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/scheduler-sim-reconcile-terminal-guard/spec.json b/.kiro/specs/scheduler-sim-reconcile-terminal-guard/spec.json index a1f6cc45..8596d6f7 100644 --- a/.kiro/specs/scheduler-sim-reconcile-terminal-guard/spec.json +++ b/.kiro/specs/scheduler-sim-reconcile-terminal-guard/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/scheduler-sim-repl-verbosity/spec.json b/.kiro/specs/scheduler-sim-repl-verbosity/spec.json index b7ccc745..aa802d58 100644 --- a/.kiro/specs/scheduler-sim-repl-verbosity/spec.json +++ b/.kiro/specs/scheduler-sim-repl-verbosity/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/scheduler-sim-step-verbosity/spec.json b/.kiro/specs/scheduler-sim-step-verbosity/spec.json index 16020344..2786e19a 100644 --- a/.kiro/specs/scheduler-sim-step-verbosity/spec.json +++ b/.kiro/specs/scheduler-sim-step-verbosity/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/scheduler-snapshot-job-allocation/spec.json b/.kiro/specs/scheduler-snapshot-job-allocation/spec.json index ca8f5539..a6f9566b 100644 --- a/.kiro/specs/scheduler-snapshot-job-allocation/spec.json +++ b/.kiro/specs/scheduler-snapshot-job-allocation/spec.json @@ -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 + } + } } - diff --git a/.kiro/specs/worker-join-refactor/spec.json b/.kiro/specs/worker-join-refactor/spec.json index 39a7cd64..f4f74e0c 100644 --- a/.kiro/specs/worker-join-refactor/spec.json +++ b/.kiro/specs/worker-join-refactor/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/worker-rejoin-resync/spec.json b/.kiro/specs/worker-rejoin-resync/spec.json index b7cb0e76..6307605e 100644 --- a/.kiro/specs/worker-rejoin-resync/spec.json +++ b/.kiro/specs/worker-rejoin-resync/spec.json @@ -22,5 +22,13 @@ } }, "ready_for_implementation": true, - "blocked_on": [] + "blocked_on": [], + "gitea": { + "milestone_id": 61, + "issues": { + "requirements_design": 246, + "implementation": 247, + "validation": 248 + } + } } diff --git a/.kiro/specs/xce-harness-component/spec.json b/.kiro/specs/xce-harness-component/spec.json index 8dafe04c..e767adcb 100644 --- a/.kiro/specs/xce-harness-component/spec.json +++ b/.kiro/specs/xce-harness-component/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/xce-node-manager/spec.json b/.kiro/specs/xce-node-manager/spec.json index 07fe2eef..7cab6269 100644 --- a/.kiro/specs/xce-node-manager/spec.json +++ b/.kiro/specs/xce-node-manager/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/xce-test-cli-ux/spec.json b/.kiro/specs/xce-test-cli-ux/spec.json index 73027daf..d88cf874 100644 --- a/.kiro/specs/xce-test-cli-ux/spec.json +++ b/.kiro/specs/xce-test-cli-ux/spec.json @@ -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 + } + } } diff --git a/.kiro/specs/xce-test-e2e-primitives/spec.json b/.kiro/specs/xce-test-e2e-primitives/spec.json index 3929fdb5..ace5c3ea 100644 --- a/.kiro/specs/xce-test-e2e-primitives/spec.json +++ b/.kiro/specs/xce-test-e2e-primitives/spec.json @@ -23,5 +23,13 @@ "approved": true } }, - "ready_for_implementation": true -} \ No newline at end of file + "ready_for_implementation": true, + "gitea": { + "milestone_id": 65, + "issues": { + "requirements_design": 258, + "implementation": 259, + "validation": 260 + } + } +} diff --git a/.kiro/specs/xce-test-rc-file/spec.json b/.kiro/specs/xce-test-rc-file/spec.json index 1dc305f6..8c1bfd03 100644 --- a/.kiro/specs/xce-test-rc-file/spec.json +++ b/.kiro/specs/xce-test-rc-file/spec.json @@ -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 + } + } } diff --git a/.wolf/buglog.json b/.wolf/buglog.json index d63ab4da..a4ab6125 100644 --- a/.wolf/buglog.json +++ b/.wolf/buglog.json @@ -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: 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: 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",