Skip to content

skills(objectstack-automation): eval fixtures 5, 7 and 8 of flows-triggers-approvals.json contradict their own assertions — expected_output spells a must_not_contain string or lacks a must_contain one, so the ideal answer fails its own check #26515

Closed

Description

@objectstack-fleet

Filed by the domain:skills#2 seat (session_01LqKsGyMNFwwnbF5FTAqyPn, seat post #19287) from the independent contract review on PR #26495 (card #26362; comment 6434669721, reviewer's hand-back item 1, class c, named producer skills/objectstack-automation/evals). Noticed, not touched, by #26495 (whose own eval 10 is clean); ⛔ not a claim. Dedupe (open + closed): flows-triggers-approvals evals 5 7 8 assertions expected_output → 0 hits.

Origin: skills/objectstack-automation/evals/flows-triggers-approvals.json on origin/main at f9ecf959 (seat re-measured the three fixtures by parsing the file and testing each assertions.must_contain / must_not_contain string against its own expected_output):

id prompt (opening) defect
5 「Add a step that calls our pricing.recalc function to compute the discount…」 expected_output contains its own must_not_contain string label: 'error'
7 「An expense approval only holders of the expense.approve_request capability may start…」 must_contain type: 'position' is absent from expected_output; must_not_contain current_user.positions is present in it
8 「A screen flow: the user uploads the signed contract PDF on the last step…」 must_contain type: 'screen' is absent from expected_output

The same negated-assertion pattern bit this wave's new fixtures twice before they were corrected (the dispatch orders for #26347 and #26362 carry the rule: never write a must_not_contain string inside the ideal answer, say 「never the object field type」 instead).

Reader who acts: the domain:skills lane, one PR to skills/objectstack-automation/evals/flows-triggers-approvals.json (published surface, Tier H; dispatch-gates --tier mandates CONTRACT_REVIEW_TIER for skills/**) plus the file's row in scripts/check-skills-token-ratchet.mjs if the byte count moves (ruling A: cut duplicates first, raise to the measurement, tap quoted).

Suggested grade (triage grades): p2 — an eval whose ideal answer fails its own assertions grades every candidate answer against a target the grader refuses; three of ten fixtures in the package's approvals eval are wrong today.

Who pays: whoever runs the skill evals (skill-creator runs, the eval gate if one is ever wired): three fixtures can never pass as written, so a regression in the taught text hides behind a failure that was already there.

Wanted: for each of 5, 7, 8 decide which side is right — the assertion or the ideal answer — by reading the teaching the fixture tests (SKILL.md's function step / error label shape; the type: 'position' approver spelling vs current_user.positions; the type: 'screen' flow kind), then fix that side only; the ideal answer never spells a must_not_contain string; one PR, the file's ratchet row at the measurement. Acceptance: a parse-and-check of every fixture in the file (ids 1–10) finds no must_contain missing and no must_not_contain present in its own expected_output; check:skill-docs / check:skill-refs / check:skill-examples green. Size: S. Clause-②: no. Metadata-protocol: none.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — documentation · priority:p2 · domain:skills · area:workflow · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-27T06:54Z

    ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01ADHkmSrRBdu9MdC6fc33Uu
    Account: os-steve (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/project-thread-ycobo0 (the card thread's harness push branch, self-reported at 2026-10-27T10:38Z — the measured platform exception to claude/issue-N-slug)
    Worktree: objectstack-issue-26515
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: skills/objectstack-automation/evals/flows-triggers-approvals.json (fixtures 5, 7, 8) + its row in scripts/check-skills-token-ratchet.mjs only if the byte count moves (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: CONTRACT_REVIEW_TIER (dispatch-gates --tier: MANDATORY — skills/**, clause ①, no one-line exit), effort: high (S-size; judgment on which side of each fixture is wrong). Tier H: draft PR, waits for a GOVERNED_APPROVERS approval; ⛔ the dev never readies, arms or enqueues it.
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (eval fixtures; documentation)
    Thread-read: 6435747267
    Premise: holds (seat re-measure on origin/main c8ed4c99, recorded in round-open marker 6439678845 context and the dispatch order)
    Serial constraints cleared: none — no in-flight claim on skills/objectstack-automation/** (seat 2 holds #26071, #26184, #26316, #26334, none on this package); same-day churn f986702 (#26566) on this package is merged

  3. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26515,
      "status": "done",
      "branch": "claude/project-thread-ycobo0",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26636",
      "session": "session_01ADHkmT8qQiLPD3BRTdVxGH",
      "premise_still_valid": true,
      "summary": "Re-checked on origin/main 7c34e5dc (after f9867020): the file holds 11 fixtures and the parse-and-check found exactly the four contradictions the card names (eval 5 spelled the negated error-label string; eval 7 lacked the type: 'position' approver and spelled the negated positions check; eval 8 lacked the type: 'screen' flow kind). For each, SKILL.md and the approvals reference on main agree with the assertions, so only the ideal answers were rewritten: eval 5 says the negation in words, eval 7 names approvers: [{ type: 'position', value: 'finance_manager' }] and says the negation in words, eval 8 opens with the flow kind. No fixture added; 124 lines before and after (net 0 lines in skills/**). The token ratchet row moves 2724 -> 2734 pinned at the measurement (10893 -> 10934 bytes, +41 after paying down 32 bytes in evals 5 and 7; headroom was 3 bytes). Draft PR, Tier H, skip-changeset; governed approvers requested by the relay.",
      "tests": "No test file changed. Acceptance one-liner (parse-and-check of every fixture against its own assertions) on 5c31edd8: `11 fixtures, 0 contradictions` (on origin/main 7c34e5dc before: `11 fixtures, 4 contradictions`, the four listed above). Skill gates on 5c31edd8, exit captured before any pipe: pnpm --filter @objectstack/spec check:skill-docs :: exit 0 (Skill docs in sync); check:skill-refs :: exit 0 (9 generated files in sync); check:skill-examples :: exit 0 (266 prose examples type-check across 3 surfaces); node scripts/check-skills-token-ratchet.mjs :: exit 0 (81 authored bundle files within their ceilings). No ablation: no tested behaviour changed (eval text and a ratchet constant).",
      "gates": "Local subset = the full derived list: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack at 5c31edd8 derived 49 families (2 paths vs merge base 7c34e5dc); all 49 run with exit codes recorded (`<cmd> :: exit N`), every one exit 0, incl. check:pm-dispatch-gates (fast tier, 1935 cases pass, 448 s) and the build-dependent families after a packages/** build under os-verify-lock (VERDICT command-exit 0, 75/75 tasks). --ran reconciliation: `✓ dispatch-gates --ran: 49 derived famil(ies) accounted for — 49 run, 0 NOT-MEASURED (a DERIVED zero)`. --tier: MANDATORY claude-fable-5-1 (skills/** clause ①, no one-line exit), changed lines 17 (+13/-4) under the 3000 threshold. CI on the PR: in_progress at report time (not waited for); the required contexts are read from the PR's check-runs by the seat.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "3 — GitHub MCP reads only: issue_read get_comments #26515 (x2, Claim check), pull_request_read get #26636 (read-back of draft/labels/assignee/reviewers). No MCP write. (subscribe_pr_activity on #26636 is a harness subscription, not a GitHub call.)",
      "api_writes": "2 — both through the fleet-write relay as objectstack-fleet[bot]: with-fleet.sh --via dispatch pr_create (run 40493887595, read-back 7420/7420 bytes identical, assignee os-steve, label skip-changeset) and post-stamped.mjs --comment=26515 (this report). git push of the branch is not a REST write. The session-context's issue_write/update_pull_request assignee+reviewer step was NOT performed (standard order forbids MCP writes); the relay set assignee os-steve and requested the governed approvers (hotlong, os-zhuang).",
      "open_questions": [
        {
          "question": "Eval 7's new approver value: the prompt names the finance_manager position, so the ideal answer names value: 'finance_manager'. The assertion only requires type: 'position'.",
          "options": ["A keep value: 'finance_manager' (matches the prompt)", "B drop the value and name only the type"],
          "recommendation": "A, because the answer should model what the prompt asked and the extra 17 bytes are within the moved ceiling."
        },
        {
          "question": "The card's acceptance says ids 1–10; the file holds 11 since #26502. All 11 were checked.",
          "options": ["A read the acceptance as every fixture in the file (done)", "B restrict to 1–10"],
          "recommendation": "A, the card's wording is 'every fixture in the file'."
        }
      ],
      "out_of_scope_findings": [
        "carrier: none · noted, not filed: the SKILL.md row's ratchet reading (6358) differs from a plain ceil(bytes/4) of the file (6363) because the ratchet excludes CJK codepoints by its own convention; the gate is green and nothing here is wrong — recorded only so the PR-body table (plain convention, 17707 -> 17717 package tokens) is not misread as the ratchet's numbers."
      ]
    }
  4. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #26636 comment 6440866256 · domain:skills#1 · 2026-10-27T11:34Z · Tier H, os-zhuang APPROVED; auto-merge armed by the seat.

  5. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:skills#1 · session_01ADHkmSrRBdu9MdC6fc33Uu · 2026-10-27T11:46Z — PR #26636 merged through the queue (merge commit a76f811e0; Tier H on os-zhuang's approval); the card closed by its Fixes line; pm:dispatched stripped in this act.

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

Metadata

Metadata

Assignees

Labels

area:workflowApprovals and automation — the work that runs without a person driving itdocumentationImprovements or additions to documentationdomain:skillspriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions