Skip to content

t27f: face -- the Queen Trinity as a parametric vector face (Closes #10264) - #11675

Merged
gHashTag merged 1 commit into
masterfrom
rel-10264-face
Oct 22, 2026
Merged

gHashTag merged 1 commit into
masterfrom
rel-10264-face

Conversation

@gHashTag

Copy link
Copy Markdown
Collaborator

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 = 16 fixed-point (Q8) parameters over LAYERS = 6 closed 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.

Requirement How it is met Checked by
FR-001 pure in (state, frame) param_of, cp_of, path_point, face_digest read no clock and store no payload the_same_state_and_frame_give_byte_identical_control_points (1610 asserts)
FR-002 six expressions pairwise apart six expressions for the seven task states of specs/queen/tasks.t27; distances measured, not promised the_expression_pairs_all_differ -- 15/15 pairs >= MIN_EXPR_DIST
FR-003 iris is one token iris_colour() returns IRIS_BLUE and nothing else the_character_is_original_and_the_iris_is_one_token
FR-004 no raster of a person IMAGE_REFS is empty, HAS_REAL_PERSON_INPUT is false same test

Also 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..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), and the face reads no graph and invents no direction. Dropped and failed share E_FAILED deliberately: 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.
  • Hooks green: own-language, foreign-budget, secret-gate.

Not claimed here

  • The timing criterion is not measured. "Under 1 ms at p99 per frame over 1000 frames on the Railway lab" is a 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, and a hand-guessed verdict would be worse than a missing one. 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.

…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
gHashTag enabled auto-merge (squash) October 22, 2026 18:18
This was referenced Oct 22, 2026
This was referenced Oct 22, 2026
@gHashTag
gHashTag merged commit f092948 into master Oct 22, 2026
23 of 29 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-22 20:27:26 UTC

Summary

Status Count
Total Open PRs 45
PRs with Failing Checks 32
PRs with All Checks Green 13
READY 0
FAILING 32
PENDING 0
NO CHECKS YET 11

These columns do not partition: 0 + 32 + 0 + 11 = 43, and there are 45 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=5aec047d42ec != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

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.
@gHashTag
gHashTag deleted the rel-10264-face branch October 26, 2026 03:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant