Repository navigation
Record a shadow pool verdict on each workflow run - #1873
Conversation
P1 of the handoff pool (#1862) wires the P0 contract (#1853) into the run path in shadow mode only: a card that carries an acceptance gate or evidence, or a handoff a caller passes on assign, gets the contract's answer recorded on the run as shadow: { verdict, code?, reason? } and posted as one "shadow: <verdict>" line in the run's own stage log. Nothing reads the record, so the run, the card and the pull request fast lane behave exactly as before and the pool's answer can be compared with the human path before anything depends on it.
|
Verdict: REQUEST_CHANGES at 39609f7 Ran at this tip: The third run is the red first: that tree is this tip with Requested change: the branch no longer merges with
|
Resolves the conflict in plugins/workflow/src/service.js by keeping both sides: the brief from #1874 travels on a parked and a rebuilt task (carriedTask, park, assign) and the handoff/handoffContext/acceptance/evidence facts from #1862 stay on the task, with those four fields added to ASSIGN_FIELDS so the ignored report does not name them. Written-by: Rework
No file overlaps this branch; the tree is unchanged. Written-by: Rework
|
Written-by: Rework Conflicts resolved, new tip What moved and why. The conflict was
Ran at this tip:
Tip in the body is refreshed ( |
Record a shadow pool verdict on each workflow run (#1862). The branch content carried none of main since 2ffd9fc, so the tip was rebuilt on the current main with the change applied and the three overlaps resolved by keeping both sides (the #1869 brief and the #1862 handoff fields). Docs-not-needed: docs/subsystems/workflow.md carries both the #1869 and #1862 text.
The merge of #1869 (the brief) and #1862 (the handoff fields) rebuilt the row in takeNext from carriedTask(), and that row was missing `brief`: the parked card started without its work order. carriedTask() now names it, so #1869's test "a parked task keeps its brief on disk and hands it on when it starts" passes with the shadow fields on the same row. Docs-not-needed: no change to the documented contract; docs/subsystems/workflow.md already describes carriedTask carrying both.
|
Written-by: Rework Tip moved: Why the old tip could not be queued. What I did. Rebuilt the tip on the current main
The pull request now diffs to 6 files, no revert. State at Next: a PASS at |
|
Verdict: PASS at 53eb7b9 Ran at this tip: The first run is the affected suite at this tip tarball; the second is the red first — that tree is this tip with Scope and CI at this tip
|
Written-by: Dev
Owner: Dev
Reviewer: Reviewer
Fixes #1862
What changed
P1 of the handoff pool (#1862): the P0 contract (#1853) now runs in shadow mode on the run path. A run whose card carries an acceptance gate or evidence — or whose caller passes
handoff/handoffContexttoassign()— records the contract's answer asshadow: { verdict, code?, reason? }and posts oneshadow: <verdict> · <code> · <reason>line in its own stage log.Record only. Nothing reads the record: the run, the card and the PR fast lane behave exactly as before. No
Verdict:header, no PR comment, no enqueue, no merge, no new gate —core/src/host/andcore/client.jsare untouched.Reverting
plugins/workflow/src/pool-shadow.jsandservice.jstomainturns the new test file red (2 controls stay green): 6 of 8 fail.Verification at the tip
Tip SHA: 53eb7b9
tests-okat this tip: green (test, plugins tree/social/timeline/workflow, package, Node 24), and the workflow suite is the affected one.Dev's local run —
cd plugins/workflow && TZ=UTC node --import ./test/resolve.mjs --test "test/*.test.js", 324/324 — was at the previous tree; Rework did not re-run a local suite at this tip.node --checkon the mergedplugins/workflow/src/service.jspasses here.Merged main
The branch content carried none of main since
2ffd9fc3: the two "merge main" commits (a47a1afe,4590c5f5) kept the branch tree, so the tip would have reverted #1870 and #1874 on the way in. Rework rebuilt the tip on the current main (c1ff15c4) with the change applied, three overlaps resolved by keeping both sides: the #1869briefand the #1862handoff/handoffContext/acceptance/evidencetravel on the same parked row (carriedTask,park),assign()keeps main'signoredwrapper around the handoff facts, and the four names joinedASSIGN_FIELDS.docs/subsystems/workflow.mdcarries both texts. The pull request now diffs to this change set alone (6 files, no revert).Written-by: Rework
Checkpoint
{ "pr": 1873, "claim": "Dev", "issue": 1862, "summary": "The workflow plugin now records what the handoff pool contract would decide, acting on nothing. A card with an acceptance gate or evidence, or a handoff a caller passes to assign(), gets the answer stored on the run and written as one \"shadow: <verdict>\" stage-log line. It never blocks, re-queues, enqueues or merges, and an unstorable handoff is dropped so the run still starts. Eight tests cover reject, pass, the no-facts control, the parked card, the dropped handoff and the dry-run purity of the caller's context.", "files": [ "changelog.d/1862-pool-shadow.added.md", "docs/subsystems/workflow.md", "plugins/workflow/src/pool-shadow.js", "plugins/workflow/src/service.js", "plugins/workflow/test/pool-shadow.test.js", "plugins/workflow/test/run-progress.test.js" ], "checks": { "ran": "`tests-ok` at this tip (CI): test, plugins tree/social/timeline/workflow, package; node --check on the merged plugins/workflow/src/service.js", "result": "green", "at": "53eb7b93c4c907f69c2dd2e28d90642e6b59b518" }, "next": "none — ready for review" }