Skip to content

spec(t27f): reel status goes through the topic engine, not a rule of its own #9999

Closed

Description

@gHashTag

Problem

specs/t27f/reel_t27_basics.t27 (#9996, PR #9997) draws all 27 lessons of the t27 basics course as published, by a rule of its own: lesson page live AND lesson spec passes -> published. The project already has the gate that decides this, specs/t27f/topic_engine.t27 (verify, evidence_accepted, after_action), and that gate disagrees. The engine routes the course brief to DOMAIN_ENGINEERING, where a DELIVER step needs a review, and publishing needs a VERIFIED item. Neither trinity PR that wrote the course (#1463, #1472) has a review. So lessons 7-9, 16-18 and 25-27 have not earned verified, and their live pages do not make them published. gHashTag/trinity#1677 asks for one engine without duplicated orchestration code, and a second status rule in a reel is exactly that duplication.

Proposal

  • topic_engine.t27: earned_status(step, domain, grounded, test_pass, reviewed, live), which walks the measurements through the existing gates and nothing else (no source -> GAP; DRAFT; each piece of evidence through verify; a live item through after_action(PUBLISH)).
  • reel_t27_basics.t27: drop its own STATUS_* codes and rule; take the domain from route and the status from earned_status; record the review measurement; the evidence slide says "18 published; 9 wait for a review".

Boundary

  • specs/t27f/topic_engine.t27
  • specs/t27f/reel_t27_basics.t27

User Scenarios

  • Given a live lesson page whose DELIVER-stage lesson has a passing spec but no review, when the reel computes its status, then the cell is drawn as a draft, not published.
  • Given a reel that marks that lesson published anyway, when its spec is run, then a_status_is_earned_not_chosen fails under t27c and t27b.

Requirements

  • FR-001: earned_status MUST return GAP for an ungrounded step and MUST decide every other status only through verify and after_action.
  • FR-002: A live step that is not VERIFIED MUST stay a DRAFT.
  • FR-003: reel_t27_basics MUST NOT define its own status codes or status rule; every cell's STATUS MUST equal earned_status of its measurements.
  • FR-004: The reel's domain MUST equal route of the measured keyword hits.
  • FR-005: Both specs MUST give the same per-test verdict under t27c and t27b.

Success Criteria

  • t27c test-report specs/t27f/topic_engine.t27 reports 13/13 tests passing with 0 vacuous, and t27b test specs/t27f/topic_engine.t27 --check reports 13/13 tests passing.
  • t27c test-report specs/t27f/reel_t27_basics.t27 reports 7/7 tests passing with 0 vacuous, and t27b test specs/t27f/reel_t27_basics.t27 --check reports 7/7 tests passing.
  • 3 planted faults (lesson 7 drawn published, lesson 7 reviewed with its status left draft, domain set to research) each fail the expected test under both compilers.
  • t27f_view draws 15 of 15 stills; the overview has 18 published cells and 9 draft cells.

Activity

  1. added
    shape-refusedClosed by the issue-shape gate (specs/policy/issue_shape.t27); a passing edit reopens it
    on Oct 17, 2026
  2. github-actions commented on Oct 17, 2026

    @github-actions
    Contributor

    Closed by the issue-shape gate (specs/policy/issue_shape.t27, #7498): an issue must have the template's sections. Edit the body; an edit that passes reopens it.

    • missing: ## Success Criteria -- an outcome a machine can settle: a number with a unit, a backticked file, exit 0, or a backticked command
  3. removed
    shape-refusedClosed by the issue-shape gate (specs/policy/issue_shape.t27); a passing edit reopens it
    on Oct 17, 2026
  4. github-actions commented on Oct 17, 2026

    @github-actions
    Contributor

    The shape check passes now (specs/policy/issue_shape.t27); reopened.

  5. added a commit that references this issue on Oct 17, 2026
    de2cff8
  6. gHashTag commented on Oct 17, 2026

    @gHashTag
    OwnerAuthor

    Done in #10000 (merged). The body was edited to pass the shape gate first, so the issue closes as completed, not refused.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions