Skip to content

spec(igla): own_model_board.t27 -- the own-model map as an IGLA board event (Closes #10037) - #10048

Merged
gHashTag merged 1 commit into
masterfrom
spec/own-model-board-10037
Oct 17, 2026
Merged

gHashTag merged 1 commit into
masterfrom
spec/own-model-board-10037

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Closes #10037

What

specs/igla/own_model_board.t27, a pure-t27 spec that states the own-model map
(specs/igla/own_model.t27, epic #10024) as the event the IGLA board already renders
({job, stage, msg <= 500, progress 0..1, metrics <= 4 KB}, gHashTag/igla-coder-gpu board/server.py):

field value held to
job, stage "own_model"
progress 0.39 mean_pct(0, 27) / 100, inside 0..1
msg "1 published, 11 verified, 8 drafts, 7 gaps; 39%" the five numbers are read back out of the text and compared to count_status(own_model::STATUS, ...) and the overall mean; the words between them are checked
metrics {"lens_pct":[45,45,28],"cells":[{"status":4,"pct":60},...]} CELL_STATUS / CELL_PCT equal own_model::STATUS / PCT cell by cell; LENS_PCT[l] == mean_pct(9l, 9); size 621 bytes, computed from the keys and values (worst case, every pct 100, also under 4096)

Every field is a literal so a declaration backend can print it. The tests tie each literal to
own_model, so if own_model.t27 changes and this file is not updated, this spec fails. The
negative control below shows that happening.

Tests: the_metrics_are_own_models_arrays, a_gap_cell_is_never_above_zero_percent,
the_tally_sums_to_twenty_seven, the_message_is_the_tally,
progress_is_the_overall_percent_over_a_hundred, the_metrics_fit_the_board. Each one also
carries a wrong fixture that must be refused: a gap drawn at 10 percent, a copy one cell off, a msg
with one number or one word wrong, a progress one point off or outside 0..1.

Lab output (Railway t27c lab, not the Mac)

Tree: gHashTag/t27 c92f453 (master) + this file, sha256 d26d5128...6fae.
t27c 0.5.2 built from 9a7d54aaf, zig 0.16.0.

--- test report: specs/igla/own_model_board.t27 ---
  pass  the_metrics_are_own_models_arrays
  pass  a_gap_cell_is_never_above_zero_percent
  pass  the_tally_sums_to_twenty_seven
  pass  the_message_is_the_tally
  pass  progress_is_the_overall_percent_over_a_hundred
  pass  the_metrics_fit_the_board

  tests       6
  pass        6
  FAIL        0
  invariants  1   proved -- comptime, so compiling IS the check
  rate    100.0%

  runtime asserts executed, per test (#6509; a pass with 0 is vacuous, T730):
       9  the_metrics_are_own_models_arrays
      36  a_gap_cell_is_never_above_zero_percent
       7  the_tally_sums_to_twenty_seven
       9  the_message_is_the_tally
       4  progress_is_the_overall_percent_over_a_hundred
       3  the_metrics_fit_the_board
  vacuous passes  0 of 6  (passed with 0 runtime asserts executed)

Negative control: on the lab copy only, own_model.t27 PCT[0] was changed from 60 to 61, then restored:

  FAIL  the_metrics_are_own_models_arrays
  tests       6
  pass        5
  FAIL        1
  rate    83.3%

Can t27c gen-js emit this as a generated file under gen/? No.

t27c gen-js specs/igla/own_model_board.t27 succeeds (rc 0, __NOT_EMITTED__ = []) and prints
every field as a value:

export const JOB = "own_model";
export const STAGE = "own_model";
export const MSG = "1 published, 11 verified, 8 drafts, 7 gaps; 39%";
export const PROGRESS = 0.39;
export const LENS_PCT = [45, 45, 28];
export const CELL_STATUS = [4, 4, 4, 3, 3, 3, 3, 0, 0, 4, 4, 4, 4, 4, 3, 3, 0, 0, 4, 4, 5, 4, 3, 0, 0, 0, 3];
export const CELL_PCT = [60, 70, 80, 80, 60, 10, 50, 0, 0, 100, 100, 20, 80, 65, 35, 5, 0, 0, 70, 15, 60, 40, 23, 0, 0, 0, 50];
// t27c gen-js: fn msg_matches was not emitted -- this backend lowers declarations, not bodies.
...

It cannot produce the event itself, though. The output is an ES module of export const lines,
not the JSON object that POST /event takes. The 27 {status, pct} pairs exist only as two
parallel arrays, and gen-js does not evaluate functions. Turning this module into a JSON body
needs a step that imports it and serializes it, which would be new hand-written JS or Python.
So nothing is committed under gen/, and no JSON is written by hand.

The route that stays inside the rules is a JSON target for the existing value layer, t27c gen-json. It would emit the same values as gen-js, with JSON spelling and with the event keys
this spec declares (KEY_LENS, KEY_CELLS, KEY_STATUS, KEY_PCT). That is Rust under
bootstrap/, so it needs the owner's owner-approved-foreign label first. It is not part of this PR.

Not in this PR

  • Delivery: a config-only Railway cron service in igla-judge that POSTs to board.railway.internal:8081/event. It waits on a JSON artifact.
  • The board's stale snapshot (dated 2026-10-05): missing Railway secrets, an owner action.

🤖 Generated with Claude Code

… event (Closes #10037)

Projects specs/igla/own_model.t27 into the event the IGLA board already
renders: job and stage "own_model", progress = overall percent / 100,
msg = "1 published, 11 verified, 8 drafts, 7 gaps; 39%", metrics = the
three lens percentages and 27 {status, pct} pairs (621 bytes, limit 4096).

Every field is a literal so a declaration backend can print it; the tests
hold each one to own_model: the arrays match cell by cell, a gap cell is
never above 0 percent, the tally sums to 27, the msg numbers are read back
and compared to count_status, and the metrics size is computed from the keys.

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

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-17 17:27:08 UTC

Summary

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

These columns do not partition: 0 + 48 + 0 + 1 = 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).

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.

spec(igla): own_model_board.t27 -- project the own-model map onto the IGLA board event

1 participant