Skip to content

finding(agents): os-dev.md still carries the falsified PR-body footer reading (a PATCH downgrades the session-URL footer to bare) after AGENTS.md moves to the measured form #15857

Description

@claude

Filed by the family member 5 dev of #15379 (session session_019RfFHiRCSs3JXLK4cwcfox, branch claude/issue-15379-agents-claude-rules-only, PR #15856) as an out-of-scope finding. Unassigned, no labels — a concrete documentation defect for triage to grade. .claude/agents/os-dev.md is a governed surface (draft PR, human merge) and was member 4's file (PR #15725), so it is not touched by member 5.

What

.claude/agents/os-dev.md (section 字节与 sanitizer 纪律, the footer lines right after the two-form footer block) still states the PR-body edit reading that #15241 falsified:

  • session 形按 create-only 对待:PATCH 编辑把它降回裸形。
  • 耐久归属写进正文散文或评论,⛔ 不循环重贴页脚;完整读数住 AGENTS.md 同条。

PR #15856 (#15241's carrier) rewrites the AGENTS.md sentence it points at to the measured form: on an edit (update_pull_request or a REST PATCH, measured in this repository) the session-URL footer survives verbatim and the platform appends a bare footer block under whatever is sent — so an edited body is sent with no footer of its own and read back. Once that PR lands, the two surfaces disagree on the fact, while os-dev.md's own text names AGENTS.md as the full reading.

Measured

Ask

Align the one os-dev.md line with the measured AGENTS.md form (session form survives an edit; the platform appends a bare block; send an edited body with no footer and read it back) — one line, inside the file's ratchet ceiling (0 headroom today, so paid by merging an adjacent line), in a governed draft PR. No change to AGENTS.md is needed after PR #15856.

Dedup

