Skip to content

spec(claw): preview -- the T27F preview deployment of a PR as law (Closes #10282) - #10287

Merged
gHashTag merged 1 commit into
masterfrom
feat/claw-t27f-preview
Oct 18, 2026
Merged

gHashTag merged 1 commit into
masterfrom
feat/claw-t27f-preview

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Closes #10282

Lane t27f-preview of specs/claw/github_surface.t27 (#10277, epic #9271): the law of a "T27F preview" deployment per pull request. One new file, specs/claw/preview.t27; no workflow, no generated file.

What the law says

  • Which PRs. Open, head in the same repository, at least one changed .t27 file under specs/ (wants_preview, spec_paths_in). Fork heads and docs-only PRs get nothing. The caller lists only added, modified and renamed files, since a deleted spec has no bytes to draw.
  • Name. t27f-preview-pr-<n> (env_name_ok), one environment per PR so every commit's deployment groups on the PR page.
  • States. queued -> in_progress -> success / failure -> inactive (next_state). Illegal moves return S_NONE; inactive is final; a retire (supersede or close) is legal from every live state, exactly once.
  • Supersede. A newer deployment id retires older ones; an older id never retires a newer one (supersedes).
  • URL. Only a success carries environment_url, and only after the URL answered HTTP 200 (status_ok). The URL must be https://t27.ai/t27f/graph/? with repo=, a 40-hex sha= and path=specs/... (url_ok): a branch name would drift under the check, so it is refused.

The renderer is the existing T27F graph page (spec_graph_export.t27 + spec_graph_view.t27 as wasm). Nothing new is drawn.

Evidence (Railway lab, t27c at /root/t27/target/release/t27c)

  • spec-status: IMPLEMENTED.
  • test-report: 18 tests, 18 pass, 0 FAIL, 0 vacuous (every test executes runtime asserts; 113 in total). The tests carry the negative cases: wrong digit, 39 / 41 hex, upper-case hex, branch name as sha, 404 probe, URL on a non-success state, illegal transitions, inactive as a sink.

Not wired yet -- exact blockers

  1. The page cannot draw an arbitrary spec. https://t27.ai/t27f/graph/ (trinity apps/website/public/t27f/graph/graph.js, 8 lines) offers a fixed <select> of nine vendored specs and reads no query string. A preview of a PR's spec needs ?repo=&sha=&path= support (fetch from raw.githubusercontent.com, which answers access-control-allow-origin: *). That is a small edit to an existing foreign file in gHashTag/trinity. Publishing the URL before that lands would publish a URL that does not show the spec.
  2. The live wasm refuses big specs. The vendored wasm caps at 192 nodes / 254 edges (PROVENANCE.txt), while spec_graph_export.t27 is already at 1024 / 4096 in t27. Today a spec over those caps (three of the nine vendored ones already) draws "over the cap: refused". Re-vendoring the wasm (T27F hot loop: rebuild the exporter wasm only when its sealed inputs changed #10229 pipeline) fixes it.
  3. The workflow. The job that mints the token (deployments: write + contents: read) and calls POST /deployments and /deployments/{id}/statuses is a new workflow file: a new foreign file, which needs the owner's owner-approved-foreign label, plus a row in specs/claw/gates.t27. Not attempted.
  4. Cross-check against github_surface. use claw::github_surface next to use claw::recipes breaks t27c gen (an inlined module's recipes::str_eq calls are not rewritten: use of undeclared identifier 'recipes'). The row t27f-preview = deployments write is therefore recorded in comments, not asserted. To be filed on epic: self-host t27c -- rewrite the compiler from Rust into t27 #5980 with a minimal repro.

Criteria

  • t27c spec-status IMPLEMENTED, test-report 0 FAIL, 0 vacuous, on the Railway lab.
  • str_eq reused from claw::recipes; starts_with / ends_with are the only new helpers.
  • Wiring blockers listed precisely above.

🤖 Generated with Claude Code

…oses #10282)

Environment name per PR, queued/in_progress/success/failure/inactive machine,
supersede retires older deployments, only a probed success carries a URL that
pins the head sha. 18 tests, 0 vacuous on the Railway lab.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-18 07:44:06 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 50
PRs with All Checks Green 0
READY 0
FAILING 50
PENDING 0
NO CHECKS YET 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=0f8c66b9ed0e != 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
gHashTag merged commit b18c00a into master Oct 18, 2026
28 of 30 checks passed
gHashTag added a commit that referenced this pull request Oct 18, 2026
…ticle engine on glossy black (Closes #10305) (#10308)

The owner asked for a glossy black background, no honeycomb, and a picture
generated by a physical particle engine. reel_particles.t27 computes every
pixel: 27 lesson particles on damped 3D springs into a 9x3 grid (lit or draft
from reel_t27_basics.STATUS), 72 dust particles on softened Kepler orbits under
velocity Verlet, a glossy floor with mirrored reflections, key light, vignette,
tone roll-off and LCG grain. main streams 450 raw RGB24 frames to stderr.

reel_particles_mux.t27 prints the ffmpeg filter graph (captions, voice, music,
limiter) from owner_voice_reel.t27, which PR #10287 deleted by accident and
this commit restores.

Lab: 18/18, 6/6 and 8/8 tests, 0 vacuous; the reel measures 15.000 s,
450 frames, 1080x1920, -14.1 LUFS.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
gHashTag added a commit that referenced this pull request Oct 18, 2026
…10288 (Closes #10311) (#10312)

duplicate-bodies has been red on master since the claw specs landed
without moving the ledger. Each new group and why it stays for now:

- buf_has, digit_byte, put_count, put_str (gates.t27 + sarif.t27,
  #10288): deliberate. sarif.t27 says so in its header: the writers are
  private in gates.t27 and sarif.t27 must lower alone under gen-c.
- bytes_eq 2 -> 3 (`same` in sarif_pins.t27, #10288): the test-only
  pins companion compares strings by .len, which gen-c cannot lower.
- str_eq (gates.t27 + suggest.t27, #10286) and has_prefix
  (service.t27 #10283, starts_with in preview.t27 #10287): same
  lower-alone constraint; sharing them into one claw helper module is
  a follow-up, not this commit.

The ledger is `python3 tools/dupe_scan.py --bless` output on master
238b6a9, run on the Railway lab; the gate exits 0 after it. Not
hand-edited.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.

TRI CLAW: T27F preview deployment law -- one environment per spec-touching PR (lane t27f-preview of #10277)

1 participant