Repository navigation
Description
Question
Dispatch run 3, read both legs against predictions sealed beforehand, and write the answer up. Nothing here is a decision — it is the run this map exists for, and it is the last ticket to move.
Blocked by, and one edge GitHub cannot express
Native blocked by: #430, #438 (closed 2026-09-03, edge kept as record).
#439 no longer blocks this ticket (edge removed 2026-09-04 by the orchestrator on the maintainer's ruling, "ok, espera a run 3"). Its grilling changed the fix from a readability change to three behaviour changes: evidence writes always, a red build opens no pull request, /tickets guarantees a parent ticket. All three are active under the Consumer's gates.build: afk, so it is a second variable under #456's class rule and joins run 4's set. Run 3's product is discarded by design; its measurement does not depend on #439.
Also blocked by ADO 43028 — the sixth mechanism check, which walks component directories for a story the vitest run renders. GitHub and Azure DevOps cannot be linked, so this edge is prose and vanishes if nobody reads this paragraph. It is New, its predecessor 43020 is Resolved, and it is dispatchable now.
The steps, in order, and why each is here
- Land the blockers. The three GitHub tickets above and ADO 43028.
- Re-park run 2's isolation directories.
~/Desktop/run2-parked/holdsdxp-memoryand threeremember*directories, restored live on 2026-09-01. Run 2 measured with them absent; a run 3 that can read them is measuring a different chain. - Delete run 2's artefacts, on the run's own branch, at dispatch.
developcarries run 2's PRD,issues.jsonand three design contracts. Run 3 hits the same re-entry trap and needs the same deletion, exactly as run 2's two setup commits did. Doing this early destroys the baseline still being compared against, which is why it is deliberately not a work item of its own. - Seal the predictions, before dispatch, off the tracker. They must cover both legs: on the specs leg, does the grilling fire, do the halts halt, is there a
Confirmationssection the gate would refuse without; on the build leg, do the six checks reach the implementer. - Dispatch, then read both legs against the sealed predictions.
- Write the answer up in the findings register, naming which mechanisms fired and which did not.
Preconditions already met
- Precondition: the story organisation is decided. ADR-0006 on Consumer
develop—COMPONENTS,ICONS,DEMOS, all plural. - Precondition: the Consumer runs the current plugin. Verified 2026-09-03: all four Boxes in
DXP-DesignSystem/.archon/workflows/are byte-identical to plugindevelopapart from the provenance header/setupstamps, and fix(unic-archon-dlc): /specs skips the grilling its config requires and reports halts that never fired #441's criterion 9 is present in the Consumer's copy.
The confound to state rather than discover
The mechanism tickets introduced a node vitest project neither earlier run had. So the testing-seam question gets a different answer this time, and part of any run-2-versus-run-3 diff is new infrastructure rather than new knowledge. Say so in the write-up; do not let it be found afterwards.
Acceptance criteria
- The predictions were sealed before dispatch and are quotable afterwards.
- Both legs are read against them, and the score says which predictions held.
- The findings register names which mechanisms fired, which did not, and which could not be judged.
- The new-infrastructure confound above appears in the write-up.
- The baseline run 3 was compared against is named as a commit, not as "develop was empty".
Azure DevOps
43033 — 13 points, Feature 42975, iteration 2026_08 - R 3.6.
Activity
orioltf commentedon Sep 5, 2026
A third change reached run 3's baseline, and nobody chose it for this run
Reported by the
unic archon dlc reconfiguresession at 17:36 on 2026-09-05; measured here before filing.estimationsin.archon/unic-dlc.config.yamlwas'off'from83e8b67(2026-08-17) through run 2. It is'both'ondeveloptoday. The change landed at1995549(2026-09-05 16:17) and merged inside PR 5853, andit is the only non-default key in that file with no comment saying why.
It was a maintainer edit already in the working tree when
/setup reconfigureran, so it rode in with theinstall commit. The pre-PR review flagged it and nothing acted on it.
What it does, and what it costs
'both'turns on the provisional estimation wave in/specsand the definitive wave in/tickets. It touchesthe two planning legs. It does not touch the build leg or any of the six checks.
So it is not a confound for the treatment. This map's rule is that a second change is a confound only when
its effect cannot be told apart from the first's, and estimation waves are separately observable from whether a
check fires.
It is a confound for two of the five numbers run 2 published, because run 2 measured them with
estimationsoff:
/specsaloneThe ruling this needs, before dispatch
Recommended: set it back to
'off'for run 3, in the same commit as the other pre-run steps. Run 3 alreadycarries two changes chosen for it — the mechanisms and #441's
/specswork. A third that nobody chose for this run buys the question nothing and costs two comparisons.Turn estimations on afterwards, as its own observation.
The case against, stated so the choice is real:
'both'may be the production setting the maintainer wants,and a run under observation is the cheapest place to watch estimation waves behave. If that is the call, keep
'both'and this comment becomes the record that says the cost and halt rows do not compare to run 2.Either way the key gets a comment saying why, like every other non-default key in that file.
Second item from the same report, smaller
PR 5853's description accounts for four changed files. Nine merged: the config, four Box YAMLs,
.gitignore,README.md,apps/storybook-react/vitest.config.tsanddocs/agents/unic-archon-dlc.md. The description nevermentions the vitest config or the README section, so the merge commit's PR is an incomplete account of what
landed on the Consumer's
develop. Fixable after the fact withaz repos pr update; the maintainer's callwhether it is worth it.
orioltf commentedon Sep 5, 2026
Ruled:
estimationsstays'both'for run 3Maintainer's call, 2026-09-05 17:46, against the recommendation in the comment above. Recorded here because the
comment above is now the record of what that choice costs, and because nothing else in either repository says it.
What this settles. Run 3 dispatches with
estimations: 'both'. The provisional wave in/specsand thedefinitive wave in
/ticketsboth run, and run 3 is the first observation of either.What it costs, and this is the whole reason to write it down. Run 2 measured with
estimations: 'off'. Two ofits five published numbers therefore stop comparing to run 3's:
run 2 never paid.
/specsalone. An estimation wave can halt. A halt count from run 3 iscounting a different command.
So when run 3 is read against the seal, those two rows are marked not-comparable rather than scored. The three
that still compare are dedup, reconcile and praise. Whoever writes the seal carries this sentence into it.
Third comparison already lost, for a different reason (from #463):
lint,formatandcoveragein the Consumer cannot report a failure, so any prediction sealed about those threeis unfalsifiable. Do not score them either.
testandcheck-typesare the two that mean something.The one thing still outstanding from this
The key needs a comment saying why it is
'both', like every other non-default key in.archon/unic-dlc.config.yaml. Text to use verbatim, so nobody re-derives it:It lands on the Consumer's
develop, not on run 3's branch — a run branch gets abandoned, and both previous oneswere. It is a two-line diff and needs a branch and a PR like everything else there, so it rides the next Consumer
PR that is already going to
developrather than earning one of its own.orioltf commentedon Sep 5, 2026
A mechanism can read green by construction too, and run 3 cannot currently tell that apart from a mechanism working
From WI 43028's pr-review iteration 1, 2026-09-05 18:01. Verified here at
5a8ec55onfeature/43028_component-story-check, not taken from the report.What happened
43028's check shipped with 12 passing tests, four of which fire the check on fixtures designed to fail. The Box's
one important finding was a hole none of them reached:
That clause hit the skip written for
export {}, so the check returned[]directories and[]gaps and the runwent green. Fixed in
5a8ec55by turning the skip on the name count rather than on the specifier:export {}still skips, a named export with no module now throws.
The barrel shape that triggers it is the one
developgets the day the first component lands, if whoever addsit writes a local re-export. So the check would have been silently inert exactly when it first mattered.
Why this is a measurement problem for run 3 and not just a bug
The six checks are run 3's treatment. If a check can pass vacuously, then in the run's output "the mechanism
fired and found nothing" and "the mechanism was inert" look identical. Every conclusion run 3 draws about whether
mechanisms carry knowledge rests on telling those two apart.
It is the third instance of one shape measured today, and the three together are the argument:
lint,format,coveragecannot report a failure (#463)sdlc_needs.installis a two-command chain and the summary reports oneok, so a fetched chromium and a warm-cache no-op are the same line[]on the barrel shape it will actually meetThe first two were already known when run 3 was planned. The third was not, and it is the one that touches the
treatment.
What this asks the seal to carry
Every check gets a positive control on the run's own output, and the control is run before the result is read.
Not a fixture — fixtures are what missed this. The technique is the one
DS-43028used to prove its own caller:A check that cannot be made to fail against the run's actual tree scores as inert, never as a pass. Inert is a
finding about the mechanism, and it is a different finding from "the implementer produced no defect" — which is the
whole thing run 3 exists to distinguish.
This is an addendum to the seal-shape question, still unanswered. It does not depend on which shape is chosen:
whichever way the seal is scored, an unscored check is worth less than a check proved able to fail.
Not proposed as a ticket
The chained-
installline is a Consumer authoring choice (one key holding two commands) as much as a Box reportingchoice, and it costs nothing today. Recorded here so run 3 does not read
ran the declared install command: okasevidence about chromium. No issue filed.
orioltf commentedon Sep 5, 2026
Correction: the positive control is per-check, not one technique for all six
The comment above named one
technique — add a failing export to
packages/ui-react/src/index.ts, watch the check fail naming the rightdirectory, revert — and wrote it as though it proved any of the six checks. It does not. Caught by
DS-43028on 2026-09-05 19:38.
43020 is the counter-example. Its caller reads stylesheets, not the barrel:
uiReactStyleSheets()throws onempty rather than returning
[], so it already reads real files and passes for want of a@themeblock. A barrelappend does nothing to it, and would have produced a green that I would have scored as a proved control.
I generalised from the one check in front of me to a rule about all six. That is the error this map has a memory
for — a bar written from the instances that prompted it detects only those instances.
The rule, restated
Each check gets its own positive control, written against the input that check actually reads, and a check with
no working control scores inert. The technique is per-check; only the obligation is universal. Whoever writes the
seal names the control for each of the six and runs it. Two are already known:
packages/ui-react/src/index.tsuiReactStyleSheets()(throws on empty)@themescalecn()does not knowFour of the six have no control written yet. That is work before dispatch, not after.
The second finding underneath it, which is the interesting one
DS-43028over-claimed inside the very paragraph it added to stop over-claims:checks/README.md's new text said"every real-tree call here passes on an empty set", which is false of 43020 for the reason above. Fixed in
12aa37d.So both of us made the same move within an hour, in prose whose subject was that move. A statement about a set of
mechanisms is a claim about each member, and it needs checking against each member. Reading it as one sentence is
what lets it through.
orioltf commentedon Sep 6, 2026
Last GitHub-and-ADO precondition closed: 43028 merged
PR 5854 merged 2026-09-06 as
f77ee51onDXP-DesignSystem'sdevelop. Verified here:12aa37dis an ancestor oforigin/develop,checks/component-stories.tsand its test are present ondevelop, and WI 43028 isResolved.Six checks now ship — ADO 43020–43024 and 43028.
The register's F1 row and F4's count are updated in
PR #466, which also adds § F5 for what building the check
taught. Nothing on this ticket waits on that PR.
What is actually left before run 3 dispatches
The ticket's four non-ticket steps are unchanged. Two things sit in front of them and neither is on the list yet.
1. Four positive controls are owed
Per the correction above, each
check needs a control written against the input that check actually reads, and a check with no working control
scores inert rather than pass. Two are settled, four are not:
gapReasonrewrite — append a failing export to the barrel, watch it fail naming the directory, revert@themescalecn()does not know. Not writtenThis is pre-dispatch work, and it is small — each is a one-line edit, a run, and a revert. It is not a ticket unless
the maintainer wants one; it is a step in whoever prepares the run.
2. The seal's shape is still undecided, and it is now the only open design question on this ticket
#456 § Not yet specified says who scores, against what, and
where the score lives is unsettled. The proposal on the table, unanswered since 2026-09-05 17:45:
check guards, and whether the check fires. The interesting cell is defect present, check silent.
run 2 already showed a self-report is the author grading their own homework.
tracker in
~/Desktop/run3-sealed-predictions-<date>.mduntil the run ends.What the seal must mark not-comparable rather than score, whichever shape is chosen: run 2's cost figures and its
four-halt count (
estimationsmovedoff→bothbetween the runs), and any prediction aboutlint,formatorcoverage(those three commands cannot report a failure). Dedup, reconcile and praise still compare.Not blocking
#465 —
/pr-reviewlosing a whole review and exiting 0 —is p1 but does not gate dispatch. It gates reading:
/pr-reviewis one of the mechanisms run 3 is read through,and it failed the inert-versus-pass bar on its first observation. Run 3's report says so rather than treating a green
/pr-reviewrun as a clean review.orioltf commentedon Sep 15, 2026
Ruled: the seal takes the proposed shape
The maintainer approved it on 2026-09-15 17:30 CEST, unchanged from
the proposal, which was first put
to him on 2026-09-05 17:45. This closes the last open design question on this ticket.
The shape, restated so nothing has to be re-derived at dispatch
that check guards, and whether the check fires. The cell that carries the information is defect present, check
silent.
the tracker in
~/Desktop/run3-sealed-predictions-<date>.mduntil the run ends.Marked not-comparable, never scored
Two because
estimationsmoved'off'to'both'between the runs: run 2's cost figures, and its four-halt count.Three because the command cannot report a failure in the Consumer:
lint,format,coverage. Dedup, reconcileand praise still compare.
testandcheck-typesare the two commands that mean something.What this does not close
The four positive controls for 43021 to 43024 are still owed, and they are owed whichever shape won. Each is a
one-line edit, a run, and a revert, written against the input that check actually reads. A check with no working
control scores inert, never pass, because otherwise "the mechanism fired and found nothing" and "the mechanism
was dead" read the same. 43020 is not a barrel append: it needs a
@themescale thatcn()does not know.Run 3 dispatches once those four controls exist and the seal is written. No ticket blocks it.
orioltf commentedon Sep 15, 2026
Register precondition cleared: PR #466 merged
Merged 2026-09-15 17:47 UTC as
ee4c892. Plugindevelopmovesf3c5118→ee4c892.Verified on
developrather than on the PR: F1's sixth-check row reads SHIPPED and names PR 5854 /f77ee51,§ F5 exists, and the not-comparable list sits in the same file. The seal now has a committed source to read that
list from, which was the reason this PR gated anything.
What is left before run 3 dispatches
One item, and it is not a ticket: the four positive controls for 43021 to 43024. Each is a one-line edit against
the input that check actually reads, a run, and a revert. A check with no working control scores inert, never pass.
43020 already has its control written and is not a barrel append — it needs a
@themescale thatcn()does notknow. 43028's was written and re-run after the
gapReasonrewrite.Re-measured today, against Azure DevOps and both remotes
origin/develop=f77ee51, fetched from the remote. Nothing has landed since 2026-09-06.Active, 13 points. It is no longer inReady for Test; that reverted on 2026-09-09.Resolved. 43025 isNewand is the last open Task under 43037.readyForImplementationis a tag, not a field. 43025 and 43028 carry it; 43020 to 43024 do not.Design System // 05. Workflowswhere every live sibling readsDS // 04. Library implementation in Frontend.orioltf commentedon Sep 15, 2026
Session opener — design the four missing positive controls (43021–43024)
What this session produces: one comment on this ticket holding four control designs, one per check. Nothing
else. Invoke no skill. This is a read-and-write task, not an implementation:
/implementroutes to/tdd, anda test is the wrong instrument here — a fixture is what missed the defect this whole exercise exists to catch.
Do not run the checks. Do not edit any file. Do not commit, push, or open a PR. You are designing an
instrument, not using it. The controls execute later, against the tree run 3 leaves, by whoever reads run 3's
result.
1. Read order
— the correction that says the obligation is universal and the technique is per-check. It supersedes
5553046121, which generalised
one check's technique to all six. Read the correction first.
docs/research/2026-08-31-dlc-run-2-findings.mdonunic-agents-pluginsdevelop(ee4c892), § F5. It stateswhat building the six checks taught, including the barrel shape that returned
[]and read green.origin/develop=f77ee51:checks/— the four files behind 43021 to43024, and their callers. You need, per check, the input the check actually reads at run time, not the input
its tests feed it.
2. What a positive control is, and what it is not
A positive control is a deliberate defect of the exact kind one check guards, introduced into the real tree, used
to prove that check can still fail. Three steps: edit, watch it fail naming the right place, revert. It lands
in no commit.
It is not a test and does not replace one. A fixture proves the function; a control proves the real-tree call.
43028 shipped with 12 tests, four of them failure fixtures, and still had a barrel shape (
import { X }then abare
export { X }) that returned[]and read green. Fixed in5a8ec55. Fixtures are what missed it.A check with no working control scores
inert, neverpass. That is the point of the whole exercise: asilent check is otherwise indistinguishable from a dead one, and telling those two apart is what run 3 measures.
3. The one trap that costs an hour
The technique does not transfer between checks, and it reads as if it does. 43020 is the counterexample:
uiReactStyleSheets()throws on empty input, so its real-tree caller already reads real files, and appending tothe barrel proves nothing about it. Its control needs a
@themescale thatcn()does not know.Two people made the same move inside ninety minutes on 2026-09-05, each while writing about that very move. The
rule that came out of it: a quantifier over a set of mechanisms is an unverified claim per member until each
member is named. "All four" and "each real-tree caller" cost less to write than the enumeration and read as
though the enumeration had happened. So write four designs. Never one design and three references to it.
4. The decision this task does not make
How far a control must reach before it counts. Two competent people diverge here. One introduces the defect at
the outermost real input, the tree the check walks, which is what caught 43028. The other introduces it at the
check's own entry point, which is quicker and proves less. Pick the outermost real input every time, and when a
check's outermost input cannot be reached by a one-line edit, say so in the design rather than falling back to
the entry point. An unreachable control is itself a finding about the mechanism, and it is worth more than a
control that passes by being shallow.
5. Other traps
carrying commits that are not on
develop. Do not run/cleanup --apply. Do not runarchon completeonanything. Do not remove a worktree. Those branches are runs 1 and 2's only addressable output.
lint,format,coverage,test(today). Do notuse any of them as evidence that anything works.
origin/developisf77ee51and has not moved since 2026-09-06. If you see something newer, stop and report it.6. The bar
For each of 43021, 43022, 43023 and 43024, the design states four things:
that fails naming the wrong directory is a finding.
A design that cannot name item 1 from reading the code is not finished. Say which check it is and what blocked
you; do not infer it from the check's tests.
7. Stop rule and reporting
The weekly token budget is near its cap. Report what you have and stop rather than running long: partial
designs for two checks, clearly labelled, beat four guesses. Under no circumstance run a check to find out.
Post the designs as a comment on this ticket. Then report to the orchestrator session — get its live address from
ListAgentsand message the one namedwayfinder-orchestrator-*; do not hardcode a seat number. Report: which ofthe four are designed, which are blocked and on what, and anything you measured that contradicts this opener.
orioltf commentedon Sep 15, 2026
Positive controls for 43021, 43022, 43023 and 43024
Designed against
DXP-DesignSystematorigin/develop=f77ee51, which matches the opener. Nothing wasrun, nothing was edited. Four designs, written separately; no design references another for its technique.
The finding that applies to all four, stated once and then per check
apps/storybook-react/src/does not exist atf77ee51, so none of these four controls is a one-lineedit.
findFilesinapps/storybook-react/checks/repo.ts:31returns[]for a missing directory aswell as an empty one, and
.storybook/main.tsglobs../src/**/*.stories.@(js|jsx|mjs|ts|tsx), so thebrowser project's test list is empty too. Every one of the four checks reads stories. Reaching the
outermost real input therefore means creating a file, not changing a line in one.
Per § 4 of the opener, that is the finding rather than a reason to fall back to each check's entry point.
The control still goes in at the outermost real input: the file the check's caller walks. The designs below
each create one file, except 43021, which needs two. Each design also names the one-line form the control
takes once the first real component and story land, because that form is what run 4 should use.
packages/ui-react/src/carries no.tsxeither. It holds three design contracts, three screenshots,index.ts,lib/utils.tsandstyles.css.43021 — every component prop has an
argTypesentry1. Input at run time. Two file sets, both read by
realTreeGaps()inapps/storybook-react/checks/arg-types.test.ts:179-182:packages/ui-react/src/**/*.tsx— the component sources, matched by/\.tsx$/.apps/storybook-react/src/**/*.stories.{ts,tsx}— the stories.Both are empty today: the first directory exists and holds no
.tsx, the second does not exist. The checkreads source text through the TypeScript AST and executes nothing, so the story's import does not have to
resolve for this control to work.
2. The edit. Two files, because one alone leaves the other set empty and the loop still runs zero times.
packages/ui-react/src/control-probe/ControlProbe.tsx:apps/storybook-react/src/stories/ControlProbe.stories.tsx:Give this story no
tags.realTreeGaps()reads every story file regardless of tags, and leavingtestoff keeps 43022 from firing on the same file —runsInVitestreturns false, so the story owes nosnapshot. 43028 stays green for a different reason: it keys on the re-exports in
packages/ui-react/src/index.ts, not on the directories on disk, and this control adds no barrel line.So the run fails on exactly one assertion.
3. What it must print.
checksproject,arg-types.test.ts›holds for every story this repository ships, withformatArgTypeGapsas the message:The place it must name is the repo-relative story path, produced by
repoPath()inchecks/repo.ts:22. A message that names the component file, or an absolute path, or a path relative toapps/storybook-react, is a finding about the check.Two nearby variants are worth one run each, because they exercise different branches of
findArgTypeGaps:argTypes: { label: {} }must printhas an argTypes entry that declares no control,and
argTypes: { label: { control: false } }must printis control: false with no description.4. Revert.
git clean -fd packages/ui-react/src/control-probe apps/storybook-react/srcOne-line form after S1. Delete one
argTypesentry from the first real story'smeta.43022 — every
test-tagged story takes a snapshot1. Input at run time. Two, read at
apps/storybook-react/checks/story-snapshots.test.ts:142-143:apps/storybook-react/src/**/*.stories.{ts,tsx}— missing, sofindFilesreturns[].apps/storybook-react/.storybook/preview.ts, throughpreviewTags()inchecks/repo.ts:101. This oneexists and yields
['autodocs']. It throws rather than returning[]when it cannot read the previewobject, so it is not the vacuous half.
2. The edit. One file,
apps/storybook-react/src/stories/SnapshotProbe.stories.tsx:combineStoryTagsfolds['autodocs']from the preview with['test']from the meta,runsInVitestreturns true, and no play function means
takesSnapshotis false. The story names nocomponent, so43021 skips it —
componentNameis null.Pin the run to
--project=checks. Without the pin the browser project renders this story too, and 43023and 43024 then have an opinion about it.
3. What it must print.
checksproject,story-snapshots.test.ts›holds for every story this repository ships, withformatMissingSnapshotsas the message:It must name the exported story name and the repo-relative file, and the counts must read 1 and 0. A
message that reports the file but not
Probeis a finding: the check's own unit is the story, not thefile, and a file with four stories and one gap has to say which.
4. Revert.
git clean -fd apps/storybook-react/srcOne-line form after S1. Delete the snapshot helper call from one real story's play function.
43023 — every component root carries
dxp:font-body1. Input at run time. Not a file set. The input is the
canvasElementof every story thestorybookvitest project renders, handed toassertFontBodyOnRootsby theafterEachinapps/storybook-react/checks/story-annotations.ts:17, which.storybook/vitest.setup.tscomposes intothe project annotations. Which stories render is decided in two steps:
.storybook/main.tsglobsapps/storybook-react/src/**/*.stories.@(js|jsx|mjs|ts|tsx), thenstorybookTestfilters that list bystoryTagFilterfromchecks/story-tags.ts. The directory is missing, so the list is empty and theafterEachnever runs.The assertion reads
canvasElement.children— the element children of the canvas, one check per root.2. The edit. One file,
apps/storybook-react/src/stories/FontProbe.stories.tsx:The root
<div>carries no class at all. Run with--project=storybook; thechecksproject wouldotherwise fail 43022 on the same file and bury the signal.
3. What it must print. The
storybookproject fails the storyDEMOS/font-probewith:Two places must be named and they are named by different mechanisms. The message itself names the story
id Storybook derives from the title, plus the tag of the offending root and its class attribute. The
file comes from vitest's own reporter, not from the message. Check both: a message that names the story but
prints the wrong tag, or that prints a non-empty
class=, is a finding about which elementcomponentRoots()selected.Add
<div><span>probe</span></div>as a second run. The assertion must still name<div>— the root,not the descendant. If it names
<span>,componentRoots()is walking deeper than the canvas children.4. Revert.
git clean -fd apps/storybook-react/srcOne-line form after S1. Delete
dxp:font-bodyfrom the first real component's rootclassName.43024 — every interactive element has an accessible name
1. Input at run time. The same
canvasElement, through the sameafterEachinchecks/story-annotations.ts:17, reachingassertInteractiveElementsNamed. The two assertions differ inwhat they walk: 43023 takes
canvasElement.children, 43024 takescanvasElement.querySelectorAll('*')—every descendant. Same empty-story-list reason for being vacuous today.
2. The edit. One file,
apps/storybook-react/src/stories/NameProbe.stories.tsx:Three things in that snippet are load-bearing, and dropping any of them gives a green or a wrong failure.
dxp:font-body.assertComponentRootscallsassertFontBodyOnRootsfirst(
checks/component-root.ts:139-141) and it throws, so a root without the utility fails 43023 and youlearn nothing about 43024.
tabIndex, notrole="button". Arole="button"with no name is flagged by axe'sown rule, and
preview.tsruns a11y withtest: 'error', so the story would fail and the message mightbe axe's. An unnamed focusable
spanwith no role is the case axe stays silent on — which is run 2'sactual defect and the reason this check exists.
computeAccessibleNameruns the real accname algorithm, so any text content,aria-labeloraria-labelledbysatisfies it.Run with
--project=storybook, same reason as 43023.3. What it must print.
The place is the story id plus the element description from
describe()inchecks/component-root.ts:163, which prints every attribute exceptclass. Thetabindex="0"mustappear: it is what identifies which of the four interactivity signals fired.
declaresInteractivehas four independent branches and one control exercises one of them. Three moreone-line variants, each worth its own run:
<a href="#" />— the native branch.<a />with nohrefmust not fail; that is the negative half.<span role="button" />— the ARIA-role branch. Expect axe to fail this story as well; the controlpasses if 43024's message is among the failures.
<span onClick={() => {}} />— the React-handler branch, which reads the__reactProps$internalproperty. This is the one to run first after any React upgrade. If it goes green, the internal was
renamed and the branch is dead, and that is a finding worth more than the control.
4. Revert.
git clean -fd apps/storybook-react/srcOne-line form after S1. Delete the
aria-labelfrom the first real icon-only element.What none of these four controls proves
They prove the four callers reach a real defect and name it. They do not prove the callers read the whole
tree.
findFilesskipsnode_modulesanddist, and a component placed outsidepackages/ui-react/src/or a story outsideapps/storybook-react/src/is invisible to 43021, 43022 and43028 alike, silently. Testing that needs a different control, and it is not one of these four.
orioltf commentedon Sep 15, 2026
The four positive controls are designed — last pre-dispatch item closed
ds-positive-controlsposted all four atcomment 5685412588. None blocked.
Nothing was run, edited or committed, which was the scope.
Three claims re-measured here against
f77ee51, not read from the report:apps/storybook-react/src/does not exist.git ls-treereturns nothing for that path.packages/ui-react/src/holds no.tsx:index.ts,lib/utils.ts,styles.css, and generated contracts andscreenshots.
checks/component-root.ts:140-141—assertComponentRootscallsassertFontBodyOnRootsand thenassertInteractiveElementsNamed, andstory-annotations.tsputs the combinedcaller on every rendered story. A control root without
dxp:font-bodyaborts before 43024 is reached.The opener was wrong on one point and the session was right to say so. Its bar asked for "the exact one-line
edit". No control can be one line at
f77ee51, because the tree is empty: there is no component and no story tobreak. Each control creates a file; 43021 creates two. Every design now carries both forms, the create-a-file one
for today and the one-line one for after the first component and story land. This is the same fact the register
records from the other direction — on
developevery real-tree caller inchecks/reads an empty set twice over.What the four controls do not prove, reported by the session and worth more than any of them: they prove each
caller reaches a defect and names it, not that it reads the whole tree. A component outside
packages/ui-react/src/or a story outsideapps/storybook-react/src/is invisible to 43021, 43022 and 43028alike, and silently. No control covers that. It belongs in run 3's write-up as a known blind spot of the
instrument, not as a finding about the run.
Run 3 has no open preconditions
The seal's shape is ruled, PR #466 is merged, and the four controls are designed. What remains is the dispatch
itself: the four non-ticket steps in this ticket's body, the seal written to
~/Desktop/run3-sealed-predictions-<date>.md, and a session rooted in the Consumer atf77ee51or later.orioltf commentedon Sep 16, 2026
Environment rebuilt, Consumer baseline moves to
ddefc51, run 3 has no open preconditionThe host was replaced by a virtual machine, so every environment fact was re-measured rather than inherited.
Consumer PR 5876 merged 2026-09-16 as
ddefc51, under new Task 43094 (parent 43033,Resolved). Five changes:.nvmrc= 24.20.0;useNodeVersion: 24.15.0→nodeVersion: 24.20.0;engines.pnpm=>=11.1.1; theestimationscomment verbatim; andREADME.md/CLAUDE.mdstop naming versions at all.Why that PR existed.
useNodeVersionis not a key pnpm 11 reads — it warned and was ignored — so the Node pinhad no reader, and its value was wrong as well: runs 1 and 2 ran on 24.20.0, not the 24.15.0 the file declared.
engineStrict: truewas already on and enforcing nothing about pnpm, becauseenginesnamed only Node. Both arethe shape this stream keeps finding: a key that reads as governing something and governs nothing.
Two measurements worth keeping.
.nvmrcnow drives the whole chain — mise installs 24.20.0 and the shell,pnpm execand scripts all reportv24.20.0. Andengines.pnpmwas proved able to fail before it was trusted:set to
>=99.0.0it exits 1 withERR_PNPM_UNSUPPORTED_ENGINEnaming the version, and passes again at>=11.1.1.A third edit was dropped for the right reason:
managePackageManagerVersionsdoes not exist in pnpm 11 andwould have written a second dead key into the file the PR exists to clean.
What the seal must record about the toolchain. Node is "24.20.0, the host's nvm default, measured on the host
2026-09-15" — not "the version the repo asked for". The pnpm that runs 1 and 2 used is unknowable:
lockfileVersion 9.0is identical ondevelop, run 1's branch and run 2's branch, and that format spans pnpm 9,10 and 11. Note both; compare neither.
Environment state for dispatch, all re-measured:
archonv0.8.0, pinned deliberately — v0.9.0 is gated on Archon 0.9.0 stops workflow nodes inheriting MCP servers — every Box loses its tracker/docs/design access on upgrade #425 (OPEN, p1), latest is v0.10.1.unic-archon-dlc0.28.0, scope project, enabled. Do NOT run/unic-archon-dlc:setup:.archon/is 27 trackedfiles whose Boxes are byte-identical to the 0.28.0 cache apart from one header line, so setup already ran and its
output travelled with the repo.
chromium-1223,chromium_headless_shell-1223,ffmpeg-1011.figmaandatlassianwork in a fresh non-interactive session.claude mcp listreporting⏸ Pending approvalis a health-check artefact, not a block.originonly, not on disk:archon/task-unic-dlc-build-1787780831333(
b8bb033, +23),feature/43004_build-profile-card(5e683a7, +16, the five unmerged fixes),feature/42999_run2-profile-card(d09feff, +1). The old warning about 28 dirty worktrees no longer applies —there is one worktree — but a remote deletion is now unrecoverable where a local one used to be survivable.
What remains is the seal and this ticket's opener. No ticket blocks either.
orioltf commentedon Sep 16, 2026
Correction to the ruling comment: a positive control is not a one-line edit
Comment 5683363982 says each of
the four owed controls "is a one-line edit, a run, and a revert". That is wrong on this tree and was already wrong
when it was written. The sentence is mine, not the maintainer's: he ruled the seal's shape, not that phrasing.
Comment 5685412588 measured it the
same day.
apps/storybook-react/src/does not exist atf77ee51andpackages/ui-react/src/holds no.tsx, sono control is a one-line edit today: each creates a file, and 43021 creates two. The one-line form is what a
control becomes once the first component and story land, which is the tree run 3 leaves. Every design carries both
forms for that reason.
Raised by
wayfinder-orchestrator-9, which reached the ruling comment before the correction and would haveinherited the wrong instruction. Two other sentences in that comment stand unchanged: a check with no working
control scores inert, never pass; and 43020 is not a barrel append, because
uiReactStyleSheets()throws onempty input.
Which set "one arm per mechanism" means. The ruled shape never enumerated it, and this stream's own rule says a
quantifier over a set of mechanisms is an unverified claim per member until each member is named. So: the six
shipped checks — 43020, 43021, 43022, 43023, 43024 and 43028 — one arm each. Each has a named run-time input, a
named expected failure message and a designed control, which is what makes the cell defect present, check silent
decidable by observation.
Register § F1 lists eight rows, not six. The seventh is 43022's second half, which is part of that check. The
eighth is 43025,
Newand never built, so it takes no arm: a defect it would have guarded belongs in the secondarm, the defects no mechanism guards. Prose rules belong there too, because a prose rule has no firing event and
the whole point of an arm is to predict the firing separately from the defect.
orioltf commentedon Sep 16, 2026
How to start this session — run 3 dispatch
Written 2026-09-16 by
wayfinder-orchestrator-9. Edited in place 2026-09-16 15:30 CEST bywayfinder-orchestrator-10, before any session read it: the report address in § 9 (seat 9 is gone), and onemeasured line added to § 5 B. Nothing else changed. Superseded in part by comments 5698892549 (§ 5 C: the six generated files
are deleted too) and 5698999496 (the specs leg restarted in a fresh session; inherited state, fork point
5e39db6).Read both after this. This is the newest opener on this ticket; if an older one exists above, this one governs.
1. What this session produces, and what to invoke
It produces a run, not a merge. Run 3's build is measured and then abandoned, the way runs 1 and 2
were. Nothing here ends in a merged pull request, so do not optimise the product.
Work from a session rooted in the Consumer's clone. The plugin is installed at project
scope, so the DLC commands exist only there. Dispatch
/specs→/tickets→/build, in that order.Three things not to invoke, each for its own reason:
/unic-archon-dlc:setup. Measured 2026-09-16:.archon/is 27 tracked files, clean,and all four Box YAMLs begin
# Generated by unic-archon-dlc 0.28.0 — /unic-archon-dlc:setup replaces this file on every run.Setup already ran and its output is committed. Running it rewrites the fourBoxes and dirties the baseline this run is scored against.
/wayfinder. That is the plugin repository's map entry. This ticket's workhappens in the Consumer.
v0.8.0,linux-arm64. 0.9.0 stops workflow nodes inheritingambient MCP servers and no Box declares
mcp:, which is filed as Archon 0.9.0 stops workflow nodes inheriting MCP servers — every Box loses its tracker/docs/design access on upgrade #425 — OPEN, p1, untouched since2026-08-25. Upgrading mid-run swaps the binary under a live run.
2. Read these, in this order
~/Desktop/run3-sealed-predictions-2026-09-16.md. Sealed 2026-09-1614:55 CEST. Read it first because it tells you what this run is for and what it may not measure. Do
not edit it. A wrong prediction is scored wrong, never rewritten.
docs/research/2026-08-31-dlc-run-2-findings.mdin the plugin repository, § F1 and § F5. F1 mapseach run-2 defect to the mechanism that now guards it. F5 is what building the sixth check taught.
— the four positive-control designs, and
comment 5697666755,
which corrects the ruling comment above it. Read the correction before the ruling.
docs/agents/unic-archon-dlc.mdin the Consumer, § Three Archon defects that land here →§ Recovering a killed run. Cited, not restated.
3. The one trap that costs an hour
artifacts_dirisworkflows, and two files under it are tracked ondevelop..archon/unic-dlc.config.yaml:165setsartifacts_dir: workflows. The standing cleanup rule says:harvest
<artifacts_dir>/<slug>/out of a worktree before removing it, because every Box writes outwardlast and a terminal run is usually complete-and-unconsumed. Here that rule reads as an instruction to
rescue
workflows/profile-card/PRD.mdandworkflows/profile-card/issues.json, and step 3 of thisticket tells you to delete those same two paths.
Both are right. They name the same path and mean opposite things:
develop— run 2's committed leftovers. Delete them, on the run's branch. Theyexist to be deleted: leaving them makes
/specsand/ticketsre-enter instead of deriving.archon/task-*worktree — this run's own artefacts. Harvest them. Never complete arun whose output was never consumed.
Status: failedsays nothing about what is on disk.Only the second kind is an artefact. Getting this backwards either destroys the run's product or leaves
the re-entry trap armed.
4. The decision this ticket does not make
Where the four positive controls' files land.
The controls are designed and none has been run. Two facts collide, and this ticket settles neither:
apps/storybook-react/src/does not exist andpackages/ui-react/src/holds no.tsx, so every control creates a file, and 43021 creates two.a scorer reading the diff afterwards cannot tell them apart from what the implementer produced.
Two competent implementers would split here: one commits the controls on the run's branch because that
is the tree the controls must execute against, the other keeps them off it to protect the measurement.
Recommendation: run each control on a scratch branch forked from the run's tip, never on the run's
branch. Create the file, run the check, capture the output, delete the branch. The control still
executes against the tree run 3 leaves, which is the requirement, and the run's diff stays clean. Record
each control's output in the run record verbatim.
A check whose control does not make it fail scores
inert, neverpass. Otherwise "the mechanismfired and found nothing" and "the mechanism was dead" read identically. That distinction is what run 3
is for.
5. Before dispatch, in order
A. Park the live memory.
.remember/exists in the Consumer, untracked, holdingnow.md,recent.md,archive.mdandtoday-2026-09-15.done.md. Run 2 measured with those directories absent;a run 3 that can read them measures a different chain. Move it, do not delete it:
~/Desktop/run2-parked/already holdsdxp-memory,remember,remember-attempt2andremember-attempt3from the previous run. Keep run 3's parking separate from run 2's.B. Verify Node, and stop if it is wrong. This is the step most likely to be skipped and it decides
whether the run is comparable at all. Measured 2026-09-16, inside the Consumer:
The repository declares
24.20.0in.nvmrcand inpnpm-workspace.yaml'snodeVersion. mise is notactivated in any shell rc file, so
PATHcarries a static install directory that never re-resolves perdirectory. pnpm self-switches correctly because
package.jsoncarries"packageManager": "pnpm@11.1.1"; Node has no equivalent self-switch.nodeVersiongoverns lifecycle scripts, andpnpm execis not one, so the question is still open.~/.local/share/pnpm/nodejsdoes not exist, which means no pnpm run on this machine has ever fetched24.20.0.
Measured 2026-09-16 15:25 CEST by
wayfinder-orchestrator-10, inside the Consumer:pnpm node --versionreadsv24.15.0, and~/.local/share/pnpm/nodejsis still absent afterwards. pnpm 11.0's release notes list the Nodeversion execution setting among the removed features;
nodeVersioninpnpm-workspace.yamlis the version pnpmuses for the
enginescheck, not the Node that runs. Run steps 1 and 2 anyway and quote what they print.So, before dispatch:
~/.local/share/pnpm/nodejsnow exists and which version it holds.repository that declares one version in three places and runs another.
C. Make the run's branch and delete run 2's artefacts on it. Consumer convention is
feature/<WI#>_<slug>, and the work item exists: 43033,Active, 13 points,Feature 42975.Baseline:
ddefc51onorigin/develop, or later. Re-measure it and record what you get.Delete
workflows/profile-card/PRD.mdandworkflows/profile-card/issues.jsonon that branch, inseparate commits, as run 2 did —
d09feffon its setup branch, then86bda53andec6abb9again onits build branch. Run 2 deleted them twice. Read that as the requirement: whichever branch the build
actually forks from must carry the deletion. Verify it on the fork point, not on the branch you typed.
The three
contract.generated.mdstay. They are atpackages/ui-react/src/{badge-main,card-profile-main,icon/interface/User2}/contract.generated.md, and/specsoverwrites them. Deleting them removes the baseline still being compared against.D. Confirm the seal.
~/Desktop/run3-sealed-predictions-2026-09-16.mdmust readStatus: SEALEDbefore anything is dispatched.6. Other traps
--branchdoes not reuse a branch. Archon always createsarchon/task-*.--fromsets the forkpoint. Getting this wrong produces a run that reviews an empty diff and looks fine.
per repository and refuses a second path with exit 0.
--fromchecks the branch out, then overwrites the worktree's tracked
.archon/from the invocationdirectory.
&child. An interactive interrupt killsthe process group, and a paused run that should wait indefinitely dies instead.
/pr-review'sreview-gatehas noon_rejectand a reject destroys everyfinding with no record.
/qa'suat-gateon_rejectfiles work items on the Consumer's tracker.Approve from the terminal —
archon workflow approve <id>approves and resumes; approving in theUI records
approvedand leaves the run paused forever.originnow, so a remotedeletion is unrecoverable where a local one used to be survivable.
archon workflow get <run-id>, neverworkflow status, when more than one run can be live.runningin Archon's database is not evidence a run is alive. Liveness is: the working pathexists and is a git repository.
archon --helphidesapprove,reject,resumeandabandon. Absence from help is notabsence from the tool.
resumewalks through an unresolved approvalgate and has posted a whole review with no approval accepted.
/specswritescontract.generated.mdwith a provenance block naming theFigma file key, page id, node id and asset key. Those do not come from reading code.
claude mcp listreporting
⏸ Pending approvalforfigmaandatlassianis a health-check artefact, not a block —both work in a fresh non-interactive session. Do not "fix" it via
enabledMcpjsonServers.7. The bar, and what a false pass looks like
DXP-DesignSystemhas no CI of any kind and no branch policies. Nothing runs on a push. Every greenclaim about this repository came from a person running the checks by hand in a real clone.
Four of the eight commands
sdlc_needsdeclares cannot report a failure:lint(
eslint-plugin-only-warndowngrades every rule),format(prettier --writerewrites and exits 0),coverage(Unknown% (0/0)), andtestwhile the suite is empty (passWithNoTests: true). Evidenceon #463.
testandcheck-typesare the two that mean something —testonly once this run's own testsexist, which is the reading that reconciles the two statements above; flag it if you find it wrong.
So: a session reporting "lint, format and coverage all green" has measured nothing. That is the
false pass. Capture exit codes separately from output, and quote the runner rather than asserting what
it said. A number written from memory is not evidence, whether or not it was ever true. On PR 5843 a
description claimed 12 tests while the file ran 16, because a later commit falsified the author's own
evidence row and two re-reads missed it. With no CI here, the pull request description is the only
record that a check ran, so a description patched rather than rewritten is an unversioned test report
nobody re-runs.
8. On landing
Run 3's product is discarded by design. So "landing" means the measurement is complete, not that
anything merged.
workflows/<slug>/out of the worktree beforearchon complete <branch> --force. Every Box writes outward last, so a killed run iscomplete-and-unconsumed with high probability.
branches kept. That is the pattern.
unmerged on run 2's branch deliberately.
this ticket.
against the run's own report.
9. Report back
Report to
wayfinder-orchestrator-10when each leg finishes, and immediately if any of these happens:Say what command produced each claim. When you are told something, ask the same. A peer's
correct-sounding report has been wrong here before.
Two findings this run may surface that are properties of the instrument, not of the run, and the
write-up must say so either way: a component outside
packages/ui-react/src/or a story outsideapps/storybook-react/src/is invisible to 43021, 43022 and 43028 at once, silently; andassertComponentRootscalls 43023 before 43024, so a root missingdxp:font-bodyaborts before 43024is reached — on that story 43024 is
unobserved, notsilent.orioltf commentedon Sep 16, 2026
Run 3 dispatched — 2026-09-16 15:29 CEST
The maintainer authorised the dispatch.
ds-run-3-1, a session rooted in the Consumer, proceeds from § 5 C of theopener above: branch from
ddefc51under WI 43033, delete run 2's two tracked files on that branch, then/specs→
/tickets→/build. It reports towayfinder-orchestrator-10.§ 5 B, the Node stop condition, did not trigger. Measured by
ds-run-3-1with a throwawaynode-probescript,reverted afterwards, tree clean at
ddefc51:What supplies 24.20.0 is mise's shim reading
.nvmrc, not the repository. pnpm downloaded nothing. pnpm 11.0'srelease notes list the Node version execution setting (
useNodeVersion) among the removed features, andnodeVersionis the version pnpm uses for theenginescheck. SonodeVersion: 24.20.0inpnpm-workspace.yamlis a pin with no reader, and its comment is wrong. Consumer PR 5876 replaced one dead pin with another.
The seal's 15:05 amendment predicted the stop condition would come back 24.15.0. It came back 24.20.0 because the
session was launched from inside the Consumer, where mise's
PATHentry already resolves.nvmrc. A sessionlaunched elsewhere carries a static
installs/node/24.15.0/binentry ahead of the shims and reads 24.15.0. Bothreadings were correct for their own sessions.
Ruled: not fixed before dispatch. The run executes under the declared version, which is what comparability
needs, and moving the baseline would buy no measurement. The dead pin becomes a register row after run 3 and rides
a later Consumer PR:
devEngines.runtimewithonFail: downloadinpackage.jsonis the pnpm ≥ 10.14 mechanism..rememberparked at~/Desktop/run3-parked/remember-2026-09-16.orioltf commentedon Sep 16, 2026
Correction to the opener's § 5 C: the three design contracts do NOT stay
The opener (comment 5697784039)
says "The three
contract.generated.mdstay …/specsoverwrites them. Deleting them removes the baseline stillbeing compared against." Both halves are wrong, and the maintainer caught it at halt 1 of the specs leg.
Run 2 deleted them. Its setup commit removed eight files, not two:
86bda53andec6abb9on the build branch repeated only the PRD andissues.jsondeletions, which is where the"two files" reading came from. The chain run 2 measured started with no generated file in the tree.
Deleting them loses no baseline. Run 1's contracts are addressable at
a71e19f, run 2's at5e683a7and ondevelopatddefc51. Git history is the comparison surface; the working tree is the instrument's input.Why it matters for run 3.
/specsStep 2 keys re-entry onPRD.mdonly, and the Consumer'sCLAUDE.md:303saysthe contract is "replaced whole on every run", so the contracts do not trigger a re-entry. They still sit in the
tree
/specsreads, and a session that lists or opens them is measuring a different chain from run 2's. That is thecontamination the maintainer named.
Ruling. Delete all six generated files on
feature/43033_dlc-run-3in one commit, asd09feffdid, before/specswrites anything. The correct § 5 C reads: deleteworkflows/profile-card/PRD.md,workflows/profile-card/issues.json, and every*.generated.*underpackages/ui-react/src/. Verify withgit ls-tree -r --name-only <branch> | grep -E '\.generated\.|^workflows/'printing nothing.The specs leg was at halt 1 when this was caught. Whether it restarts in the same session or a fresh one is the
maintainer's call and is recorded in the next comment.
Raised by the maintainer, measured and posted by
wayfinder-orchestrator-10, 2026-09-16 16:15 CEST. The opener's§ 5 C is stale on this point and this comment governs.
orioltf commentedon Sep 16, 2026
Specs leg restarts in a fresh session — ruled 2026-09-16 16:17 CEST
The first Consumer session,
ds-run-3-1, readpackages/ui-react/src/card-profile-main/contract.generated.mdinfull at 15:35 to ground the interview, before the correction above landed. Deleting the file does not remove what
the session loaded, so a
/specsrestart there would run with run 2's output in context. The maintainer closesthat session and opens a fresh one,
DS-Run-3-2, for the specs leg.State the fresh session inherits, all verified on
origin:feature/43033_dlc-run-3-01at5e39db6:ddefc51plus three deletion commits (c78cb8ePRD,f2ed42aissues.json,5e39db6the six generated files). The build forks from5e39db6. The maintainerrenamed the branch from
feature/43033_dlc-run-3and deleted the old name fromoriginhimself; the § 6 ruleprotects run 1 and run 2 artefacts, and none was touched.
.rememberparked at~/Desktop/run3-parked/remember-2026-09-16.~/Desktop/run3-parked/run-record-2026-09-16.md, carried over from the first session. It holds the§ 5 B Node probe, the contracts correction and the context note. The fresh session appends to it.
pre-pushinstalled in the clone at.git/hooks/pre-push./specsoutput exists: no PRD, no contract, no screenshot.Scoring note for later: the run's diff against
developwill show the three setup deletions beside the run's ownwork. They are preparation, not product, and the scorer reads them out.
orioltf commentedon Sep 16, 2026
Specs leg done; the build forks from
developat404f5ba, not from5e39db6/specs profile-cardfinished inds-run-3-2at 17:48 CEST. Its summary, quoted:The maintainer merged PR 5879 at 17:56. Verified on
origin:Why merge, when the run is discarded by design. Run 2 did the same: its plan commits
b970178,675e70fanda0105b5are indevelop, and its build forked fromdevelopafter them (merge-base5b568bc). Only thesetup deletion
d09feffnever merged, as5e39db6now sits unmerged onfeature/43033_dlc-run-3-01. "Discarded"names the build.
Consequences for the rest of the run, superseding comment 5698999496 on this point:
/ticketsand/buildrun fromdevelopat404f5ba. The baseline named in the write-up staysddefc51.workflows/profile-card/PRD.mdondevelopis run 3's product now. The opener's § 3 rule about deletingtracked files under
artifacts_dirapplied to run 2's leftovers and is spent.document-order and a comparative geometry assertion (the WI 43025 form, no number named) so that the
arrangement the contracts record has a criterion. Recorded in the PRD's
## Confirmationswith both answers,and in the seal's amendments as a human intervention that alters no prediction.
azure-devopsMCP rejects a pull-request description over 4000 characters astoo_big; and Confluence page973276506had no children before this run, so its three component pages werecreated, not overwritten. Publishing ran, four pages; the PRD landed in a
DS-PRDSfolder the maintainercreated mid-run because nothing in the repository says where a PRD goes. That gap is open.
wayfinder-orchestrator-10, 2026-09-16 18:00 CEST.orioltf commentedon Sep 16, 2026
How to start the build-leg session — run 3, third Consumer session
Written 2026-09-16 18:50 CEST by
wayfinder-orchestrator-10. The specs and tickets legs ran inds-run-3-2,whose context is spent; the build leg starts in a fresh session. This comment is that session's opener. It
supplements comment 5697784039
and overrides it where the two disagree.
1. What this session produces, and what to invoke
A build run, four positive controls, and a run record. Nothing merges. The build's pull request is abandoned
with its branch kept, the way PR 5807 and PR 5835 were.
Work from a session rooted in the Consumer's clone, on
develop. Dispatch the Box directly:gates.buildisafkin.archon/unic-dlc.config.yaml:91, sobuild-pr-gatedoes not pause. Dispatch itharness-tracked (
run_in_background), never as a shell&child. Do not run/unic-archon-dlc:setup, do notupgrade Archon (
v0.8.0stays; the CLI offers 0.10.1 and #425 gates any move), do not enter with/wayfinder.2. Read these, in this order
~/Desktop/run3-parked/run-record-2026-09-16.md— the record of the two earlier sessions. Append to it;never rewrite a line. Your scratchpad dies with you, so nothing may live only there.
four positive-control designs for 43021 to 43024, and comment 5697666755 which corrects the ruling above it.
docs/agents/unic-archon-dlc.md§ Recovering a killed run, in the Consumer.Do not read: the seal (
~/Desktop/run3-sealed-predictions-2026-09-16.md; it is for scoring), any output ofrun 1 or run 2 at any commit (
a71e19f,5e683a7, run 2's branch), or run 3's own PRD, contracts andissues.jsonbeyond confirming they exist. The Box reads them; you watch the Box.3. The state you inherit, verify it before dispatch
Baseline for the write-up:
ddefc51. Fork point of the build:developat7f8fedd. Run 3's plan is ondevelopby the maintainer's merges of PR 5879 (404f5ba) and PR 5880 (7f8fedd), the shape run 2 used.feature/43033_dlc-run-3-01at5e39db6holds the setup deletions and is left alone.4. The one trap that costs an hour
workflows/profile-card/PRD.mdandissues.jsonare tracked ondevelopand they are run 3's product. Thefirst opener's § 3 told the dispatcher to delete two tracked files under
artifacts_dir; those were run 2's andthey are gone. Today the same paths are the build's input. Delete nothing under
workflows/. Inside thearchon/task-*worktree,workflows/profile-card/<box>/is this run's artefact: harvest it out beforearchon complete <branch> --force, because every Box writes outward last and a terminal run is usuallycomplete-and-unconsumed.
Status: failedsays nothing about what is on disk.5. Two decisions the tickets did not make
Where the four positive controls' files land. Run them on a scratch branch forked from the build's tip,
never on the build's branch. Each control creates a file (the tree had no
.tsxand noapps/storybook-react/src/atddefc51; after the build it may have both, and the designs carry both forms).Create, run the check, capture the output verbatim, delete the branch. A check whose control does not make it
fail scores
inert, never pass. A 43024 control root must carrydxp:font-body, or 43023 throws first and43024 is never reached.
Where each slice's check output lives. All four slices run
pnpm --filter @repo/storybook-react test --run,the full three-project suite, so 43020 to 43028 fire on every slice. The scorer reads defect present off the
check output and the slice commits, not off the final diff. So before the run is complete, find where the
per-slice test output is kept (Archon run events, the verification node's
node_outputin~/.archon/archon.db, the PR description) and write the exact location into the run record. Do not summariseit. If it exists only in the database, extract it to
~/Desktop/run3-parked/beforearchon complete.6. Other traps
.remember/reappears. The Remember plugin is enabled at user scope and recreates the directory minutesafter it is parked. Four sightings so far, each naming only run 3's own progress. Record each sighting with its
time and whether the content names run 1 or run 2 output; park it to
~/Desktop/run3-parked/remember-2026-09-16-<letter>(next letter
e). Do not change any settings during the run.remote_agent_codebasesin~/.archon/archon.dbhad no row at 15:30. After dispatch, quotesqlite3 ~/.archon/archon.db "select name, default_cwd, default_branch from remote_agent_codebases;".default_branchshould readdevelop, from the committed.archon/config.yaml.directory's working tree.
archon workflow get <run-id>, neverworkflow status.runningin the database is not liveness;liveness is the working path existing and being a git repository.
origin.lint,format,coveragecannot fail in this repository, andtestcannot while the suite is empty.testonce this run's tests exist, andcheck-types, are the two that mean something. Capture exit codesseparately from output; quote the runner, never assert a count.
7. On landing
workflows/profile-card/and the per-slice check output out of the worktree.archon complete <branch> --forceonly after 1 and 2.ddefc51and the fork point as7f8feddin the run record.8. Report back
Report to
wayfinder-orchestrator-10when the run dispatches (run id, fork sha, the codebase row), when itreaches or dies at any node, when a control fails to make its check fail, and when the leg ends: expected,
observed, the command or file that proved it, and whether it changes this ticket only or every session here.
Say what command produced each claim.
orioltf commentedon Sep 16, 2026
How to start the review-leg session — run 3, fourth Consumer session
Written 2026-09-16 19:55 CEST by
wayfinder-orchestrator-10. The build leg ran inds-run-3-3; its run completed,PR 5881 is open, everything is harvested, and the four positive controls passed. This comment is the review
session's opener. It supplements comment 5701100966
and the first opener, and overrides both where they disagree.
1. What this session produces, and what to invoke
One
unic-dlc-pr-reviewiteration on PR 5881, harvested, and then the run's close-out. Nothing merges.Work from a session rooted in the Consumer's clone, clone on
developat7f8fedd. Dispatchharness-tracked, from the clone root, the way runs 2 and 43028 did:
gates.pr-reviewisafk(.archon/unic-dlc.config.yaml:93), soreview-gateis skipped andpostwritesthreads to PR 5881 without a pause. The maintainer gave that go at 19:48. One iteration; a second is his call
after the first is read.
Do not run
/unic-archon-dlc:setup, do not upgrade Archon (v0.8.0; the CLI offers 0.10.1 and #425 gates it),do not
archon completeanything, do not touch PR 5881 by hand, do not fix anything the run produced.2. Read these, in this order
~/Desktop/run3-parked/run-record-2026-09-16.md— three sessions' record. Append; never rewrite a line.controls are recorded there and in the run record's
ds-run-3-3sections.docs/agents/unic-archon-dlc.mdin the Consumer, § Recovering a killed run, and its lines on the<!-- unic-dlc-pr-review:iteration=N -->marker.Do not read: the seal,
report.md's § 5 findings, the precheck output, or any run 1 or run 2 artefact. The Boxreviews; you watch the Box. If you read the precheck's eleven findings you cannot report the review's dedup
against them without bias, and that number is one of the three the seal says compare with run 2.
3. The state you inherit, verify before dispatch
4. The one trap that costs an hour
prepfinds the pull request by the current branch of the worktree Archon gives it. If the run's worktree isnot on
archon/task-unic-dlc-build-1789577744739,prepfinds no PR and the review reads an empty diff and looksfine. So within the first minute after dispatch, quote the new run's
working_pathfromremote_agent_workflow_runs,git -C <working_path> rev-parse --abbrev-ref HEAD, andprep's output PR number.If it is not 5881, abandon at once (
archon workflow abandon <id>) and report.The dispatch header must say a worktree is being created. "Folder project — running in place" means the codebase
registration regressed: abandon and report.
5. The decision this ticket does not make
Whether iteration 1 is enough. Run 2 had two review rounds; the seal marks dedup, reconcile and praise as
comparable. After
postcompletes, report the summary thread's counts and the iteration marker, and stop. Themaintainer decides on a second iteration after reading the first. A second iteration would need the findings
addressed on the branch, and nothing the run produced is being fixed, so the default is one.
6. Other traps
postis node 8 of 8. Before anyarchon complete, harvest<working_path>/workflows/profile-card/pr-review/and the run's events and transcripts, exactly asds-run-3-3did (see the run record for the paths and the~/.claude/projects/transcript directory keyed bythe worktree path). The database holds tool inputs, not output.
reviewnode can produce findings and write none, exiting 0;postthen refuses with nothingto say. Read
synthesize's counts andreconcile'sverdictsagainst the review node's ownnode_outputlength. A zero-finding review on a nine-commit diff is a finding about the Box.
afk)..remember/reappears minutes after parking, and the Box's own nodes write to it. Record each sighting.archon workflow get <run-id>, neverworkflow status.7. On landing
~/Desktop/run3-parked/.archon completeuntil the orchestrator relays the maintainer's word on asecond iteration. Both worktrees stay.
8. Report back
Report to
wayfinder-orchestrator-10at dispatch (run id, working_path, branch, prep's PR number), at any failure,and at the leg's end: expected, observed, the command or file that proved it, and whether it changes this ticket
only or every session here. Say what command produced each claim.
orioltf commentedon Sep 16, 2026
Run 3 is scored and written up — this ticket is done
The write-up landed on
developatbcf688a(PR #481):docs/research/2026-08-31-dlc-run-2-findings.md§ "The sealed prediction, scored — run 3 (2026-09-16)" and § "G. What run 3 taught about the instrument".Against the acceptance criteria:
~/Desktop/run3-sealed-predictions-2026-09-16.md,Status: SEALED 14:55 CEST, arms 1 and 2 before any dispatch; arm 3 written after/specswas dispatched and before it reported, flagged as a weakened seal where it is scored.User2glyph is the unguarded defect the list missed. Arm 3: five of five, weakened.inert. 43022's adjacent defect (a snapshot of the inner<span>) is present and outside what the check sees.ddefc51; plan merged as404f5baand7f8fedd; build brancharchon/task-unic-dlc-build-1789577744739at08e2523, kept onorigin; PR 5881 abandoned with six falsefixedthreads left as evidence.The answer to F4: mechanisms reach the implementer where documents did not. The finding run 2 could not make: on a byte-identical commit the review Box marked six real findings
fixedand resolved their threads. Table G lists eighteen instrument findings with their evidence and destination; each gets its own ticket.Dispatch record: comments 5698289748 to 5701996755 above. Evidence:
~/Desktop/run3-parked/(44 MB, run record 2323 lines). ADO 43033 stays the maintainer's to resolve.