Skip to content

hosting: pass_ct joins the verdict vocabulary -- the words, the steward, the rules mirror (Refs #5980) - #12792

Merged
gHashTag merged 1 commit into
masterfrom
host/pass-ct-words
Oct 27, 2026
Merged

gHashTag merged 1 commit into
masterfrom
host/pass-ct-words

Conversation

@gHashTag

Copy link
Copy Markdown
Collaborator

Refs #5980, #12751, #12788 (the pass_ct label in t27b), #12789 (the lab aggregates).

The three layers that name and judge a lab verdict learn the new word:

  • specs/hosting/row.t27: T27B_WORDS grows to 11 with pass_ct appended LAST -- zero index shift, every existing TW_* code stays put -- TW_PASS_CT = 10, T27B_VERDICTS = 11, and t27b_votes counts it a vote; the numbering invariant updated;
  • specs/tri/t27b/steward.t27: is_pass answers true for the appended index (12 in the rules' VERDICTS) -- a folded-only pass verified at compile time and counts as a pass in every ratchet finding;
  • scripts/tri_loop/t27b_rules.py: the VERDICTS mirror appends pass_ct, so verdict("pass_ct") resolves instead of raising RulesUnavailable (whose own message already says: add it to the spec first).

Verification (measured on this tree): row.t27 test-report 5 tests FAIL 0 (the numbering invariant carries TW_PASS_CT == 10 and T27B_VERDICTS == 11); steward.t27 137 tests FAIL 0; t27b_rules.py py_compile green. The word is appended, not inserted: no stored ledger code moves.

@gHashTag
gHashTag enabled auto-merge (squash) October 27, 2026 06:27
@tri-claw

tri-claw Bot commented Oct 27, 2026

Copy link
Copy Markdown

Summary by t27-bees

Checked by the t27 compiler

t27c parse, parse-complete and typecheck on each changed .t27 file at 4d69ec7. Nothing was generated, built or run. A pass means the file is well formed, not that it is right.

  • specs/hosting/row.t27: parses and typechecks.
  • specs/tri/t27b/steward.t27: parses and typechecks.

Read by the model

This change introduces a new verdict word pass_ct (compile-time verified pass) across the three layers that name and judge lab verdicts: the host vocabulary (row.t27), the rules mirror (t27b_rules.py), and the steward (steward.t27). The word is appended at the end of each list to preserve existing indices.

Worth a look

  • specs/tri/t27b/steward.t27:93 — is_pass checks v == 12 (the t27b_rules.py VERDICTS index for pass_ct), but specs/hosting/row.t27 defines TW_PASS_CT = 10. The diff does not show the translation layer between the host's verdict codes and the rules' verdict indices; if the steward receives the host's raw code (10), this check will not recognize pass_ct as a pass.

  • scripts/tri_loop/t27b_rules.py:27 — VERDICTS now has 13 entries (indices 0–12), while DELTAS has 6 and RATCHETS has 10. Any code that uses a verdict index to look up into DELTAS or RATCHETS will index out of bounds for pass_ct (index 12) and for the pre-existing missing (10) and lab_error (11). The diff does not show guard logic for this.

  • specs/hosting/row.t27:84–85 — The invariant asserts TW_PASS_CT == 10 and T27B_VERDICTS == 11, which matches the local array. However, the steward operates on the rules' 13-element indexing (where pass_ct is 12). The invariant does not cross-check the rules' numbering, so a mismatch in the bridging code would not be caught here.


Read: 3 files, +13 -6, the whole diff. Head 4d69ec7. Model: openai-compatible/nvidia/nemotron-3-ultra-550b-a55b. Commands: @t27-bees review | summary | help | pause | resume. Free for every repository.

@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-27 06:43:07 UTC

Summary

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

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=67adcf31aff7 != 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 37ca933 into master Oct 27, 2026
27 of 39 checks passed
github-actions Bot pushed a commit that referenced this pull request Nov 7, 2026
…er reds (#13257)

* ci: clear three master reds from #13179 and #13175 (Refs #13179)

- timeout_terminal.t27: drop the local `same` body, use std::mem::bytes_eq
  (duplicate-bodies: bytes_eq copied [12, 3] back to [11, 3]).
- timeout_terminal.t27: replace the developer home path with a
  repo-relative one (scan: hardcoded developer home path).
- igla-coder-kernels-literature.md: mark the three `tri papers`
  mentions "not built yet" (documented-commands ceiling back to 68).

Same content as the two fix commits in #13211, applied unchanged so the
later merge of that PR is clean on these hunks.

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

* ledger: restore the five pass_ct blocker fields dropped by c15eabe

The bless in c15eabe wrote the five pass_ct entries back with an empty
blocker, undoing 5c74c06. loop-tools-gate asserts that every non-pass
entry has a blocker and a known reason, so it is red on master since
f451395 and on every PR touching specs/tri/t27b. The five strings are
restored byte for byte from 5c74c06; nothing else changes.

Refs #13184

* feat(t27os): Telegram account link contract

specs/t27os/telegram_link.t27 states when a verified Telegram account may be
bound to the current local profile: one profile, one fresh attempt, a 300 s
deadline, a result taken once while pending, an explicit confirm that checks
the attempt again, issuer and client binding, no automatic replacement of a
linked subject, and an explicit unlink. Every end of an attempt clears its
handle, so a late result is refused. 11 tests, sealed. No host call, UI,
provider key or profile file format change.

Closes #13255
Refs dmitrii-f-t27#17

* gen(t27b): regenerate gen/c/tri/t27b/steward.c from steward.t27

steward.t27 counts pass_ct as a pass since #12792, but steward.c was not
regenerated, so the loop-tools gate check that gen/c/tri/t27b/steward.c is
t27c gen-c specs/tri/t27b/steward.t27 byte for byte fails. On master it
stayed hidden because the ledger step before it failed first. Regenerated
with t27c built from e96c497; the diff is the three lines of the pass_ct
branch.

Refs #13184

* fix(t27os): name a linked account by issuer, client and subject (FR-002)

A stored link was compared by subject alone. FR-002 names an account by
issuer, configured client and verified subject together, and OIDC only
makes sub unique within one issuer (one client with pairwise subjects),
so the same subject under another issuer or client is another account:
link_decision and link_confirm_candidate now take link_cfg for the stored
link and return LINK_CONFLICT when it does not match. The comment no
longer overstates the OIDC rule for sub, and the subject's character
edges (33, 126, 32, 127) are tested. 12 tests, resealed.

Refs #13255

---------

Co-authored-by: Dmitrii Vasilev <admin@t27.ai>
Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
cursor Bot pushed a commit that referenced this pull request Nov 9, 2026
…test asks is_pass (Refs #12751) (#13097)

Two parts, both needed.

1. gen/c/tri/t27b/steward.c was not regenerated when #12792 (37ca933)
   added `if (v == 12) { return true; }` (pass_ct) to is_pass in
   specs/tri/t27b/steward.t27. scripts/tri_loop/t27b_rules.py compiles and
   calls this C, so every consumer read is_pass(pass_ct) = false.
   Regenerated with: t27c gen-c specs/tri/t27b/steward.t27 > gen/c/tri/t27b/steward.c
   The output hashes d1941f3b..., the gen_hash_c already recorded in
   .trinity/seals/t27b_T27bSteward.json (spec_hash 8fa40d90... unchanged),
   so the seal is not re-saved. No hand edit of the generated file.

2. scripts/ci/test_a_t27b_spec_cannot_move_silently.py kept its own success
   list ("pass", "pass_vacuous") for the blocker-and-reason check, so the
   five pass_ct rows of the committed ledger (blocker "", as bless writes
   them) failed it. The check now skips the rows the spec's is_pass counts
   as a pass, read through t27b_rules. The cap check is unchanged: it still
   counts by the tuple, as bless (ledger_counts) does, 140 == 140.
   Foreign lines: +3 / -3 (net zero; the text/real lines are merged to pay
   for the import line).

Controls (python3 3.14.6, one test file):
  regen C + patched test, real ledger      all ok, rc 0
  neg: blocked row with blocker ""         FAIL blocker line, rc 1
  neg: pass_ct row -> blocked, blocker ""  FAIL blocker line, rc 1
  stale C + patched test                   FAIL blocker line, rc 1
  regen C + original test                  FAIL blocker line, rc 1

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

1 participant