Skip to content

spec(t27f): four rule fixes from running the skill on both demo briefs (Refs #9951) - #9960

Merged
gHashTag merged 1 commit into
masterfrom
t27f/skill-run-fixes-9951
Oct 17, 2026
Merged

gHashTag merged 1 commit into
masterfrom
t27f/skill-run-fixes-9951

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Follow-up to #9952. I ran .claude/skills/t27f/SKILL.md end to end on the two Phase 1 demo briefs, using the merged spec (7181e6bc9). Four rules were wrong or missing, and this PR fixes them in specs/t27f/topic_engine.t27, with tests. The skill prose is updated to match.

Refs #9951
Refs gHashTag/trinity#1677

How the run loaded the spec

mcp__t27__t27_spec path=specs/t27f/topic_engine.t27 answers "not found", because publication has stalled (details below). Skill section 0 allows a checkout as the fallback, so the run read the spec from origin/master with git show. The file was not copied anywhere.

Routing, counted as the new KEYWORD_MATCH says

brief content engineering research sales route()
"List a sea-view villa for a client and draft the sale post" 1 (post) 0 0 3 (villa, client, sale) SALES
"How accurate is GF16 against bf16 on a benchmark" 0 0 2 (gf16, benchmark) 0 RESEARCH

Neither brief came with sources. Intake is therefore INTAKE_NO_SOURCES, all 27 lessons are GAP, and map_verdict(0,0,0) is MAP_NEED_SOURCES.

Defects fixed

  1. The test fixture miscounted the villa brief. demo_villa_sale_brief asserted route(1, 0, 0, 4) because it counted "List" as a hit on "listing". The spec's own whole-word rule gives 3.
  2. The keyword rule was underspecified. "Whole words, case-insensitive" did not say how to split "sea-view", or whether stems, plurals or repeated words count. The new constant KEYWORD_MATCH states the rule.
  3. Sales and content delivery could deadlock. In sales and content, a DELIVER lesson is verified only by EVIDENCE_CLIENT_APPROVAL. But action_allowed let only a VERIFIED item go to a client, so the client could never see the draft they had to approve.
    • Now a DRAFT can be sent to the client with the user's yes, and it stays a DRAFT until the approval comes back as evidence.
    • Publishing still needs VERIFIED.
    • GAP, OPEN and PUBLISHED items still cannot be sent.
  4. No rule for the Bee task when nothing is OPEN. This is the case for every brief without sources. "Pick the first OPEN lesson" had nothing to pick. New: bee_target(), TARGET_FIRST_GAP and GAP_BEE = "researcher" (every *_BEES list has it). Also new: ground(), which turns a GAP into OPEN or LOCKED once a source is attached.

SKILL.md changes:

  • names KEYWORD_MATCH in the routing step;
  • says sources the agent finds itself are not intake (they come in through the Bee and ground);
  • says a GAP row keeps its title and only the status cell says GAP;
  • says first_grounded is the grounded lesson with the lowest step (now stated in the spec too);
  • explains where active_bees comes from;
  • adds the no-OPEN case;
  • corrects the send gate.

Left open (product decisions, not changed here)

  • In the content domain, DELIVER needs a client approval. Who is the client of a blog post?
  • The vocabulary is thin. It has no "list", "sell", "accuracy" or "bf16", and no plurals. "How accurate is the golden float format vs bf16 on benchmarks" routes to GENERAL.
  • No function defines how a lesson goes from LOCKED to OPEN. opens_next(DRAFT) says the learner may move on, but not which lesson opens.

Lab (Railway; nothing ran on the Mac)

Run with the lab compiler, version 0.5.2, built from 7181e6bc9, and zig 0.16.0. The spec file on the lab was checked against the local one by sha256 (ccbef1f7...).

  • Per-test report: 12/12 tests pass, 4 invariants proved, 0 vacuous passes.
  • C and JS generation both succeed.
  • Negative controls, one token each:
mutation result
send-draft gate reverted 1 FAIL (client_approves_a_draft_it_was_sent)
bee_target flattened 2 FAIL
after_action VERIFIED guard dropped 1 FAIL

Publication blocker (not fixed here: it needs foreign code)

The t27.ai manifest is still built from t27 commit 1d9c5960d (2026-10-08). trinity's nightly "t27 world scan" has failed since 2026-10-09; on the latest run, its gate agents-from-specs reports 54 problems:

Until that .mjs gate changes, no t27 spec merged after Oct 8 reaches the MCP, including this one and #9952.

🤖 Generated with Claude Code

…9951)

Ran .claude/skills/t27f/SKILL.md end to end on the villa brief and the
GF16 topic against the merged spec (7181e6b). Four rule defects:

- demo_villa_sale_brief asserted route(1, 0, 0, 4) by counting "List" as
  "listing"; a whole-token count gives 3 sales hits. Fixed the fixture.
- "whole words, case-insensitive" left splitting, stems, plurals and
  repeats open. New KEYWORD_MATCH states the rule the host applies.
- Sales and content DELIVER is verified only by EVIDENCE_CLIENT_APPROVAL,
  but sending to a client required VERIFIED, so the client could never
  see what they must approve. A DRAFT may now be sent to the client with
  the user's yes and stays a DRAFT; publishing still needs VERIFIED.
- No rule said where the Bee goes when nothing is OPEN, which is every
  brief without sources. New bee_target(), TARGET_FIRST_GAP, GAP_BEE and
  ground() (GAP -> OPEN or LOCKED once a source is attached).

SKILL.md follows: KEYWORD_MATCH in routing, sources found by the agent
are not intake, GAP rows keep their title, first_grounded is the lowest
step, the no-OPEN case, and the corrected send gate.

Lab (Railway, t27c 0.5.2 built from 7181e6b, zig 0.16.0): test-report
12/12 pass, 4 invariants proved, 0 vacuous; gen-c and gen-js succeed.
Negative controls, each one token: send-draft gate reverted -> 1 FAIL;
bee_target flattened -> 2 FAIL; after_action guard dropped -> 1 FAIL.

Refs #9951
Refs gHashTag/trinity#1677

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@gHashTag
gHashTag enabled auto-merge (squash) October 17, 2026 14:22
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-17 14:22:18 UTC

Summary

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

These columns do not partition: 0 + 49 + 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)=e769ef021713 != 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 3de6907 into master Oct 17, 2026
26 of 29 checks passed
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