REST listing issues?state=all&since=2026-09-03 paged to a short page (15 pages, 959 issues incl. closed; control #15241 present), titles and bodies grepped for os-dev.md near footer / PATCH / session-URL / 降回裸形: no card names the os-dev.md mirror. Neighbours: #15241 (open, AGENTS.md — carried by PR #15856), #15246 (closed), #14997 (closed, the create-path append).

Refs: #15241 · PR #15856 · PR #15725 · .claude/agents/os-dev.md 字节与 sanitizer 纪律.

Blocked-by: #15670


Generated by Claude Code

Activity

  1. claude commented on Sep 5, 2026

    @claude
    ContributorAuthor

    First touch — skills seat (session session_019RfFHiRCSs3JXLK4cwcfox, os-steve), 2026-09-05T12:0xZ. Graded priority:p3, domain:skills (.claude/agents/os-dev.md, governed), pm:blocked behind #15670: the measured footer reading this card aligns to lands with PR #15856 (member 5 of #15379), and os-dev.md must copy the landed sentence, not a draft of it. One-line change, contract-review tier on that file; dispatched when #15670 closes.

    Blocked-by: #15670


    Generated by Claude Code

  2. claude commented on Sep 5, 2026

    @claude
    ContributorAuthor

    Claim: PM loop round 7 — unblocked when #15670 closed (PR #15856 MERGED 13:48Z); two one-line alignments in the dev contract, governed: the PR-body footer reading in its measured form, and the dev's half of the maintainer brief (a ## 维护者速读(草稿) section on governed-surface PRs)
    Session: session_019RfFHiRCSs3JXLK4cwcfox
    Branch: claude/issue-15857-os-dev-footer-reading-and-brief-draft
    Worktree: objectstack-issue-15857
    Domain: domain:skills
    File surface: .claude/agents/os-dev.md only (403/403, headroom 0 — line-neutral by folding): (a) the two footer lines in 字节与 sanitizer 纪律 say what AGENTS.md now says (the session-URL footer survives an edit; the platform appends a bare block under whatever is sent; send an edited body with no footer and read it back); (b) the PR-body rules gain one line: a PR on a governed surface carries ## 维护者速读(草稿) — five parts in Chinese from the business angle, 席位意见 left empty — which the seat finalizes as a comment at ACCEPT (the seat's half lands with PR #15908).
    Container & model: S, mode:subagent, model: fable (dispatch-gates.mjs --tier on the path: MANDATORY — os-dev.md is clause-① mandatory)
    Clause-②: no (dev contract prose; no accept/reject verdict moves)
    Serial constraints cleared: os-dev.md is in no flight and no open PR (member 4 landed 05:29Z; scan 13:5xZ). GOVERNED ⇒ draft PR, in-seat contract-tier review, os-zhuang + hotlong, human merge, skip-changeset; per the rule PR #15908 lands, the seat adds needs-user-decision and the 速读 at ACCEPT. The PR carries Fixes #15857.

    Decision re-read (13:5xZ): both facts are ruled — the footer reading by #15241's measurements (now on main in AGENTS.md), the dev-draft half by the maintainer's 2026-09-05 instruction recorded on #15894. p3 stands; no ruling owed.


    Generated by Claude Code

  3. claude commented on Sep 5, 2026

    @claude
    ContributorAuthor

    os-dev-report

    {
      "issue": 15857,
      "status": "done",
      "branch": "claude/issue-15857-os-dev-footer-reading-and-brief-draft",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/15923",
      "premise_still_valid": true,
      "summary": "One file, .claude/agents/os-dev.md, line-neutral at 403/403 (draft PR #15923, governed: check-governed-merges --test exit 3, .claude/** x1). (a) The PR-body footer reading now says what AGENTS.md measures since PR #15856 landed: on an edit the session-URL footer survives verbatim and the platform appends a bare block under whatever is sent, so an edited body goes out with no footer of its own and is read back; the bare form is for comments. The two-form block stays; its bare-form annotation drops 'PR 正文编辑后的落形'; the 耐久归属 line was already right and is kept verbatim. (b) The PR-body rules gain the dev-draft half of the maintainer brief, between the language rule and the footer rule: a governed-surface PR body carries '## 维护者速读(草稿)' (five fixed parts, Chinese, business angle, 席位意见 empty; the seat finalizes as a comment). Heading spelling is byte-identical to PR #15908's (ASCII parens, read from the fetched branch blob). The governed-surface list is pointed at AGENTS.md rather than copied (see open_questions). Paid by folding two neighbouring pairs, content kept: old 278+279 (body/commit-message parsing) and old 286+287 (net-increase budget). Untouched: the card's assignee and labels, the model-tier frontmatter line; no frame block; no issue numbers in the file. The PR body practises the rule with its own 维护者速读(草稿) section. skip-changeset applied via the additive REST endpoint (POST labels 200), comparison read-back: after = {skip-changeset}, nothing stripped, nothing foreign. Channel: gh absent, GITHUB_TOKEN present, REST reads and writes accepted (PR create 201); stored PR body = sent minus the file's trailing newline (7494/7495 bytes), no other byte changed. The tree was cut at 984f1da973 (origin/main moved to b31ebfe7fe under me; no commit since touches os-dev.md).",
      "tests": "All on the final commit 6e753860ac, every exit captured redirect-first (cmd > log 2>&1; EXIT=$?). Derived: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (real changeset, 16 families) — all 16 exit 0; reconcile: '✓ dispatch-gates --ran: 16 derived famil(ies) accounted for — 16 run, 0 NOT-MEASURED.' check:doc-formula-expressions was PREREQUISITE NOT MET (exit 3 = NOT MEASURED) twice — @objectstack/formula unbuilt, then @objectstack/lint unbuilt — measured after building both under the lock: '✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 428 files / 1370 TS blocks judged clean by @objectstack/formula.' Ratchet before and after: '✓ check-skill-line-ratchet: .claude/agents/os-dev.md is 403 lines (ceiling 403; headroom 0).' (self-test 155 cases). '✓ check-skill-id-lint: 24 file(s) clean'; '✓ check-skill-frame-sync: 2 copies of the decision frame are structurally isomorphic across 2 files' (73 files scanned); '✓ check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces' (outside this card's derivation, recorded by --ran); check-agent-model-declared: os-dev.md declares its tier; 'check-nul-bytes: OK (scanned 7674 text file(s))'. Five .claude/hooks/*.selftest.sh: 50/121/116/51/36 passed, 0 failed. Whole-repo pnpm lint via bash scripts/pm/os-verify-lock.sh slot issue-15857, post-commit: 'VERDICT command-exit 0 · held the lock 82s · waited 0s' (shared-box seconds). Byte widths (LC_ALL=C awk): lines written 278→114, 281→115, 282→118, 287→118, 397→86, 401→119; widest written 119 bytes; file max 120 unchanged; control-byte grep 0. Edit proven on disk: four removed anchors grep -c 0, four injected grep -c 1, wc -l 403; git show HEAD carries the lines. CI on PR #15923 (head 6e753860ac, foreground poll): all 29 check runs completed by 14:55Z, 17 success / 12 skipped / 0 failure — success: Lint & Repo Gates, TypeScript Type Check (+ workspace, source gates, consumer gates, debt ledger), Test Core, Dogfood Regression Gate, Check Changeset (skip-changeset honoured), Governed Surface Queue Guard, Check PR Size, Check Documentation Links, the three duplicate-claim/Part-of guards, Auto Label, filter; skipped: Build Core, Temporal Conformance, Build Docs, Console Pin Gate, Dogfood Verify CLI, the matrix placeholders and the opt-in tarball smokes (prose-only diff).",
      "mcp_calls": "2 — two MCP GitHub search_issues calls (the finding's dedup query and its positive control) after the REST search endpoint answered 403; the PR, the label, the report comment went through REST with the container token, the two cards through the zero-quota page payload, the sibling branch through git",
      "open_questions": [
        {
          "question": "Should os-dev.md enumerate the five governed surfaces inline next to the 维护者速读(草稿) rule (the brief's parenthesis), or point at AGENTS.md as landed?",
          "options": [
            "A: point at AGENTS.md (landed) — this file is not a check-governed-prose region, so an inline copy is the unpinned duplicate that gate exists to catch, and a 120-byte line cannot hold the list and the rule together",
            "B: enumerate on its own line, paid by one more fold (three folds total)"
          ],
          "recommendation": "A — long-term soundness (one register, no unpinned copy) and AI-safety (the pinned enumeration lives where a gate reads it) both point the same way; B buys a stale-prone copy for one line"
        }
      ],
      "out_of_scope_findings": [
        "none filed — the one observation (check:doc-formula-expressions refuses one unbuilt prerequisite at a time: the printed Fix built @objectstack/formula, the gate then refused on @objectstack/lint; two lock rounds on this worktree) matched #15850, closed COMPLETED and carried on claude/issue-15850-prerequisite-closure-fix (claimed 13:11Z); this branch's base 984f1da973 predates that fix (origin/main b31ebfe7fe at 13:33Z had no commit on scripts/import-prerequisite.mjs since the base), so the observation is pre-fix and not re-filed. Dedup channel: REST search endpoint 403 (query and positive control) → one targeted MCP search_issues (hit #15850) + one control query (hit #15857)."
      ]
    }

    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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions