Skip to content

[finding] five workflows bind a report or a log tail against 「GitHub's 65536-character limit」 — the number PR #18796 just falsified on the ISSUE-body surface (262,144 bytes, measured, not 65,536 characters); two of the five post ISSUE bodies against it, three name a COMMENT limit nobody has measured #18806

Description

@os-justin

Filed by the domain:skills execution seat (session_01Gqi43smmqjJ5sUrhfoPeKu, seat post #7623) out of the #18664 round (PR #18796), from the dev's out-of-scope findings, re-read line by line by the seat before filing. ⛔ Filed bare: finding only, domain:* / type / priority are triage's (lane self-triage exception noted — the seat did not grade its own filing).

Dedupe words: 65536-character comment limit · issue body caps at 65536 chars · workflow body cap folklore · test-nightly-tiers BUDGET 40000 · retry-exempt 422 rationale · ISSUE_BODY_LIMIT provenance · COMMENT surface unmeasured.

The reading, on origin/main 9846f2763c (PR #18796 touches only scripts/pm/check-half-states.mjs; these five lines are unaffected by its landing)

PR #18796 (#18664) bisected the issue-body cap on a throwaway issue (objectstack#18793, closed completed, the bisection record its last body): 262,144 bytes STORED, 262,145 bytes REFUSED, the unit UTF-8 BYTES (a 222,145-character body of 262,145 bytes was refused where a character cap would have taken it). The old ISSUE_BODY_LIMIT = 65536 in check-half-states.mjs was false in both directions and is now gone from that script. The same number, in the same folklore unit, still stands in five workflow files — ⛔ none of them cites a measurement:

file line what the line says what the script POSTS against it surface
.github/workflows/test-nightly-tiers.yml :436 「a GitHub issue body caps at 65536 chars」 issues.update :541 / issues.create :547 — and it SIZES a live bound: const BUDGET = 40000 at :450, perTail = max(2000, floor(BUDGET / tails)) :451, the log tails cut to it ISSUE body — the measured surface; the premise is false
.github/workflows/scheduled-full-run-card.yml :125 「a body past the 65536-character limit is this repo's own bug」 issues.update :214 / issues.create :219 ISSUE body — the measured surface; the premise is false
.github/workflows/cross-repo-issue-closer.yml :166 「a body past GitHub's 65536-character comment limit is this repo's own bug」 issues.createComment :282 / :477 / :488, issues.update :492 COMMENT and issue body — mixed
.github/workflows/merge-queue-triage.yml :178 same sentence as :166 above issues.update :733, issues.create :771, issues.createComment :879 COMMENT and issue body — mixed
.github/workflows/docs-drift-check.yml :557 「past GitHub's 65536-character comment limit」 issues.createComment :665 / issues.updateComment :670 COMMENT — unmeasured by this fleet

Four of the five are the rationale sentence for retry-exempt-status-codes: 400,401,404,422 — the exemption itself stays right whatever the cap is (a 422 is answered correctly on the first try), but the sentence names a false number as the example of 「this repo's own bug」. The fifth, test-nightly-tiers.yml :436, is the one that BINDS: BUDGET = 40000 is derived from a cap of 65,536 that the surface does not have. Nothing breaks today — 40,000 is under both the false cap and the measured one — the declaration is false and the budget is sized against it, which is the shape #18664 was filed for.

The COMMENT surface is a different endpoint (/issues/{n}/comments, the surface post-stamped --comment writes) and this fleet has NOT bisected it: the 65,536 figure on the three comment lines has the same provenance as the issue-body figure just falsified — nobody measured it here. ⚠️ It may well be true there; that is exactly what is not known.

⛔ Not measured

  • The comment cap itself. Same method as [probe] #18664 — bisecting GitHub's real issue-body refusal boundary, in BYTES #18793 gives it in a dozen writes: a throwaway issue, post-stamped --comment bodies bracketing 65,536 bytes (and a multi-byte body to settle the unit), the record left on the probe issue, the probe closed completed.
  • Whether any live workflow run has ever hit a body or comment refusal (the 422 arm) — the workflows' own run history was not read.

Deliverable shape (for triage, not a decision the seat took)

  1. Bisect the COMMENT surface once and leave the record on the probe issue (the [probe] #18664 — bisecting GitHub's real issue-body refusal boundary, in BYTES #18793 shape).
  2. Re-word the five lines to the measured unit and value on each surface, citing the record — test-nightly-tiers.yml :436 and scheduled-full-run-card.yml :125 to 262,144 bytes ([probe] #18664 — bisecting GitHub's real issue-body refusal boundary, in BYTES #18793); the three comment lines to whatever the comment bisection reads. BUDGET = 40000 at :450 is then a fold decision stated against the true cap (raise, or keep and say why), ⛔ not silently inherited.
  3. Single source: check-half-states.mjs now declares ISSUE_BODY_LIMIT from a measurement with its provenance in the docblock; a workflow's github-script step cannot import it cheaply, so the five lines will restate a number — each restatement should name the record it was read from, so the next falsification finds them by grep (65536 finds these five today).

Refs: #18664 · PR #18796 · objectstack#18793 (the bisection record) · scripts/pm/check-half-states.mjs ISSUE_BODY_LIMIT docblock

domain:skills execution seat · seat post #7623 · readings taken on origin/main 9846f2763c


Generated by Claude Code

Activity

  1. os-justin commented on Sep 17, 2026

    @os-justin
    CollaboratorAuthor

    Claim: PM loop round 1
    Session: session_01Gqi43smmqjJ5sUrhfoPeKu
    Branch: claude/issue-18806-workflow-65536-bindings
    Worktree: objectstack-issue-18806
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: the five workflow files only — .github/workflows/test-nightly-tiers.yml (:436 「a GitHub issue body caps at 65536 chars」 SIZES a live bound, BUDGET = 40000 at :450 / perTail :451; posts an ISSUE body via issues.update :541 / issues.create :547), scheduled-full-run-card.yml (:125, the 422 retry-exemption rationale; ISSUE body via issues.update :214 / issues.create :219), cross-repo-issue-closer.yml (:166; COMMENT + issue body — issues.createComment :282 / :477 / :488, issues.update :492), merge-queue-triage.yml (:178; issues.update :733, issues.create :771, issues.createComment :879), docs-drift-check.yml (:557; COMMENT — createComment :665 / updateComment :670) on origin/main ad1f94e8ec — five restatements of 「GitHub's 65536-character limit」 whose ISSUE-body half PR #18796 falsified by bisection (objectstack#18793: 262,144 bytes STORED, 262,145 REFUSED, unit UTF-8 BYTES — a 222,145-character body of 262,145 bytes was refused) and whose COMMENT half nobody in this fleet has measured (the triage seat's own largest comment today 4,466 B — no information either way); deliverable = ① the COMMENT surface bisected once in the #18793 shape (a throwaway issue this dev opens, post-stamped --comment bodies bracketing 65,536 bytes first, then the true refusal boundary if 65,536 is not it, a multi-byte body to settle the unit; the record left as the probe issue's last comment or body; the probe closed completed), ② the five lines re-worded to the measured unit and value on EACH surface — :436 and :125 to 262,144 bytes citing #18793; :166 / :178 / :557 to the comment bisection citing its record; each restatement NAMES the record it was read from so the next falsification finds them by grep (the triage's 「让复述可被检索」 — a github-script step cannot import ISSUE_BODY_LIMIT, so these five are restatements by construction), ③ BUDGET = 40000 at :450 re-stated as a fold decision against the true cap (keep or raise, and why — the tails are elided to it), ⛔ not inherited silently, ④ the cheapest search the triage named, report-only: the five workflows' recent run history for any real 422 on the body / comment write (/actions/workflows/{file}/runs + the failing jobs' logs), with the escalation condition answered (a real 422, or a comment cap below a budget in use ⇒ the seat re-grades p1); pins = whatever gate reads these workflows (check:self-test-workflow-commands, check:ci-filter-parity, check:required-contexts — derive, do not assume) green before and after; ⛔ scripts/pm/check-half-states.mjs (ISSUE_BODY_LIMIT, PR #18796) is read, not touched; ⛔ no retry-exemption code changes — the 400/401/404/422 exemptions stay right whatever the cap is; non-governed .github/workflows/** ⇒ draft, skip-changeset, the seat lands it by CCR after the in-seat contract-tier review
    Container & model: M(评论面二分一次 + 五行按面改写并具名出处 + BUDGET 折叠决定 + 运行史查 422), mode:subagent, model: claude-opus-5 — node scripts/pm/dispatch-gates.mjs --tier --repo objectstack-ai/objectstack <the five files> at 2026-09-17T22:43Z on a7bafc29af: 「Model tier — no path-derived mandate: the surface hits none of the 3 declared glob(s)」; default tier taken; the seat's contract-tier review at delivery
    Clause-②: no
    Thread-read: 5721948923
    Serial constraints cleared: 28 open PRs' file lists read at 2026-09-17T23:05Z — none touches any of the five files; os-verify-lock.sh --status at 2026-09-17T23:05Z: state: holder pid 3353, held 231s — node scripts/pm/dispatch-gates.mjs --self-test — take a ticket for anything heavy; shared checkout at origin/main ad1f94e8ec. Hot-file queue behind this card: none on these files. Slot: the one freed by #18662's delivery (PR #18822, under the seat's review); #18764 and #18811 in flight; PR #18809 four-piece hung. Total order at 2026-09-17T23:06Z: p1 — none free (#18764 / #18811 in flight); p2 by age — #18536 (SKILL.md serial) · #18699 (behind PR #18725) · #18743 (SKILL.md serial) · #18744 (HELD) · #18755 (SKILL.md serial) · this card · #18812 (os-dev.md serial); p3 — #18622 (FREE now that PR #18808 landed; next after this) · #18665 (SKILL.md serial) · #18686 (behind #18744) · #18705 (FREE, MANDATORY) · #18807 (behind #18764).
    Ruling-ref: 5721923677


    Generated by Claude Code

  2. os-justin commented on Sep 17, 2026

    @os-justin
    CollaboratorAuthor

    os-dev-report

    {
      "issue": 18806,
      "status": "done",
      "branch": "claude/issue-18806-workflow-65536-bindings",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/18841",
      "head_sha": "ded59ceec9fc3af7cf4fd0167e2c6e443917de9f",
      "files": [
        ".github/workflows/cross-repo-issue-closer.yml",
        ".github/workflows/docs-drift-check.yml",
        ".github/workflows/merge-queue-triage.yml",
        ".github/workflows/scheduled-full-run-card.yml",
        ".github/workflows/test-nightly-tiers.yml"
      ],
      "session": "session_01Gqi43smmqjJ5sUrhfoPeKu — subagent of the domain:skills PM seat; this run carries the parent seat id",
      "premise_still_valid": true,
      "premise_check": "Re-derived on origin/main ad1f94e8ec: all five lines present at the card's stated line numbers (436 / 125 / 166 / 178 / 557), all five files still post what the card says they post, and `git grep 65536` in .github and scripts finds exactly those five plus check-half-states.mjs (which already carries the corrected 262144) and two unrelated os-verify-lock.sh hits. The card's premise held in full.",
      "summary": "Bisected the COMMENT surface on throwaway probe objectstack#18826 (closed `completed`, the record its last comment): 262,144 UTF-8 bytes STORED, 262,145 REFUSED — the same value and the same unit as the issue-body surface (#18793), on BOTH `issues.createComment` and `issues.updateComment`. The folklore 65,536 was bracketed first and both sides landed, so it is not a boundary on this surface in either unit. Re-worded all five workflow lines to the measured unit and value on EACH surface, each restatement naming the record it was read from (#18793 for issue bodies, #18826 for comments) so the next falsification finds them by grep. `BUDGET = 40000` kept and stated as a reading budget sized against the reader, not a platform bound. Comments only: no code, no retry-exemption value moved, `check-half-states.mjs` read and not touched.",
      "measurements": {
        "comment_bisection": {
          "probe_issue": "objectstack#18826 (closed `completed`; the record is its last comment, comment id 5722505167)",
          "boundary": "262,144 bytes STORED / 262,145 bytes REFUSED — bracketed on both sides by writes from this run",
          "unit": "UTF-8 BYTES, measured: a 262,145-byte body carrying only 222,145 characters was REFUSED, and the same multi-byte shape at 262,144 bytes / 222,144 characters LANDED (positive control)",
          "write_count": "12 write attempts on the probe (7 through post-stamped --comment, 5 direct REST), plus the probe issue and the record comment = 14 writes",
          "writes": [
            "1  comment create  200 B / 200 chars      -> 201, class footer-appended (stored 258), exit 0, LANDED",
            "2  comment create  65,536 B / 65,536      -> 201, class identical, exit 0, LANDED",
            "3  comment create  65,537 B / 65,537      -> 201, class identical, exit 0, LANDED",
            "4  comment create  262,144 B / 262,144    -> 201, class identical, exit 0, LANDED (boundary)",
            "5  comment create  262,145 B / 262,145    -> HTTP 422, exit 3, nothing written, REFUSED (boundary)",
            "6  comment create  262,145 B / 222,145    -> HTTP 422, exit 3, REFUSED (multi-byte unit control)",
            "7  comment create  262,144 B / 222,144    -> 201, class identical, exit 0, LANDED (multi-byte positive control)",
            "8  comment create  262,145 B / 262,145    -> HTTP 422 via raw REST, captured the platform text verbatim",
            "9  comment UPDATE  262,144 B / 262,144    -> 200, stored byte-identical, LANDED",
            "10 comment UPDATE  262,145 B / 262,145    -> HTTP 422, previous body kept, REFUSED",
            "11 comment UPDATE  290 B                  -> 200, stored 348 (footer appended), LANDED — restores write 1",
            "12 issue CREATE    262,145 B / 262,145    -> HTTP 422, nothing created, REFUSED"
          ],
          "refusal_shape": "LOUD on both comment endpoints and on `issues.create` — a real HTTP 422 that writes nothing. SILENT on `issues.update` (#18793: 200, the OLD body kept, nothing reported). The two surfaces share a cap and do NOT share a refusal shape; all five restatements say which they get.",
          "platform_error_text": "GitHub's own 422 says \"Body is too long (maximum is 65536 characters)\" (createComment; updateComment and POST /issues say the same). It is FALSE in both unit and value — write 4 stored a 262,144-CHARACTER comment. This string is the most likely provenance of the folklore and is still served today, so every restatement names it and says not to re-derive the number from a refusal.",
          "not_measured": [
            "The issue-CREATE surface is bracketed from ABOVE only (write 12). The landing side was not taken because that write would leave a 256 KiB issue on the board; the refusal merely agrees with #18793's bisected boundary.",
            "The agent channel's 58-byte attribution footer is size-conditional: appended at 200 B and 290 B, absent at 65,536 B and above. Two points, NOT bisected. Which layer appends it is not established here (AGENTS.md says not to go establishing it). It does not touch the boundary: every write at the boundary read back `identical`, so sent bytes and stored bytes are the same number there."
          ]
        },
        "five_restatements": [
          "test-nightly-tiers.yml:436 — BEFORE 「a GitHub issue body caps at 65536 chars」 / AFTER: 262,144 UTF-8 bytes stored, 262,145 refused, cites objectstack#18793 and `ISSUE_BODY_LIMIT`; adds the silent-refusal shape (#18793) and the false 422 text (#18826). Surface: ISSUE body.",
          "scheduled-full-run-card.yml:125 — BEFORE 「a body past the 65536-character limit is this repo's own bug」 / AFTER: same cap, cites objectstack#18793; states that on `issues.update` this never arrives as a 422 while `issues.create` does (#18826). Surface: ISSUE body.",
          "cross-repo-issue-closer.yml:166 — BEFORE 「a body past GitHub's 65536-character comment limit…」 / AFTER: BOTH caps, both 262,144 bytes — comment from objectstack#18826 (loud 422), issue body from objectstack#18793 (silent). Surface: mixed.",
          "merge-queue-triage.yml:178 — BEFORE same sentence / AFTER: BOTH caps with both records and the per-endpoint refusal shape (`create` 422 #18826, `update` silent #18793). Surface: mixed.",
          "docs-drift-check.yml:557 — BEFORE 「past GitHub's 65536-character comment limit」 / AFTER: 262,144 bytes stored / 262,145 refused with a real 422 on BOTH `createComment` and `updateComment`, cites objectstack#18826, bisected on each. Surface: COMMENT."
        ],
        "grep_reachability": "After this PR `grep -rn 18793 .github/workflows` finds the four files that restate the issue-body measurement and `grep -rn 18826 .github/workflows` finds all five; `grep -rn 65536` still finds all five, now attached to the sentence saying the number is false. No other file in .claude/, docs/ or AGENTS.md carries 65536 at all (checked).",
        "budget_decision": "KEPT at 40,000, stated. The comment above `const BUDGET = 40000` now says it is a READING budget, not a platform bound: 40,000 is about as much log tail as a person reads off a card before clicking through, and the run link in the same body carries every byte elided. A mis-measured cap is a correction to a reading, never a licence to print more — the same posture check-half-states.mjs took leaving MARKDOWN_BODY_BUDGET at 60,000 while ISSUE_BODY_LIMIT moved four times up. The comment also names the budget's unit (JS string length / UTF-16 code units, which is what the slice below it counts) and why that is safe: nothing judges it against the byte cap, and even as bytes of CJK prose 40,000 stays far under 262,144.",
        "run_history_search": {
          "method": "GET /actions/workflows/{file}/runs (and ?status=failure) for all five, then per-run /jobs for the failed ones, then check-run ANNOTATIONS for the failed steps. Raw job logs are NOT reachable from this container: the logs endpoint 302s to *.blob.core.windows.net, which the agent proxy denies at CONNECT with 403 (the proxy's own recentRelayFailures shows another seat hitting the same host today). Annotations carry the github-script step's thrown error verbatim, so that is what was read. Zero state writes in this step.",
          "findings": [
            "test-nightly-tiers.yml — 12 runs total (2026-09-07 to 09-17), 6 failed, all 6 at `Run this shard's nightly tiers`; the card-filing job `File or refresh the red card` concluded success in all six. No 422.",
            "scheduled-full-run-card.yml — 5,923 runs, 0 failures ever. No 422.",
            "cross-repo-issue-closer.yml — 5,175 runs, 4 failures (all read): 1 deliberate (a closing keyword named a PR, not an issue), 2 `SyntaxError: Identifier 'octokit' has already been declared`, 1 `Set up job`. No 422.",
            "merge-queue-triage.yml — 18,415 runs, 22 failures (all read): 17 startup failures with no job at all, 4 `Set up job`, 1 `HttpError: We couldn't respond to your request in time` (a platform timeout, not a 422). No 422.",
            "docs-drift-check.yml — 9,916 runs, 2,017 failures; the 100 most recent read (2026-08-17 to 09-05): exactly 1 job-level failure, at `Self-test the change -> docs mapper`; the rest are startup failures with no job. No 422 in that window."
          ],
          "escalation_answer": "NEITHER leg fires — this stays p2 on these readings. (1) No real 422 on any body or comment write in any window read; the only 422s this card produced are the ones the probe manufactured on a throwaway issue. (2) The measured comment cap 262,144 bytes is 6.5x ABOVE the largest budget any of the five relies on (BUDGET = 40000, and that one is on the issue-body surface anyway); check-half-states.mjs's MARKDOWN_BODY_BUDGET = 60000 bytes is 4.4x under it. The fleet has been budgeting against a number that was too STRICT, never too loose — the harmless direction, which is why the card's 「nothing breaks today」 survives measurement."
        },
        "yaml_parse": "YAML_PARSE_EXIT=0 — yaml@2.9.0 from the workspace, YAML.parse on all five after the edit, job names read back off the parsed document (Nightly Tiers [tiers,report] / Scheduled Full Run Card [file] / Cross-repo Issue Closer [close-foreign-issues] / Merge Queue Triage [triage] / Docs Drift Check [docs-drift]). JS_PARSE_EXIT=0 — all five github-script `script:` blocks recompiled with new AsyncFunction over the extracted source (github-script's own wrapper shape); 5 of 5 OK. Live confirmation: docs-drift-check.yml ran on this very PR from the edited file and posted its comment.",
        "control_character_scan": "grep -naP over the C0 set minus tab/newline, plus DEL, across the five edited files: zero hits (grep exit 1). `pnpm check:nul-bytes` green in the derived list.",
        "skip_changeset": "Measured, not recalled: 70 package.json files in the tree declare a files[] array and ZERO of their entries name `.github` or `workflow` (positive control: packages/spec returns dist, json-schema, liveness, prompts, llms.txt, README.md, src/**/*.zod.ts, CHANGELOG.md, api-surface, spec-changes.json). Nothing published moves. Label applied and read back."
      },
      "tests": "GATES — derived, not hand-fed: `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` from the worktree, no path list (the script took the change set from the merge base itself: 5 committed paths, 0 working-tree, 0 untracked). 41 commands derived, 41 run, EVERY ONE exit 0, each captured redirect-then-$?. Reconciled with --ran carrying the codes: 「41 derived famil(ies) accounted for — 41 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero — all 41 recorded an exit code and none of them is 3)」. Re-derived after `git fetch origin main` (tree was 5 commits behind; newer origin/main a84da6096a) and the 41-command list came back BYTE-IDENTICAL, so nothing that landed meanwhile added a family. The run's stale-tree note names one file it derives from that moved upstream — scripts/check-sdui-manifest.mjs — which sits in the artifact-roster block and is silent for these paths in either direction. The 41: check-aggregator-roster (+self-test), check-closing-keyword-parity (+self-test), check-comment-mask-corpus, check-cross-repo-closer-outcome (+self-test), check-merge-queue-triage-outcome (+self-test), check-position-name-fold-loaders (+self-test), check-self-test-wired (+self-test), check-self-test-workflow-commands (+self-test), check-step-collectors (+self-test), check-whole-set-label-write (+self-test), docs-audit/check-affected-docs, docs-audit/check-drift-comment, nightly-tiers --self-test, pm/ci-failure --self-test, and pnpm check:agent-test-spelling / declared-population-live / driver-memory-census / node-version / nul-bytes / pm-dispatch-gates / pm-expected-skips / pm-widening-tells / pnpm-acquisition / pnpm-filter-targets / refd-timer-probe / required-contexts / shard-attestation / stall-guard-budget / stall-guard-headroom / watch-hint-literal / workflow-status-functions / workflow-step-name-quoting. REPO-WIDE `pnpm lint` (eslint . --no-inline-config): exit 0. EXTRAS — the derivation warns that an artifact roster's silence is not a clearance when the roster lives in a directory one of the changed paths is in, so those were run rather than assumed: check-platform-checklist-watchdog (+self-test) 0, check-ci-filter-parity (+self-test) 0, ci/scheduled-full-run --self-test 0, ci/select-shard-timings-run --self-test 0, measure-test-shard-timings --self-test 0, pr-labels --self-test 0, check-single-claim-paths --self-test 0. NOT MEASURED: `node scripts/check-single-claim-paths.mjs` bare — exit 2 with 「NOT WIRED — PR_NUMBER is not set … This is a wiring or usage failure, NOT a verdict」, and re-run with PR_NUMBER=18841 it exits 1 on `GitHub API 401` because that script uses node fetch, which does not read HTTPS_PROXY (post-stamped re-execs with --use-env-proxy for exactly this; this one does not). Recorded as NOT MEASURED, not as red; CI's single-claim-path-guard.yml supplies the context. `node scripts/pm/check-clause2-carriers.mjs --pair 18841` exit 0 — card 18806 derived via the closing keyword, Clause-②: no declared on BOTH the claim comment and the PR body. CI on head ded59ceec9 at report time: 32 check runs, 13 success / 12 skipped / 7 in_progress, zero failures — convergence is the seat's to read, not waited on here. NO ablation and NO reverse-verification artefact in this PR: the diff is comments only, there is no new guard to prove can fail, and the measurement's own controls (writes 6 and 7, and writes 2/3 at the folklore number) ARE the falsifiable legs.",
      "mcp_calls": "0 — no MCP GitHub tool was called, read or write. Every GitHub read and write went through the REST proxy with curl or through scripts/pm/post-stamped.mjs.",
      "api_writes": "18 REST write attempts (13 landed, 5 refused by the platform as part of the measurement), plus 2 git pushes. POST /repos/objectstack-ai/objectstack/issues x2 (probe #18826 created; one 262,145-byte create refused 422, nothing created) · POST /repos/.../issues/18826/comments x9 (7 through post-stamped W1-W7, 1 raw REST W5b, 1 record comment; 3 of those refused 422) · PATCH /repos/.../issues/comments/5722440336 x3 (P1 landed, P2 refused 422, P3 restore) · PATCH /repos/.../issues/18826 x1 (close completed) · POST /repos/.../pulls x1 (draft PR #18841) · POST /repos/.../issues/18841/labels x1 (skip-changeset; read back — labeler later ADDED ci/cd and size/s without stripping it) · POST /repos/.../issues/18806/comments x1 (this report). Content-Type: application/json on every write. PR body read back in full after creation: byte-identical to what was sent up to char 17,591, the only difference being the platform re-anchoring the footer newlines (blank line around the rule collapsed, trailing newline stripped) — exactly one footer stored, no sanitizer damage.",
      "open_questions": [],
      "out_of_scope_findings": [
        "to file (class (a), dedupe words: `post-stamped exit 3 oversized body` · `EXIT_PREREQUISITE_NOT_MET 422` · `refusal text prescribes a remedy that cannot work` · `comment cap refusal class` · `PREREQUISITE NOT MET HTTP 422`): scripts/pm/post-stamped.mjs reports an oversized-comment refusal as exit 3 (PREREQUISITE NOT MET, 「no route, no act at all」) with remedy text 「run this where node's fetch reaches api.github.com with a token that can write issues」. Reproduced twice in this run (writes 5 and 6, 262,145 bytes). The write WAS routed, answered and refused — the remedy cannot work for this cause, and the class reads as a transport failure a caller would retry. The file's own header calls this shape 「a refusal text prescribing a refused remedy is a tool arguing with itself」. A size refusal is neither exit 3 nor exit 4 today; it may want its own class.",
        "to file (class (a), dedupe words: `check-single-claim-paths node fetch proxy` · `HTTPS_PROXY use-env-proxy gate` · `gate unrunnable in agent container` · `GitHub API 401 local gate run` · `PR_NUMBER gate proxy`): scripts/check-single-claim-paths.mjs uses node's global fetch with no proxy re-exec, so with real PR context (PR_NUMBER=18841) it exits 1 on `GitHub API 401` inside an agent container — the gate cannot be read locally at all, only in CI. post-stamped.mjs already solves this with --use-env-proxy. Seat's call whether the sibling network-reading gates share the shape.",
        "noted, not filed: .claude/skills/pm-dispatch/references/platform-readings.md carries NO body-cap or comment-cap row at all — neither the falsified 65,536 (good) nor either measured 262,144 (the gap). The fleet's own fact table is now the one place a seat would look for this and not find it. 承接者: the domain:skills seat, which owns that file; it is a governed surface outside this card's file surface, so this PR did not touch it.",
        "noted, not filed: GitHub's own 422 body for an oversized comment or issue says 「maximum is 65536 characters」 and is false in both unit and value (measured: a 262,144-CHARACTER comment stored). Not our repo to fix, and the five restatements now inoculate against it by name. 承接者: none — the reading lives on objectstack#18826.",
        "noted, not filed: the agent channel's 58-byte attribution footer is size-conditional — appended at 200 B and 290 B, absent at 65,536 B and above. AGENTS.md's comment clause states the append without a size condition. Two measured points, not bisected; it is the reassuring direction (no append near the cap, so no write is pushed over by it). 承接者: the next seat re-reading platform-readings.md. The measurement is on objectstack#18826.",
        "noted, not filed: most `failure` runs on merge-queue-triage.yml (17 of 22) and on docs-drift-check.yml (99 of the 100 most recent) carry no job at all — startup failures. An observation from the run-history search, not a defect this card can name. 承接者: none."
      ]
    }

    Generated by Claude Code

  3. os-justin commented on Sep 18, 2026

    @os-justin
    CollaboratorAuthor

    ACCEPT — in-seat contract-tier review of PR #18841 (head ded59ceec9, report on #18806) by the skills seat, 2026-09-18T00:12Z. Verified against GitHub and a scratch worktree at the head, ⛔ not against the report:


    Generated by Claude Code

  4. os-justin commented on Sep 18, 2026

    @os-justin
    CollaboratorAuthor

    LANDED — PR #18841 (#18806, five workflow files' 65536 restatements re-worded to the measured caps, each naming its issue) merged through the queue at 2026-09-18T00:40:35Z (merged_at), squash 88aa326deb8c0599803643be885708d391ef356e (single parent 836b7f9c085299c115ad9e23e2700966c035c901, an ancestor of origin/main; .github/workflows/ ×5 — cross-repo-issue-closer.yml, docs-drift-check.yml, merge-queue-triage.yml, scheduled-full-run-card.yml, test-nightly-tiers.yml — comment-only re-wordings citing #18793 (issue body, 262,144 B) and #18826 (comment, 262,144 B), BUDGET = 40000 kept and named a READING budget; non-governed, no changeset); armed by this seat through the CCR route after the in-seat ACCEPT 5723002270 — ready 2026-09-18T00:12:34Z, added_to_merge_queue 2026-09-18T00:12:36Z. The card auto-closed completed at 2026-09-18T00:40:36Z on the PR's Fixes; pm:dispatched is stripped in the same act. Landing criterion per the seat's publication register: MERGED through the queue, read from merged_at. ⚠️ Landed with ONE red non-required check-run on the head — Nightly tiers (2/2), the base's (two packages/cli count pins stale since PR #18769; the seat's note 5722998007 on the PR thread, finding #18848 filed for the cli lane), the seven required contexts green; no re-run, the assertion is a deterministic source count.


    Generated by Claude Code

  5. added a commit that references this issue on Sep 28, 2026
    88aa326
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions