You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
test(framework): keep the identifier join honest in CI #659
The assumption the whole layer rests on is re-checked automatically, on the tool the layer actually ships with.
Scope
The measurement campaign (#632) proved that a hook's session identifier equals the one the export carries. It proved it by running one session, not by construction, and a tool update can break it without notice. The campaign's own conclusion was that this belongs in continuous integration.
It is not there. Worse, the only issue that mentions CI probing is #653, which covers the four tools that are not in milestone 14 — so the one tool everything currently rests on is the one left unprobed.
Includes: a probe run in CI that opens a session, captures the hook payload and the exported attributes, and asserts the identifiers match.
Includes: asserting the attributes the design depends on are still present: session.id on the token and cost counters, prompt.id and event.sequence on api_request and on skill_activated.
Includes: asserting the redaction behaviour has not changed, since a day when third-party skill names stop being replaced is a day the design gets simpler and nobody would otherwise notice.
Identifiers are minted client-side, before any model call. On Codex and Copilot a provider pointed at an address that answers nothing still opens a session, fires the hook and emits telemetry — measured, at zero quota. Claude Code was measured with real sessions; whether the same trick applies to it is the first thing this issue should establish, because it decides whether the probe can run on every pull request or only nightly.
The probes from the campaign are reusable as-is.
Done When
A pull request that would break the identifier join fails CI.
The probe reports which attributes it checked, so a silent removal is visible in the log rather than only in a red cross.
The probe distinguishes "the tool changed" from "the probe is broken", and never reports the second as the first.
Its quota cost per run is stated in the issue when the free method is settled.
Completion Evidence
A deliberately broken fixture that turns CI red, and a normal run that stays green at a known cost.
Milestone 14 is scoped to what produces a trustworthy figure in five days: #620 the journal, #646 the switch, #647 the sink, #663 the step boundaries, #629 the figure, #617 the proof it is honest. Plus #658, which ships with them because the published documentation currently promises the opposite of what we are about to release.
This issue is not in that set. It keeps its value and its content; it simply is not what the week is measured on. It returns to the milestone board once the first figure exists.
No milestone is assigned rather than a later one, because where it lands depends on what the first week actually teaches.
Activity
blafourcade commentedon Aug 16, 2026
Out of the week's scope, 2026-08-16
Milestone 14 is scoped to what produces a trustworthy figure in five days: #620 the journal, #646 the switch, #647 the sink, #663 the step boundaries, #629 the figure, #617 the proof it is honest. Plus #658, which ships with them because the published documentation currently promises the opposite of what we are about to release.
This issue is not in that set. It keeps its value and its content; it simply is not what the week is measured on. It returns to the milestone board once the first figure exists.
No milestone is assigned rather than a later one, because where it lands depends on what the first week actually teaches.
test(ci): the identifier join is re-checked on every pull request, free
blafourcade commentedon Sep 2, 2026
Delivered by #706, squash-merged into
nextas 627408f.