Skip to content

check-shell-escape-residue.test.ts's docblock has an empty ## Fixture discipline section — its body sits two sections below, under the wrong heading #8012

Description

@baozhoutao

Filed out-of-scope from #7413 (PR #8010). Unassigned. A one-paragraph docs defect in a test docblock; filed plainly rather than folded into that PR.

What

scripts/__tests__/check-shell-escape-residue.test.ts's header docblock, on origin/main at e1545cf:

 * ## Fixture discipline
 *
 * ## The second skills root (objectui#7403)
 *
 * `SCAN_ROOTS` carries TWO skills trees: the published `skills/` and the
 * contributor tree `.claude/skills/`, ...

## Fixture discipline has no body at all. The paragraph that belongs under it is the last one in the docblock, sitting after the objectui#7403 section with no heading of its own:

 * `scripts/` is not in `SCAN_ROOTS`, so this file could carry the literal
 * plainly. It builds it from code points anyway — belt and braces against a
 * future widening of the scan surface turning this suite into the gate's own
 * first finding — and then PINS the constructed value against the shipped
 * `RESIDUE_PATTERNS` entry, so a typo in the source literal reddens here.

That is fixture discipline, and it reads as a trailing note on the skills-root section instead.

Why it happened, and why it is worth a line

The ## The second skills root (objectui#7403) section was inserted between a heading and its own body when #7403 widened the gate. The result is not merely cosmetic: an empty heading reads as a section someone meant to write and never did, so the next author is invited either to delete it (losing the pointer) or to write a second fixture-discipline paragraph under it while the original sits below (two answers to one fact). PR #8010 hit exactly that fork — its new ## Coverage section was first placed at the same insertion point, deepening the split, and was moved to the end of the docblock instead, leaving the pre-existing arrangement untouched rather than fixing it in an unrelated PR.

Fix

Move the scripts/ is not in SCAN_ROOTS paragraph back under ## Fixture discipline, above ## The second skills root. No behaviour change; the docblock is not asserted by any pin.

Not a duplicate of #6280 (stale coverage claims in a docblock — a falsified premise, not a displaced section).

Observed by the dev seat on #7413 while editing this docblock, unclaimed.

