Repository navigation
t27f: face -- the Queen Trinity as a parametric vector face (Closes #10264) - #11675
Merged
Merged
Conversation
…10264) M5 of T27F Live (epic #10266). specs/t27f/face.t27 is a 16-parameter Q8 rig over six closed cubic paths, a pure function of (state, frame): no wall clock is read and no payload is stored. - Six expressions for the seven task states of specs/queen/tasks.t27 (dropped and failed share FAILED, so no viewer spends a distinction they cannot see). FR-002 is measured, not promised: the_expression_pairs_all_differ walks all 15 pairs against MIN_EXPR_DIST. - Integer de Casteljau (cubic, path_point) on a closed ring; the join test walks every segment endpoint back to its control point and steps across the seam. - Seeded blink (period 97, a prime) and breath (150), keyed by the frame number alone. - aim_at clamps gaze to a -64..64 cone and returns the rest pose when the target is the centre; the caller passes the newest EXACT node of the work graph (#10260). The face reads no graph and invents no direction. - FR-003 and FR-004 are asserted: iris_colour() is IRIS_BLUE and nothing else, IMAGE_REFS is empty and HAS_REAL_PERSON_INPUT is false. Local evidence: t27c test-report 11/11 pass, 0 FAIL, 0 vacuous, 2 invariants proved; t27c seal --save and --verify, all hashes MATCH; tools/ci/check_specs_still_parse.py over the diff reports 0 newly unparseable. Not claimed in this change: - The sub-1 ms p99 per-frame cost is a Railway-lab measurement. This change does not measure it. - There is no docs/reports/t27b_expectations.json row yet. That row is derived by the ledger steward (specs/jobs/t27b_ledger_steward.t27) from a lab corpus run, and a hand-guessed verdict would be worse than a missing row. The stale local t27b of 2026-10-06 reports only undeclared `use` names, which later plumbings may have fixed, so it is not an authoritative reading.
gHashTag
enabled auto-merge (squash)
October 22, 2026 18:18
This was referenced Oct 22, 2026
Closed
This was referenced Oct 22, 2026
Merged
This was referenced Oct 22, 2026
Merged
Merged
Closed
Contributor
This was referenced Oct 22, 2026
Merged
gHashTag
added a commit
that referenced
this pull request
Oct 22, 2026
…me (Closes #10263) (#11690) M4 of T27F Live (epic #10266). One new spec, no other file touched. - Transport: SSE (`text/event-stream`), user actions back as POST of an allowlisted action id from specs/t27f/ui_plan.t27. HAS_WEBSOCKET is false and the test says so. - Vocabulary reused, not reinvented: the event name is hot.t27's HOT_EVENT and the digest length is DIGEST_HEX_LEN, so the live wire and the hot loop are one stream, not two. - FR-001: the sequence starts at SEQ_FIRST and increases by one forever; the test walks 5000 of them. - FR-002: a keyframe at least every K_DELTAS deltas (K = 16). resume_mode answers a client that fell behind the newest keyframe the buffer still holds with a keyframe rather than deltas it does not have, and resume_from never repeats a sequence number. - FR-003: coalescing keeps the last value of every key (measured against a last-write-wins reference over a 400-event window, not asserted) and never drops a pending keyframe. - FR-004: an action id outside the catalog is refused; the test sweeps all 256 ids. - The reconnect test walks 100 runs, cutting the client at a different point each time, and asserts per-key state equality -- which is strictly stronger than the scene-hash equality the issue asks for. Both recovery paths (deltas and keyframe) are exercised, and the test asserts that they are. Local evidence: t27c test-report 10/10 pass, 0 FAIL, 0 vacuous, 2 invariants proved, 41890 runtime asserts; t27c seal --save and --verify, all hashes MATCH. Not claimed in this change: - The latency budget (50 ms p50 / 150 ms p99, measured in a browser against t27-mcp --watch) is a Railway-lab measurement. This change does not measure it and does not claim it. - No docs/reports/t27b_expectations.json row: that row is derived by the ledger steward from a lab corpus run. The same choice was made for face.t27 in #11675, and the lab has since confirmed the two rows from #11668 were right (master run c986d53: both `t27b pass`).
gHashTag
added a commit
that referenced
this pull request
Oct 22, 2026
… UNLISTED `specs/t27f/face.t27` merged in #11675 without a ledger row on purpose: the row is derived from a lab corpus run, and a hand-guessed verdict is worse than a missing row. The lab has now run the merge commit. Railway t27b-lab-1, run `f0929487530fb59d1b4ec2815183edaa35b7daba`, finished 2026-10-22T21:11:00Z, reports for `specs/t27f/face.t27`: reference `pass`, t27b `pass`, 11 tests, 2 invariants, 4092 asserts, no blockers. The row below records that reading. `max_not_pass` is untouched: this adds a pass, not a non-pass.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
M5 of T27F Live (epic #10266). One new spec, no other file touched.
What
specs/t27f/face.t27-- the Queen Trinity as a parametric vector rig:PARAMS = 16fixed-point (Q8) parameters overLAYERS = 6closed cubic paths. A layer's control points move by a weight table (parameter x Q8 weight, along that layer's own direction), and the paths are evaluated with integer de Casteljau, so the same(state, frame)gives byte-identical control points.param_of,cp_of,path_point,face_digestread no clock and store no payloadthe_same_state_and_frame_give_byte_identical_control_points(1610 asserts)specs/queen/tasks.t27; distances measured, not promisedthe_expression_pairs_all_differ-- 15/15 pairs >=MIN_EXPR_DISTiris_colour()returnsIRIS_BLUEand nothing elsethe_character_is_original_and_the_iris_is_one_tokenIMAGE_REFSis empty,HAS_REAL_PERSON_INPUTis falseAlso implemented: the seeded blink (
BLINK_PERIOD_F = 97, a prime, so blink and breath never lock) and breath (150) keyed by frame number alone;aim_at, which clamps gaze to a-64..64cone and returns the rest pose when the target is the centre -- the caller passes the newest EXACT node of the work graph (#10260), and the face reads no graph and invents no direction. Dropped and failed shareE_FAILEDdeliberately: two states a viewer cannot tell apart should not get two faces.Evidence (local, t27c 0.5.2)
t27c test-report specs/t27f/face.t27-- 11/11 pass, 0 FAIL, 0 vacuous, 2 invariants proved.t27c seal --save+--verify-- all hashes MATCH.tools/ci/check_specs_still_parse.py --base a7f822b91 HEAD-- 0 newly unparseable.Not claimed here
docs/reports/t27b_expectations.jsonrow. That row is derived by the ledger steward from a lab corpus run, and a hand-guessed verdict would be worse than a missing one. The stale localt27bof 2026-10-06 reports only undeclaredusenames, which later plumbings may have fixed, so it is not an authoritative reading.