The cost counter was incremented by a watcher that awaited the run task, so it
lagged the status flip: the run read as done while /api/config still counted
zero completed runs. The increment now happens in the same step as the
transition to DONE, so any client that observes the run as done also observes
the counter.
Refs researchx#28
The gate file has never parsed: the two job names were plain scalars
containing ': ' (YAML 1.2 plain-scalar rule - a colon followed by a space
ends the scalar and starts a mapping, so the file fails to load). Gitea
cannot build a run from a file it cannot parse, and the tell is a
dispatch POST answered HTTP 500 with an empty body.
Measured at this seat, own PAT, own repo: dispatch on main -> HTTP 500,
dispatch on this branch -> HTTP 500, 0 run records, 0 queued jobs.
Quoting the two names is the whole change; gates, labels, toolchain and
the trigger shape (workflow_dispatch: {} -> workflow_dispatch:) are
unchanged. Evidence and the follow-up dispatch live on researchx#24.
---ci---
phase: 5
milestone: v0.2
status: complete
escalation:
type: deploy
hook: deploy
resolution: auto
directive: milestone release publication post-approval
message: >-
The approved milestone release v0.2.5 published. Gitea release
retitled to note the recorded approval (decision 4721c2a) and
G-009 ratification. The deployed container at
https://research.coreci.dev already serves the release content
(the v0.2.5-uat staging was built from the same milestone HEAD
as the merged release) - no redeploy needed. DEPLOY-RECORD
ledger row added; v0.2 milestone cycle closed.
requirements:
covered: []
partial: []
---/ci---
---ci---
phase: 5
milestone: v0.2
status: complete
message: >-
Milestone v0.2-mvp COMPLETE and APPROVED. Checkpoint cleared per
the run workflow: the next /ci-run starts milestone v0.3 at
phase 0 (pre-execution: specify, clarify, research, plan,
grill, mvp/ux check), which config.json now points at (tag line
v0.3.x). v0.3 scope is pending owner direction: live-bound
library/settings/suggestions/refine surfaces (G-009 ratified
scope), backend hosting for the LXC deployment, and the remaining
6 methodologies from the locked catalog.
requirements:
covered: [REQ-01, REQ-02, REQ-03, REQ-04, REQ-05, REQ-06, REQ-07, REQ-08, REQ-09, REQ-10, REQ-11, REQ-12, REQ-13, REQ-14, REQ-15, REQ-16, REQ-17, REQ-18, REQ-19, REQ-20, REQ-21, REQ-22, REQ-23, REQ-24, REQ-25, REQ-26, REQ-31, REQ-32, REQ-33, REQ-34]
partial: []
---/ci---
Milestone branch will be deleted (local + remote); tags
v0.2.0-v0.2.5 and the main merge (b11b202) preserve the full
history. v0.3 unblocked.
---ci---
phase: 8
milestone: v0.1
status: complete
message: >-
Milestone v0.1-prototype COMPLETE and APPROVED. Checkpoint cleared
per the run workflow: the next /ci-run starts milestone v0.2-mvp
at phase 0 (pre-execution: specify, clarify, research, plan),
which config.json now points at (tag line v0.2.x).
requirements:
covered: [REQ-52, REQ-53, REQ-54, REQ-55, REQ-56, REQ-57, REQ-58, REQ-59, REQ-60, REQ-61, REQ-62, REQ-63, REQ-64, REQ-65, REQ-66, REQ-67, REQ-68]
partial: []
---/ci---
Milestone branch deleted (local + remote); tags v0.1.0-v0.1.8 and the
main merge (d6ddcfe) preserve the full history. v0.2-mvp unblocked.
---ci---
phase: 8
milestone: v0.1
status: complete
escalation:
type: deploy
hook: deploy
resolution: auto
directive: milestone release publication post-approval
message: >-
The approved milestone release v0.1.8 deployed to the LXC host
(plain tag, not -uat): gates green at the tagged tree, container
swapped, health check passed. Gitea release renamed to note the
recorded approval. DEPLOY-RECORD ledger updated.
requirements:
covered: [REQ-62]
partial: []
---/ci---
Fifth deploy row: v0.1.8 (release) -> 93a7b57 at the tag. The
container at http://10.0.0.114:3000 now serves the approved
prototype.
---ci---
phase: 8
milestone: v0.1
status: complete
escalation:
type: prototype_approval
hook: prototype_approval
resolution: approved
decided_by: owner
decided_at: 2026-09-27
message: >-
The owner has recorded approval of the extended prototype
(v0.1.8): the 5-screen click-path inside the app shell
(sidebar + top bar + avatar), the folder-structured research
library with cross-report connections, the settings surface,
the open-question suggestions, and the refine dialogue —
reviewed live on the staged UAT build and in the releases.
All milestone requirements (REQ-52..61, REQ-63..68) are
approved. This decision unblocks: milestone merge to main,
v0.1.8 publication as the milestone release, and the v0.2
MVP milestone.
requirements:
covered: [REQ-52, REQ-53, REQ-54, REQ-55, REQ-56, REQ-57, REQ-58, REQ-59, REQ-60, REQ-61, REQ-62, REQ-63, REQ-64, REQ-65, REQ-66, REQ-67, REQ-68]
partial: []
---/ci---
Approved via the owner's recorded /ci-run directive ('approved').
Milestone v0.1-prototype now completes: merge to main, milestone
branch deletion (tags preserve history), v0.2 unblocked.
Squash-merge of phase/08-final-review-approval-ship into milestone/v0.1-prototype. Review PASS-WITH-FIXES (double-compose + drawer-keyboard P1s, 90/90). Audit PASS-WITH-NOTES (all applied). Tag v0.1.8 = extended-prototype release candidate. Milestone merge to main HALTS at the REQ-62 owner approval gate.
---ci---
phase: 6
milestone: v0.1
status: approval_pending
escalation:
type: deploy
hook: deploy
resolution: auto
directive: push updates to lxc container
message: >-
Owner-directed UAT deploy of the extended prototype to the LXC
Docker host via the codified release system. Gates re-run green
(typecheck/lint/75 tests/build) at deploy time; image
researchx:v0.1.6-uat swapped in; health check + route smoke
passed. Approval gate UNCHANGED - the REQ-62 owner decision on
the milestone merge to main is still pending.
requirements:
covered: [REQ-52, REQ-53, REQ-54, REQ-55, REQ-56, REQ-57, REQ-58, REQ-59, REQ-60, REQ-61, REQ-63, REQ-64, REQ-65, REQ-66]
partial: [REQ-62]
---/ci---
DEPLOY-RECORD.md (new): ledger of owner-directed UAT stagings.
v0.1.6-uat -> 600b49c, healthy at http://10.0.0.114:3000 with the
app shell, library, and settings verified in served HTML. Checkpoint
remains approval_pending.
---ci---
phase: 4
milestone: v0.1
status: execute
persona: ci-lead-developer
task: T-4.2
requirements:
covered: [REQ-52]
partial: []
---/ci---
UAT variant now resolves the milestone branch by milestone number
(v0.1) not full tag version (v0.1.4), matching branch-strategy
labeling. DEPLOY_KEY (path in .env.secrets) preferred over passwords —
survives sshd PermitRootLogin prohibit-password (Ubuntu 24.04 default
that rejects root password auth; observed on the LXC host). Deployed
v0.1.4-uat for manual UAT: http://10.0.0.114:3000.
---ci---
phase: 4
milestone: v0.1
status: complete
escalation:
type: prototype_approval
hook: prototype_approval
resolution: pending_owner_decision
message: >-
Prototype complete and presented for approval. On recorded approval:
milestone merge to main, milestone branches deleted, v0.2 unblocked.
On rejection: feedback becomes binding decisions for a fix cycle.
requirements:
covered: [REQ-52, REQ-53, REQ-54, REQ-55, REQ-56, REQ-57, REQ-58, REQ-59, REQ-60, REQ-61]
partial: [REQ-62]
---/ci---
Ship record: PR #4 squash-merged phase/04-final-review-approval-ship →
milestone/v0.1-prototype (1d97788), tag v0.1.4, phase branch deleted
(local+remote), Gitea release v0.1.4 created (HTTP 201) with full
milestone summary. Review: PASS-WITH-FIXES, 5 P0s fixed in-phase.
Audit: PASS. Per REQ-62 and the prototype_approval escalation hook,
the milestone merge to main does NOT proceed autonomously — the
pipeline halts here for the recorded owner decision.
Final phase: full-milestone review PASS-WITH-FIXES (5 P0s fixed with tests), audit PASS, PLAN/CHECKPOINT advance. REQ-62 owner approval gate: milestone merge to main + v0.1.4 publication halt for recorded owner approval. Gates 42/42 green.