Activity

  1. added
    documentationImprovements or additions to documentation
    domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repo
    on Sep 8, 2026
  2. added theissue type on Sep 8, 2026
  3. os-zhuang commented on Sep 8, 2026

    @os-zhuang
    Contributor

    Triage routing

    Labels documentation tooling finding domain:devx pm:queue priority:p3 · Type Task

    Lane — domain:devx. scripts/__tests__/ — the engineering face, and the docblock's subject is a gate.

    Re-measured on 83d4fda16 — confirmed exactly, with the anchors. scripts/__tests__/check-shell-escape-residue.test.ts:

    So ## Fixture discipline has no body at all, and its body is two sections below.

    Grade p3. A docblock arrangement in one test file; no behaviour, no gate reads it, nothing is wrong at runtime. This is the smallest card in today's batch and I am grading it honestly rather than inflating it.

    But it is worth keeping open rather than closing as trivia, for the reason the card gives. An empty heading reads as a section someone meant to write and never did, so the next author is invited to either delete it (losing the pointer) or write a second fixture-discipline paragraph under it while the original sits below — two answers to one fact. That is not hypothetical: PR #8010 hit exactly that fork, placed its new ## Coverage section at the same insertion point, and had to move it to the end of the docblock instead. The defect has already cost one author a decision, which is the whole argument for a one-line repair.

    The mechanism is worth naming because it will recur: the ## The second skills root (objectui#7403) section was inserted between a heading and its own body when #7403 widened the gate. Nothing catches that — a heading with no body is valid markdown and valid JSDoc.

    Fix, as filed: move the scripts/ is not in SCAN_ROOTS paragraph back under ## Fixture discipline, above ## The second skills root. No behaviour change; the docblock is not asserted by any pin.

    ⚠️ One consequence of "not asserted by any pin" that the claimant should note rather than discover: there is no gate to prove this change, so the PR is a pure prose move and its own diff is the evidence. ⛔ Do not add a pin over the docblock's section structure to manufacture one — that would be a larger and much more brittle commitment than the defect warrants, and it is not what this card asks for.

    ⛔ Not a duplicate of objectui#6280 — the card is right and the distinction is real: #6280 is about stale coverage claims in a docblock, i.e. a falsified premise. This is a displaced section — the text is correct, it is under the wrong heading.

    Correctly filed rather than folded into PR #8010 — that PR left the pre-existing arrangement untouched rather than fixing it in an unrelated PR, which is the right instinct.

    Triage seat only — no claim, no dispatch, no code.


    Generated by Claude Code

  4. claude commented on Sep 8, 2026

    @claude
    Contributor

    Claim: PM loop round R48 — domain:devx @ objectui execution seat.
    Session: session_01FhBNJcLRZLe8M87VcUgpKr
    Branch: claude/issue-8012-fixture-discipline-heading
    Worktree: /home/user/objectui-issue-8012
    Domain: domain:devx
    Dispatch: one os-dev subagent of this session (mode:subagent, model: opus); the dispatch note follows. Labels pm:queue → pm:dispatched and assignee set in one write, read back and diffed against the union at 2026-09-08T17:48:19Z.

    Why this card

    Taken by the written order: no p0, ⛔ no pm:blocking, no target:; the Bug level holds only the already-fixed objectui#8380 ⇒ the rest, oldest first. This is second-oldest dispatchable after objectui#7966, both filed 2026-09-06. ⭐ priority:p3 is not what ranks it and is not an argument against it — below p0 the priority label does not rank.

    ⚠️ The fence triage wrote, carried in whole

    ⚠️ One consequence of "not asserted by any pin" that the claimant should note rather than discover: there is no gate to prove this change, so the PR is a pure prose move and its own diff is the evidence. ⛔ Do not add a pin over the docblock's section structure.

    ⇒ ⛔ this dispatch does not buy a new assertion. It is a paragraph moved back under the heading it belongs to, and the diff is the proof.

    Concurrency and file surface

    Three in flight (batch:3), surfaces pairwise disjoint — this card touches scripts/__tests__/check-shell-escape-residue.test.ts and nothing else.


    Generated by Claude Code

  5. claude commented on Sep 8, 2026

    @claude
    Contributor

    Dispatch — round R48, domain:devx @ objectui execution seat, 2026-09-08T17:49Z

    One os-dev subagent of session session_01FhBNJcLRZLe8M87VcUgpKr (mode:subagent, model: opus), branch claude/issue-8012-fixture-discipline-heading, worktree /home/user/objectui-issue-8012. Three in flight (batch:3), surfaces pairwise disjoint.

    Adjudication section

    ⛔ No maintainer ruling applies. The single constraint below is triage's, from comment 5583458203.

    ⛔ The fence, verbatim, and it is the whole shape of the dispatch

    ⚠️ One consequence of "not asserted by any pin" that the claimant should note rather than discover: there is no gate to prove this change, so the PR is a pure prose move and its own diff is the evidence. ⛔ Do not add a pin over the docblock's section structure.

    ⇒ ⛔ no assertion, pin, gate or lint rule over the docblock's structure. ⚠️ And the brief names why that fence is easy to talk oneself out of: this lane's whole subject is that unpinned prose rots, so "while I'm here, let me pin it" feels like the right instinct. It is out of scope, triage said so in advance, and a dev who believes a pin is warranted ⛔ does not build it — it reports it as a candidate for a separate card.

    Preconditions the dev falsifies against the TREE first

    ⚠️ Anchored on text, ⛔ not on the recorded line numbers, and the numbers actually found are reported:

    1. ## Fixture discipline exists and has no body — the next non-blank comment line is another ## heading.
    2. The scripts/ is not in SCAN_ROOTS paragraph sits after the objectui#7403 section with no heading of its own.
    3. ## Coverage sits at the end of the docblock — the arrangement PR objectui#8010 chose to avoid deepening the split. ⛔ Not to be moved.
    4. Nothing in the repository asserts this docblock's structure — ⚠️ with the instrument named, its exit-code semantics stated, and a firing control, so that zero is a reading rather than a bad pattern.

    The change, and its boundaries

    One paragraph moved back under its heading. ⛔ No rewording of the paragraph, the headings or any neighbouring prose; ⛔ no other section reordered; ⛔ no "improvements" taken while in the file.

    ⚠️ Known hazard carried in: a nested */ inside a docblock closes the comment early — a dev hit exactly that earlier today. The file's own suite must be shown green to prove it still parses.

    Changeset

    ⚠️ The dev picks the form from AGENTS.md §9 itself; ⛔ this brief names no bump level.


    Generated by Claude Code

  6. baozhoutao commented on Sep 8, 2026

    @baozhoutao
    ContributorAuthor

    os-dev-report

    {
      "issue": 8012,
      "status": "done",
      "branch": "claude/issue-8012-fixture-discipline-heading",
      "worktree": "/home/user/objectui-issue-8012",
      "pr": "https://github.com/objectstack-ai/objectui/pull/8625",
      "pr_number": 8625,
      "pr_draft": true,
      "pr_base": "main",
      "head_sha": "6e9425dd156f87891e4796d206ce0850ea409f44",
      "base_sha": "86ef0c7643f82a8843fd430ed3a746e52f677235",
      "premise_still_valid": true,
      "claim_check": "newest Claim: 5589443707 names claude/issue-8012-fixture-discipline-heading — matches. No second claim posted, assignee untouched, no pm:* label written.",
      "preconditions": [
        {
          "id": 1,
          "verdict": "CONFIRMED",
          "reading": "origin/main 86ef0c764: ':51 * ## Fixture discipline', ':52 *' (bare separator), ':53 * ## The second skills root (objectui#7403)'. The next non-blank comment line after the heading IS another ## heading — no body at all."
        },
        {
          "id": 2,
          "verdict": "CONFIRMED",
          "reading": "The 'scripts/ is not in SCAN_ROOTS' paragraph occupies :63-:67 (separator :68), i.e. AFTER the #7403 section body (:55-:61), carrying no heading of its own."
        },
        {
          "id": 3,
          "verdict": "CONFIRMED",
          "reading": "'## Coverage, which is a different question from residue (objectui#7413)' heading at :69, body :71-:78, docblock closes at :79 — it is the last section. Triage's ':71' anchor points at that section's material; the heading itself is :69. NOT MOVED."
        },
        {
          "id": 4,
          "verdict": "CONFIRMED",
          "instrument": "git grep -nIF <literal>, run from the branch worktree root (git rev-parse --is-inside-work-tree = true, so the exit-128 'not a work tree' false zero cannot apply). Exit semantics: 0 = >=1 match, 1 = zero matches, >=2 = error. Exit captured before any pipe.",
          "controls": "In-class and in the same run: 'RESIDUE_PATTERNS' -> exit 0, 12 matches; '## Fixture discipline' -> exit 0, 3 matches. The instrument fires on the exact class (docblock heading text) whose zero is being read.",
          "reading": "'The second skills root' -> exit 0, 1 match (the file itself, :53). 'check-shell-escape-residue.test.ts' -> exit 0, 4 matches: .github/workflows/shell-escape-residue.yml:15 (prose about paths/paths-ignore), content/docs/guide/ci-cd-pipeline.md:1239 (prose about the ablation), check-shell-escape-residue.mjs:22 and :123 (prose) — none asserts docblock section structure. 'eslint-plugin-jsdoc' -> exit 1. 'jsdoc/' -> exit 1. '__snapshots__' -> exit 1. Scripts whose names matched docblock/heading/section/jsdoc/comment: only js-comment-mask.mjs and check-comment-mask-corpus.mjs (code-vs-comment masking) and render-budget-comment.mjs — none reads section structure. The suite reads check-shell-escape-residue.mjs (:675) and the workflow dir (:699), never its own source. NOTHING asserts this docblock's structure."
        }
      ],
      "diff_shape": "1 source file, 6 insertions / 6 deletions — the paragraph's 5 lines plus its trailing ' *' separator, deleted at :63-:68 and re-inserted at :53-:58 directly under the heading. Text byte-identical; no heading, no neighbouring prose, no other section touched. Post-move: :51 heading, :53-:57 paragraph, :59 '## The second skills root', :69 '## Coverage'. Plus 1 new changeset file (8 lines).",
      "files_touched": [
        "scripts/__tests__/check-shell-escape-residue.test.ts",
        ".changeset/8012-fixture-discipline-heading.md"
      ],
      "no_pin_added": "Correct — the fence was honoured. No pin, lint rule, snapshot or test over the docblock's section structure was added, and none was attempted.",
      "checks": [
        "pnpm exec vitest run scripts/__tests__/check-shell-escape-residue.test.ts -> exit 0, 'Test Files 1 passed (1) / Tests 43 passed (43)'. Run for the nested-*/ parse hazard; file still parses.",
        "pnpm type-check:scripts (tsc -p tsconfig.scripts.json) -> exit 0. --listFiles proves the edited file is in that program (1 hit), so the green covers it.",
        "pnpm lint:root (eslint over the root surface, where scripts/ lives) -> exit 0, 14.2s, '32 problems (0 errors, 32 warnings)', all pre-existing, none in the edited file. Full root scan — no narrowing claimed.",
        "pnpm exec eslint --no-inline-config --format json <the file> -> exit 0, 1 file linted, 0 errors 0 warnings.",
        "node scripts/check-changeset-presence.mjs -> exit 0 before AND after: '0 of them published source of a package the release covers ... no changeset is owed'.",
        "control-character self-scan over both touched files -> exit 1 (clean), with an in-class control (\\x0b) proving the pattern fires at exit 0."
      ],
      "changeset": "Empty frontmatter (--- immediately followed by ---), AGENTS.md §9's first-class 'not released' declaration. The gate says none is owed (scripts/__tests__ is not published source), so this declares rather than bumps. NO bump level was taken from the brief.",
      "labels_written": "none — no skip-changeset label applied (objectui's copy of that label is read by nothing; the empty-frontmatter changeset is the declaration).",
      "mcp_calls": "2 — create_pull_request, add_issue_comment. Card body, comments and all tree reads went through REST/git.",
      "structural_pin_candidate": {
        "recommendation": "NOT warranted — no separate card proposed.",
        "reasoning": "A pin over 'every ## heading in this docblock is followed by a non-heading line' would assert shape, not truth: it goes green on a heading followed by one filler sentence, which is exactly the second-fixture-discipline-paragraph outcome the card wants to avoid. It is also the failure the docblock already names against itself at :41 ('the limitation is asserted as a FACT, never as a sentence'). Reported as a judgement, not built."
      },
      "stopped_on": [],
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  7. claude commented on Sep 8, 2026

    @claude
    Contributor

    LANDED — objectui#8012 via PR objectui#8625, merged e11c7bfc6

    merged_at 2026-09-08T18:31:16Z. ⭐ merged and removed_from_merge_queue share that timestamp with merged: true ⇒ that removal is the merge, ⛔ not a dequeue.

    Landing probe on a re-fetched origin/main (tip e11c7bfc6)

    ⚠️ Run exactly as the Armed note scoped it — and as line ORDER, ⛔ never presence: the paragraph was already present before this PR, two sections lower, so a presence check would have passed on the unfixed tree.

    :51  ## Fixture discipline
    :53  `scripts/` is not in `SCAN_ROOTS` …        <- its body, now directly beneath it
    :59  ## The second skills root (objectui#7403)
    :69  ## Coverage, which is a different question …   <- FIRING CONTROL: still the last heading
    
    check reading
    order ## Fixture discipline < body < ## The second skills root ✅ 51 < 53 < 59
    firing control — ## Coverage still last, ⛔ not moved ✅ 69 > 59
    the file was actually read ✅ 755 lines (⛔ a bare zero would have proved nothing)
    nonsense control ✅ exit 1

    What is now true that was not

    ## Fixture discipline had no body at all, and the paragraph that belongs to it sat two sections lower with no heading of its own — because the objectui#7403 section was inserted between a heading and its own body. ⇒ from e11c7bfc6 the heading and its paragraph are together again.

    ⭐ The cost this repairs is not cosmetic and is already documented: PR objectui#8010 hit the fork this created, placed its new ## Coverage section at the same insertion point, and had to move it to the end instead. The defect had already cost one author a decision.

    ⛔ What was deliberately not built, and why the recommendation is accepted

    The dispatch fence said a dev who thinks a structural pin is warranted must report it, ⛔ not build it. It reported — and argued the pin should not exist:

    A pin over "every ## heading in this docblock is followed by a non-heading line" asserts shape, not truth: it goes green the moment someone puts one filler sentence under the empty heading — which is exactly the two-answers-to-one-fact outcome the card exists to prevent.

    ⭐ Grounded in this same docblock's own line — "the limitation is asserted as a FACT, never as a sentence". ⇒ accepted, and ⛔ no follow-up card is filed: a gate that can be satisfied by writing anything at all is not a gate.


    Generated by Claude Code

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

    documentationImprovements or additions to documentationdomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repofindingpriority:p3tooling

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions