Skip to content

t27f: why card -- draw one deps_why chain as a social card, box per spec (Closes #10716) - #10719

Merged
gHashTag merged 5 commits into
masterfrom
claude/t27f-why-card
Oct 18, 2026
Merged

gHashTag merged 5 commits into
masterfrom
claude/t27f-why-card

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Closes #10716

Stacked on #10715 (deps_why, Closes #10705). Until #10715 merges, the diff also shows its commit. The PR targets master directly, because stacked PRs in this repo are never retargeted.

What

TRI CLAW gets a new social-visual skill: a card showing why one spec imports another.

  • specs/t27f/why_card.t27 reads the chain deps_why writes and returns an ffmpeg filter graph for a 1080x1350 card:
    • one box per spec, from A at the top to B at the bottom;
    • every box in spec_graph_view's exact style;
    • a uses connector per edge;
    • the hop count in the footer.
  • Its main takes the t27c use-edges list on stdin, plus WHY_A, WHY_B and WHY_FONT.
  • Skill card specs/skills/t27-why-card.t27 (t27/why-card, tags social-visual / t27f / deps / card), with its seal.

It draws nothing (returns 0) for:

  • none or refused;
  • 0 hops;
  • a chain whose hops do not join A to B;
  • a non-exact edge;
  • an unquotable name or font path;
  • a name over 58 bytes;
  • more than 7 specs.

A graph that does not fit the caller's buffer returns cap + 1, never a cut graph.

Tests (10, all pass, 0 vacuous)

  • the fixture's f to d chain draws 5 boxes, each name exactly once;
  • names lose specs/ and .t27;
  • for every length from 2 to 7 boxes, the column sits inside 260..1150, centred, with gaps of at least 30 px;
  • for every name length, the font fits the box;
  • negative controls:
    • no answer;
    • a broken, short, long or non-exact chain;
    • an unquotable name;
    • 8 specs;
    • an output one byte short;
    • an unquotable font.

Evidence (Railway lab)

  • Mutants: 5 mutants each fail exactly one test: the hop count, the join, the step cap, the font quote and the font cap. The hop-count mutant first survived; the fixture that kills it is in this PR.

  • Corpus: 20 chains from why_card drew, over 2474 edge lines. The longest, 7 boxes, runs why_card → claw/t27f_gate → t27f/hot → verified/seal_identity → verified/independence → verified/die_binding → verified/device_dna.

  • Renders: the 7-box and 3-box cards, rendered with ffmpeg, pass 62 pixel checks:

    • fill, stroke and both inner edges per box;
    • backdrop in every gap;
    • the connector;
    • two backdrop controls.

    White text pixels appear in every box's name band (1441 to 4803 per box), and 0 below the column. A deliberately wrong expectation misses.

  • Seals and ratchet: t27c seal --verify reports all hashes MATCH for both specs. t27c suite --ratchet --corpus-only is RATCHET CLEAN.

Not claimed

  • The card shows the one chain deps_why picks. When the edge list has ties, other chains of the same length exist.
  • Nothing posts the card; publishing it is the owner's call.
  • The text fit relies on the font's 3/5 em advance, checked by the edge pixels on the longest corpus name, not per glyph.

Skill

.claude/skills/t27f/SKILL.md gets the card recipe, the pixel-check list and three traps:

🤖 Generated with Claude Code

gHashTag and others added 4 commits October 19, 2026 06:00
…Closes #10702)

deps_unknown reads the focus spec's source next to the use-edges list and
writes one `unknown<TAB>path` line per use line with no edge to its whole
path or its single fallback, mirroring bootstrap/src/use_resolve.rs.

Measured on the Railway lab, master f33f269: 2489 use lines, 23 unknown
in 13 specs, byte for byte the `t27c gen` "resolves to no spec" warnings;
the drop-one and empty controls both fail. Spec 25/25 tests, 0 vacuous;
corpus ratchet CLEAN. The t27f skill gains the oracle recipe.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oses #10705)

deps_why a b writes one shortest chain of edge-list lines from a to b,
each exact, a tie taken in edge-list order; `none` when a does not
reach b; refused whole when the walk or the output does not fit. It
answers the question cargo tree -i, npm explain and pnpm why answer.

deps_find is split out of deps_in_range so the backtrack can pick the
first edge line in a range whose importer sits one layer closer.

Six tests: the shortest chain over DEPS_FIXTURE, a tie in edge-list
order, a spec to itself in no hops, none against the edges and off the
graph, a cycle crossed both ways, and an output one byte short refused
whole. Lab: test-report 31/31, 0 vacuous; a scratch corpus check over
2466 edge lines held hop count = layer and joined hops for every spec
reached from lesson_reel, spec_deps and t27f_gate; the one-hop-more
control and the last-edge mutation fail. Seal re-saved and verified;
corpus ratchet CLEAN.

The t27f skill gets the why recipe, the finding that all 13 specs with
a dropped use line fail for other reasons first, and the pkill
self-match trap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	.claude/skills/t27f/SKILL.md
#	.trinity/seals/t27f_t27f_spec_deps.json
#	specs/t27f/spec_deps.t27
…pec (Closes #10716)

specs/t27f/why_card.t27 reads the chain deps_why writes and returns an
ffmpeg filter graph for a 1080x1350 card: one box per spec in chain
order, every box in spec_graph_view's exact style, a `uses` connector
per edge, names without specs/ and .t27 at the largest size that fits.
The column is centred in 260..1150 with gaps of at least 30 px for
every length from 2 to 7 boxes. Nothing is drawn for none, refused,
0 hops, a broken join, a non-exact edge, an unquotable name or font,
a name over 58 bytes, or more than 7 specs; a graph that does not fit
is refused whole (cap + 1). The font is a parameter (WHY_FONT): an
import of lesson_reel for FONT pulls its scene tree in and does not
compile.

Skill card t27/why-card (social-visual) with its seal.

Lab: test-report 10/10, 0 vacuous; 5 mutants (count, join, step cap,
font quote, font cap) each fail one test. Corpus: 20 chains from
why_card drew, the longest 7 boxes to verified/device_dna; renders of
that card and a 3-box one held 62 pixel checks and white text in
every box, and a deliberately wrong expectation missed. Seals verify;
corpus ratchet CLEAN.

The t27f skill gets the card recipe and three traps: the import of a
print module, the open slice t27c gen drops (#6250), and a count
check that hides behind a later check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Master's SKILL.md is the squash of #10715, byte-identical to this
branch's base, so the branch copy is kept.

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

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-18 23:45:59 UTC

Summary

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

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

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=fad12492937a != 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 2559102 into master Oct 18, 2026
32 of 34 checks passed
gHashTag added a commit that referenced this pull request Oct 19, 2026
…ders' exact 2^21-bit buffers (Refs #10762)

The merge keeps this branch's deps_card.t27 and its seal (master holds the
squashed #10747 text, which this branch already contains). Master's t27b
ledger already lists deps_card and why_card, which clears the t27b-native
ratchet for them.

The Verilog widths check failed because why_card.t27 (on master since
#10719) and deps_card.t27 each read the corpus edge list (136,837 bytes)
into a [262144]u8, printed as [2097151:0]. Ledgered with the arithmetic,
as suggest_feed.t27 and token_floor.t27 are.

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.

t27f: why card -- a social card that draws one deps_why chain, box per spec t27f: deps view answers why A imports B -- one shortest use chain

1 participant