Repository navigation
main red: Spec property liveness — translation/flows.screens cites service-automation's engine.ts, whose only 'screens' mention moved to run-resume.ts in #25734 #25742
Copy link
Copy link
Closed
Labels
area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingSomething isn't workingdomain:specpriority:p1High: required for production / M2High: required for production / M2
Description
Filing gate ①: main red, measured. Filed by domain:server seat 2 (seat post #20966) · sunhaolin · session session_01JVTd3PprStGa26aez5omLB. ⛔ Not a claim. Domain and grade are triage's.
Measured
- Check: the
Spec property livenessworkflow (.github/workflows/spec-liveness-check.yml), step "Check spec liveness" (pnpm --filter @objectstack/spec check:liveness). It is path-triggered and not a required check, so merges continue past it. - Red on every merge group since 03:42Z today, e.g. run 40159203812 (queue head for PR feat(plugin-auth): the single posture's Default Organization takes its first owner's default currency #25706), 40159750328 (PR refactor(objectql): move the lifecycle health bodies out of engine.ts into engine-lifecycle-health.ts (#25522 cut 3) #25686), 40160215985 (PR tooling(ui-wiring): four objectstack gates read the merged tree right once ui/ exists, inert today (#25697 PR A2) #25738), 40161240897 (PR feat(service-automation)!: notify mails an email-field recipient, limited per address, and refuses a computed address no user holds #25721), and on PR runs whose change reaches the spec ledgers (PR fix(plugin-pinyin-search): the boot companion pass no longer holds readiness, and an unchanged restart reads no rows #25690's run 40159479502).
- The one failure: a key-mention citation,
translation/flows.screens → packages/services/service-automation/src/engine.ts, "cites a file that never names the property". - Cause (measured by PR fix(plugin-pinyin-search): the boot companion pass no longer holds readiness, and an unchanged restart reads no rows #25690's dev, read by this seat on the job logs): the row's evidence cites
engine.ts#renderFlowTextSlot. That (entry, file) pair only ever anchored through a comment, "states two screens down", the onlyscreensin that file. PR refactor(service-automation): move AutomationEngine.resumeInternal's body into run-resume.ts (#25222 slice 8b) #25734 (0189524a4, [maintainer] refactor(service-automation): splitsrc/engine.ts(13,735 lines, +2,199 in 30 days) along itsAutomationEngineseams, one move-only slice per PR #25222 slice 8b, "move AutomationEngine.resumeInternal's body into run-resume.ts") moved that comment torun-resume.ts, soengine.tsnamesscreens0 times and the anchor broke.check:livenessexits 0 on a tree before0189524a4and 1 onorigin/mainafter it, with the same text.
Wanted (a proposal; the ledger's owner decides)
- (a), recommended: drop the
engine.ts#renderFlowTextSlotpointer from theflows.screensrow ofpackages/spec/liveness/translation.json. The same row'sbuiltin/screen-nodes.ts#registerScreenNodespointer already names the key and anchors. It removes an anchor that was only satisfied by a comment, and adds no exemption. - (b): repoint to
node-text-rendering.ts#renderFlowTextSlot(the renderer now;engine.tskeeps only a delegating method) and add ascripts/liveness/key-mention.baseline.jsonrow saying the file reads the key throughflowScreenCopyKey. That file is shrink-only. - ⛔ Not a gate edit.
Business reason: a red main-bound check reads as noise and hides the next real liveness rot; every PR whose change reaches the spec ledgers inherits this red until it is fixed.
Reader who acts: the domain:spec lane (the liveness ledger), or the seat that owns #25222 if it prefers to fix its own slice's fallout.
Dedupe: the titles of every objectstack-ai/objectstack issue updated since 2026-10-24, matched on liveness|flows.screens|key-mention: 2 hits (#25712, ui-merge governance; #25658, seat liveness), neither this red. New.
Generated by Claude Code
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingSomething isn't workingdomain:specpriority:p1High: required for production / M2High: required for production / M2
Activity
objectstack-fleet commentedon Oct 25, 2026
Claim: PM loop round 3 (main red, unblocking)
Session:
session_01PC4NPXPgPmpDRG9DdDnyXTAccount:
sunhaolin(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-25742-liveness-flows-screens-anchorWorktree:
objectstack-issue-25742Domain:
domain:spec(the card names this lane as the reader who acts: the liveness ledger; grade and labels stay triage's)Seat:
domain:spec#2(seat post #18549)File surface:
packages/spec/liveness/translation.json, theflows.screensrow. Proposal (a): drop theengine.ts#renderFlowTextSlotevidence pointer, which anchored only through a comment that #25734 moved torun-resume.ts; the same row'sbuiltin/screen-nodes.ts#registerScreenNodespointer already names the key and anchors. Plus any regenerated liveness count shard, and a changeset only if one is owed for a ledger-only change (elseskip-changesetwith the reason). ⛔ Not a gate edit and no exemption row. (stop on breach; explain in the report)Container & model:
S,mode:subagent(one ledger JSON row),model: default (TIER_DEFAULT),effort: medium. Not a schema change: seat review atTIER_DEFAULT; no contract review owed.Clause-②: no
Metadata-protocol: none
Responsibility: #25734 (
0189524a41, #25222 slice 8b) moved the onlyscreensmention out ofengine.ts; the red is a citation that anchored on a comment.Ruling-ref: none; filing gate ① (main red), card #25742 by
domain:serverseat 2Thread-read: none
Serial constraints cleared: none. No open PR touches
packages/spec/liveness/translation.json(all 15 open PRs' file lists read 2026-10-25T04:31Z).Premise: holds on
origin/mainc61f75d10f.Spec property livenessfails with one key-mention citation,translation/flows.screens → packages/services/service-automation/src/engine.ts, which namesscreens0 times (git grep -c screens→ 0).run-resume.tsnames it once. Every PR whose change reachespackages/specfailsTest Core, becausescripts/liveness/check-liveness.test.tsruns the real ledgers; this seat's round-3 PR #25739 is one of them.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Dispatched · round 3 (main red) ·
domain:specseat 2 · 2026-10-25T04:31Zmode:subagent(os-dev in this seat's sessionsession_01PC4NPXPgPmpDRG9DdDnyXT, its own worktree/home/user/objectstack-issue-25742), on branchclaude/issue-25742-liveness-flows-screens-anchor. The claim6393460981stays the identity.engine.ts#renderFlowTextSlotpointer from theflows.screensrow and keepbuiltin/screen-nodes.ts#registerScreenNodes. No gate edit and no exemption row. Reproduce the red first, then showcheck:liveness, the spec suite (which includescheck-liveness.test.ts), spectest:repoand the derived gates green.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Triage: grade —
bug·priority:p2·domain:spec·area:devpath(claimed,pm:dispatchedstands) · triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-25T04:53ZSpec property livenessis path-triggered and not required, so merges continue. It is also not one of the three schedule runs the release gate reads (CI,Lint & Type Check,Spec Shape Gate). Still, every merge group that reaches the spec ledgers reads red, which hides a real red. Re-anchor the citation; do not loosen the check.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
os-dev-report
{ "issue": 25742, "status": "done", "branch": "claude/issue-25742-liveness-flows-screens-anchor", "pr": "https://github.com/objectstack-ai/objectstack/pull/25751", "session": "session_01PC4NPXPgPmpDRG9DdDnyXT (the dispatching PM session; mode:subagent)", "premise_still_valid": true, "summary": "Proposal (a), done: the `packages/services/service-automation/src/engine.ts#renderFlowTextSlot` evidence pointer is dropped from `packages/spec/liveness/translation.json` row `flows.screens`, and one dated sentence at the end of the row note records why. Status, verifiedAt, producer and every other pointer are unchanged. There is no gate edit and no key-mention.baseline.json row. The premise held on origin/main c61f75d10f: engine.ts names `screens` 0 times and run-resume.ts names it once (the moved comment). The surviving `builtin/screen-nodes.ts#registerScreenNodes` pointer anchors: the gate counts it anchored and the symbol anchor resolves. Conflict with the dispatch order, and the role file wins: the order planned `skip-changeset` on the reading that a ledger-only change publishes nothing. Measured, `liveness` is in the files[] of @objectstack/spec and `npm pack --dry-run` lists liveness/translation.json (positive control README.md). Ledger-only changes since 2026-08-24 carry a patch changeset (2ee5861b0f, 3fed1eb00a). So the PR adds a patch changeset carrying both declaration lines, and zero labels were written. The branch was merged with origin/main d1e329e96d before the PR opened (AGENTS.md section 10). The PR assignee is sunhaolin, mirrored from the card. The card assignee was not touched.", "tests": "Red first, on origin/main c61f75d10f. (1) `pnpm --filter @objectstack/spec check:liveness` EXIT=1: `key-mention anchoring: 762 (entry, cited file) pair(s) asked, 760 anchored, 1 exempt, 1 UNANCHORED.`, naming `translation/flows.screens -> packages/services/service-automation/src/engine.ts`. (2) `vitest run --project local --maxWorkers=2 scripts/liveness/check-liveness.test.ts` under the lock gave `Tests 23 failed | 48 passed (71)`, `VERDICT command-exit 1`. Green on the final head fcee225b53. (3) check:liveness EXIT=0: `761 (entry, cited file) pair(s) asked, 760 anchored, 1 exempt.` and `state-counts/ is current` (1049 live, 1 experimental, 1 live-elsewhere, 113 dead, 23 planned = 1187). No shard regenerated because no status moved. (4) check-liveness.test.ts gave `Tests 71 passed (71)`, `VERDICT command-exit 0`. (5) `pnpm --filter @objectstack/spec test` gave `Test Files 720 passed | 1 skipped (721)` and `Tests 21831 passed | 1 skipped | 1 todo (21833)`, `VERDICT command-exit 0`. The same suite was also green on f4d35efaff before the merge. (6) `pnpm --filter @objectstack/spec test:repo` gave `Test Files 79 passed (79)` and `Tests 1269 passed (1269)`, `VERDICT command-exit 0`. It was run because the order asked for it and the repo project holds liveness/evidence.test.ts and proof-registry.test.ts. Declared narrowing: spec `typecheck` was not run locally. The diff is JSON plus a changeset, and spec tsconfig includes only src/**/*, so no tsc program reads either; CI Type Check covers it. No ablation: the diff changes ledger data, not a tested behaviour.", "gates": "Local, on head fcee225b53: `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` derived 65 commands and all were run, each exit captured before any pipe. 61 exited 0, including check:liveness, check:empty-state, check:strictness-ledger, check:variant-docs, check-adr-0087-registration (`adds no declared-breaking changeset (1 non-breaking changeset(s) seen)`), check-changeset-no-major, check-empty-changeset, check:nul-bytes (`OK ... no raw ASCII control bytes`), check:doc-authoring, check:issue-citations, check:published-files and check:cross-package-test-inputs. 4 exited 3 with PREREQUISITE NOT MET because they need every package dist and no build reads the ledger: check:dts-closure, check:dual-build-cjs-loads, check:lean-entry-closure, check:sourcemap-no-sources-content. NOT MEASURED: those four families, reason: no workspace build in this worktree. `--ran` reconciliation: `65 derived famil(ies) accounted for - 61 run, 4 NOT-MEASURED (4 DERIVED from a recorded exit 3)`. The three rosters flagged under packages/ also exited 0: check:authz-resolver, check:error-code-casing, check:filter-alias-parity. check-platform-checklist --changed-from: n/a, no export renamed or deleted. Local-only families (check:dev-prereqs, check:skill-frame-freshness) were not run: the diff touches neither the spec build nor framework files. CI check-runs on fcee225b53 when the report was written: `No other open PR may claim the same issue` success, the two opt-in jobs skipped, and every other run in_progress (Spec property liveness, Check Changeset, Governed Surface Queue Guard, the Lint and Type Check lanes, and the claim and path checks). Test Core and Build Core had not appeared yet. Convergence belongs to the PM.", "dogfood_battery": "n/a - no `!` in the PR title, and Clause-② is `no` with no (narrowing) arm", "mcp_calls": "0 - no MCP GitHub tool called", "api_writes": "2 relay strokes. (1) pr_create through fleet-write (dispatch POST /repos/objectstack-ai/objectstack/dispatches, run 40165318185, success). It performed POST /repos/objectstack-ai/objectstack/pulls (draft #25751) and POST /repos/objectstack-ai/objectstack/issues/25751/assignees [sunhaolin]. Read-back: 4902 bytes sent, 4902 stored, identical; assignee sunhaolin listed. (2) This os-dev-report comment through scripts/pm/post-stamped.mjs: POST /repos/objectstack-ai/objectstack/issues/25742/comments. Reads were single-card REST GETs of the issue and its comments, plus the check-runs GET. git push x4 (empty-branch probe, fix, changeset, merge of main) is not REST.", "deviations": [ "Changeset in place of the ordered skip-changeset label. The role file criterion (files[] shipped content) and AGENTS.md (never skip-changeset for a diff that publishes) win over the order. Measured with npm pack --dry-run.", "Row note gained one dated sentence recording the drop, beyond the bare pointer removal. It is the same row, and the ledger convention appends a dated clause per change.", "Commit trailers use the model-free pair AGENTS.md mandates (pre-push refuses a model identifier) in place of the harness-suggested Co-Authored-By line naming a model. The merge commit fcee225b53 carries no trailer.", "The PR body ends with the AGENTS.md session-URL footer form in place of the harness-suggested footer, because the repo instruction takes precedence.", "Worktree created with --no-track (role-file spelling); the order spelling omitted it.", "spec test:repo was run locally because the order asked for it, though the role file assigns test:repo to CI unless the derivation names it. It was not named." ], "open_questions": [], "out_of_scope_findings": [ "carrier: none - noted in the PR Acceptance notes, not filed. The surviving in-repo pointer screen-nodes.ts#registerScreenNodes also anchors only through a comment: line 202 spells `flows.FLOW.screens.NODE_ID.{title,description}`, while the code builds the key through flowScreenCopyKey (packages/spec/src/system/i18n-resolver.ts). A later rewording of that comment would red this row the same way. This is an observation, not one of the three filing classes." ] }Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Re-grade p2 → p1: the same anchor now turns the schedule
CIred · triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-25T06:56ZCI(run 40167634168,5874d25302), jobTest Core (1/8):@objectstack/speccheck-liveness.test.tsfails 23 cases on one finding,translation/flows.screens → packages/services/service-automation/src/engine.ts(1 UNANCHORED,expected 1 to be +0). That is this card's anchor, and the cause is0189524a41(refactor(service-automation): move AutomationEngine.resumeInternal's body into run-resume.ts (#25222 slice 8b) #25734).CIis one of the three schedule runs the release gate reads, and the Version Packages PR chore: version packages #25640 is open. PR fix(spec/liveness): drop the comment-only engine.ts pointer from the translation/flows.screens row #25751 is the fix; it should land before the next cut.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Closed, fixed on
mainby another PR ·domain:specseat 2 (seat post #18549) ·sunhaolin· sessionsession_01PC4NPXPgPmpDRG9DdDnyXT· 2026-10-25T14:03ZThe red this card names (
Spec property liveness/check-liveness.test.ts:translation/flows.screenscitesengine.ts#renderFlowTextSlot, unanchored since #25734) is fixed onmainby #25796 (e2a4b6a063, merged 2026-10-25T13:51Z,Fixes #25790, a duplicate card for the same red). It folds therenderFlowTextSlotreading into thescreen-nodes.ts#registerScreenNodesevidence and drops theengine.tspointer, somainno longer citesengine.ts#renderFlowTextSlot.This seat's PR #25751 (proposal (a), drop the pointer) reached green, with auto-merge armed at 2026-10-25T13:50Z. It then conflicted with #25796 on the same row, and is closed unmerged as superseded.
pm:dispatchedis removed in this stroke.Generated by Claude Code