You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
pm-dispatch / os-dev: the claim template and the dev definition carry only the Clause-②: line, so a dispatched PR never writes the Metadata-protocol: line ruling A (#25105) adds #25115
Filing gate ③ (a maintainer-direct ruling's unlanded half). Carries the .claude/** half of #25105's item 1 ("Every PR and changeset states its metadata-protocol kind"); #25105 keeps items 1–5 on scripts/**, AGENTS.md and pr-automation.yml (PR #25114, Tier H, awaiting approval). Filed by domain:spec seat 1 (seat post #6017, session session_01VsqhiSrBjB1wJfRNcHPeXN) from the dev's out-of-scope finding on #25105 (report 6315700975). ⛔ Not a claim. Lane and grade are triage's; the parent is p1.
Reader (who acts): the domain:skills seat, once triage routes it and #25105 lands (the spelling is final only when PR #25114 merges).
Why
PR #25114 adds a sibling declaration line beside Clause-②: in every PR body and changeset body: Metadata-protocol: added | narrowed | semantic | none. scripts/check-changeset-no-major.mjs then grades the changeset level on it, and an unread kind that decides the verdict is not-measured-material (red). The fleet's own dispatch path does not know the line:
.claude/skills/pm-dispatch/SKILL.md:314, the claim template: Clause-②: yes | no only.
.claude/agents/os-dev.md:280: "认领带 Clause-②: 行才照抄进正文行首 … 无则零写,⛔ 不自造" — so a dev copies only Clause-②: and is told not to invent a line.
.claude/skills/pm-dispatch/references/execution-duties.md:70: the claim's Clause-② spelling rule.
Read at origin/main5050442bb9 by the filing seat (each line printed with git show origin/main:PATH | sed -n Np). The dev also names os-dev.md:277 (the dogfood trigger reads the (narrowing) arm), references/contract-review.md:8–19 and references/landing-operations.md:11 (review routing on Clause-②); whether those need the kind is the implementing dev's measurement, not this card's claim.
Consequence once PR #25114 lands, until this card lands: every dispatched PR that carries a changeset reads not-measured-material once and clears it by one PR-body line (no push), and its changeset carries no kind for the release-notes grouping or the ADR-0087 gate's narrowed signal.
Wanted
The claim template and the os-dev definition carry the Metadata-protocol: line beside Clause-②:: the seat declares the kind at claim, and the dev copies it into the PR body and writes it into each changeset body.
SKILL.md is under the line ratchet (pnpm check:pm-skill-ratchet): a line added is paid for by a line deleted.
Dedupe
MCP search_issues, objectstack, open and closed: "Metadata-protocol claim template os-dev Clause-② line" → 3 hits (#24298, #23406, #21048, all closed, unrelated). Control query "changeset levels minor only when the metadata protocol changes" → #25105 first. New.
Dedupe words: Metadata-protocol claim template · os-dev Clause-② copy PR body · ruling A declaration line skills.
Graded p1: it is the unlanded half of the maintainer's ruling A. Until it lands, every dispatched PR that carries a changeset reads not-measured-material once.
Lane:.claude/** is governed Tier S, and it is domain:skills's.
Claim: PM loop round 1 (card thread) · 2026-10-22T14:11Z · p1, enhancement, domain:skills. The .claude/** half of ruling A (#25105): the claim template and the os-dev definition carry Metadata-protocol: added | narrowed | semantic | none beside Clause-②:, the seat declares it at claim, the dev copies it into the PR body and each changeset body. Serial behind #25185: its PR merged as 03de83bfe145eea8f495bcbc9886105715721b3f.
Session: session_014c2nFpk7VDtwqxvaGaHPu3 (card thread of domain:skills seat 1, seat session session_0165fj9zYfUrt6ckcUgYBD5a)
Account: os-bill (the seat's linked user; always the card's assignee)
Branch: claude/project-thread-pzu36x (from origin/main after #25185's merge, no commits of its own yet)
Worktree: the card thread's own checkout
Domain: domain:skills
Seat: domain:skills#1 (seat post #7623)
File surface: .claude/skills/pm-dispatch/SKILL.md (the claim template block only), .claude/agents/os-dev.md (the claim-copy rule and, if measured necessary, the changeset-body rule), .claude/skills/pm-dispatch/references/execution-duties.md (the Clause-② spelling line's sibling); references/contract-review.md / landing-operations.md only if measurement shows the review routing must read the kind. skip-changeset or one changeset as the repo's rules say for .claude/**-only diffs (measure: check-empty-changeset / Check Changeset). (stop on breach; explain in the report)
⛔ Not in scope: scripts/**, AGENTS.md, pr-automation.yml (landed by PR #25114); the Metadata-protocol: reader scripts/pm/clause2-line.mjs; the level axis in check-changeset-no-major.mjs.
Container & model: M, mode:thread (the maintainer's word: one project thread per M-or-larger / p1 card), model: CONTRACT_REVIEW_TIER (dispatch-gates.mjs --tier --repo objectstack-ai/objectstack at 03de83b: "MANDATORY: … .claude/skills/pm-dispatch/SKILL.md ⇢ clause ① of the model-tiering ruling (narrowed to protocol semantics, 2026-08-20)" and ".claude/agents/os-dev.md ⇢ clause ① (2026-08-20 narrowing): the dev-agent definition is protocol semantics"), effort: xhigh (p1). Governed surface .claude/** is Tier S: a CONTRACT_REVIEW_TIER PASS record on the PR's head plus all-green checks, then the seat lands it.
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (the unlanded half of a maintainer ruling)
Thread-read: 6317835688
Serial constraints cleared: #25185 (claim 6335635315, branch claude/project-thread-4nzwyi) merged as 03de83bfe145eea8f495bcbc9886105715721b3f before this claim; #25191 (domain:skills, the objectui lane lines in references/cross-repo-coordination.md, lanes/*.md, ensure-pm-labels.sh) is disjoint by region, ordinary concurrency. Open-PR list re-checked before the first edit (GET /pulls?state=open, 11 open PRs, each one's /files read): none touches .claude/skills/pm-dispatch/** or .claude/agents/**.
{
"issue": 25115,
"status": "done",
"branch": "claude/project-thread-pzu36x",
"pr": "https://github.com/objectstack-ai/objectstack/pull/25240",
"session": "session_014c2nFpk7VDtwqxvaGaHPu3",
"premise_still_valid": true,
"summary": "The claim template in .claude/skills/pm-dispatch/SKILL.md carries `Metadata-protocol: added | narrowed | semantic | none` directly under `Clause-②: yes | no`, annotated with the level table's home (AGENTS.md Post-Task Checklist step 3) and the two bodies the dev copies it into. .claude/agents/os-dev.md's claim-copy rule widens to the pair and names both carriers: PR body, and every changeset body, where `Check Changeset` reads it (a kind grades minor, none grades patch). references/execution-duties.md names the third line-initial key in claim step ② and adds the kind pointer beside the `Clause-②` spelling rule. contract-review.md and landing-operations.md are untouched by measurement: the review tier follows the face of the diff, the level follows the kind. Each ceilinged file paid its added line by deletion (SKILL.md 319→318, os-dev.md 404→404, execution-duties.md 188→187); no re-wrap.",
"tests": "No package touched, no test suite owed. Pins: (1) `node scripts/pm/post-stamped.mjs --dry-run --comment=25115 --file=claim.md` on a claim written from the new template: exit 0, verdict stamped-by-this-act, no keyed-line refusal (the seat then posted that very text as claim 6342870822). (2) `scripts/pm/clause2-line.mjs` imported over a PR-body sample and a changeset-body sample carrying both lines: readClause2Line → declared no / declared yes (widening); readMetadataProtocolLine → declared none / declared added; the template placeholders read malformed, never none. (3) The stored body of PR 25240 read back byte-identical to the one sent (one footer, no appended second footer) and both readers read it: Clause-② declared no, Metadata-protocol declared none.",
"gates": "Local subset on head 588f0599 (`dispatch-gates --commands` derived 22, all run, exit codes captured before any pipe, `--ran` reconciled 22/22, 0 NOT-MEASURED): check-closing-keyword-parity (+ self-test), check-comment-mask-corpus, check-governed-queue-guard self-test, check-harness-current self-test, lint check:doc-formula-expressions (after building formula+lint under the verify lock; a first run exited 3 prerequisite-not-met), check:agent-model-declared, check:agent-test-spelling, check:commit-card-trailers, check:cross-package-test-inputs, check:doc-authoring, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:pm-expected-skips, check:pm-governed-merges, check:pm-governed-prose, check:pm-skill-id-lint, check:pm-skill-ratchet, check:refd-timer-probe, check:skill-frame-sync, check:watch-hint-literal — all exit 0. Interim red, fixed before the final run: deleting os-dev.md's commit-trailer rule line as ratchet payment made check:commit-card-trailers --self-test red (that script pins the sentence verbatim); the line was restored and the footer-pointer line paid instead. CI on the PR head at report time: 27 check-runs, 3 success (Check Changeset, Lint · scoped · tooling self-tests, Lint · scoped · slot lookup & corpus), 3 skipped by design (Temporal Conformance, Dogfood Regression Gate shards, Console Pin Gate), the rest queued or in_progress — honest in_progress, the seat reads the converged set.",
"line_budget": "SKILL.md 319/319 → 318/319 (+1 template line; −2: the template caption line and its blank; carried by execution-duties ② and AGENTS.md). os-dev.md 404/404 → 404/404 (+1: the copy rule is two lines; −1: the intra-file pointer to the footer block, whose annotation already says session-URL is the PR-body form). execution-duties.md 188/188 → 187/188 (+1 kind pointer; −2: the preamble line and its blank, carried by SKILL.md's 阶段细则索引 rows). New bullets 110/111/114/113 bytes, under the 120-byte cap. Frame md5 abff5f852c8fd09b79ec0623439aa4f0 unchanged.",
"deviations": "(1) Claim ownership: the dispatch order asked this thread to post the Claim and write the assignee; the runbook that landed with #25214 (卡线程 mode:thread) and AGENTS.md give both to the seat, so the thread handed the seat a dry-run-clean claim text and started after the seat posted it (claim 6342870822, 14:11Z); edits were made locally before that but nothing was pushed until the claim stood. (2) PR body line 1 is the harness-prescribed HTML-comment attribution marker, against os-dev.md 干净收尾; known conflict, carried by the seat's #25214 OOS-2 card. (3) check:skill-frame-freshness (local-only family) not run: worktree is origin/main 03de83bfe plus this commit, frame untouched. (4) The relay pr_create run 39794393779 did not complete within the tool's 300 s window (exit 6); the PR, its assignee and its labels were read back from the target directly, not re-dispatched.",
"files_changed": [".claude/skills/pm-dispatch/SKILL.md", ".claude/agents/os-dev.md", ".claude/skills/pm-dispatch/references/execution-duties.md"],
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"mcp_calls": "0 GitHub MCP calls (no write tool, no read tool); 1 claude-code-remote subscribe_pr_activity on PR 25240 (a session subscription, not a GitHub write)",
"api_writes": "1 — relay pr_create (POST /repos/objectstack-ai/objectstack/dispatches → fleet-write run 39794393779: POST /pulls draft, POST /issues/25240/assignees os-bill, POST /issues/25240/labels skip-changeset); plus git push of the branch (not REST) and this report comment via post-stamped. The claim and the two label writes on the card were the seat's.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: the skills seat at landing · noted, not filed — scripts/pm/check-skill-line-ratchet.mjs ceilings for SKILL.md (319→318) and execution-duties.md (188→187) can be lowered; scripts/** is outside this card's surface",
"carrier: the seat's #25214 OOS-2 card · noted, not filed — harness HTML-comment attribution marker on PR body line 1 vs os-dev.md 干净收尾",
"carrier: none · noted, not filed — scripts/check-commit-card-trailers.mjs pins one os-dev.md sentence verbatim and nothing indexes which rule lines are script-pinned; a ratchet payment learns it by running the gate. dedupe words: script-pinned rule sentence, ratchet payment, commit-card-trailers citation"
]
}
ACCEPT → PR #25240 comment 6343395835 (## 席位核对, head 588f05993a49672c57f4f56ac2f65410b6ac9e76; contract review 6343268424 PASS at CONTRACT_REVIEW_TIER). Tier S: the seat lands it through the relay once every check-run is green, then follows it to MERGED.
345f0b154cbdbce771eb40d33f722cf4b48050d1 — "docs(pm-dispatch, os-dev): the claim template and the dev definition carry the Metadata-protocol: line beside Clause-②:", in main's first-parent history at this read (HEAD 80ec71d)
Tier S landing on contract review 6343268424 (PASS) + ACCEPT 6343395835; the seat flipped it ready and armed auto-merge 14:43Z. Status: card closed by the merge; pm:dispatched removed in the same stroke. Follow-ups carried elsewhere: #25220 (os-dev.md exemption + the Check Changeset wording), the two ratchet ceilings (318 / 187) for the next tooling PR.
Activity
objectstack-fleet commentedon Oct 21, 2026
Unlock and grade:
pm:blocked→pm:queue· p1 ·domain:skills·area:devpath·enhancementTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-21T13:54Z. ⛔ Not a claim.Blocked-by: #25105. changeset levels: minor only when the metadata protocol changes (added / narrowed / semantic), patch otherwise; release notes grouped by what the reader must do (maintainer ruling A, 2026-10-21) #25105 closedcompletedwhen PR feat(gates): the changeset level follows the metadata protocol —Metadata-protocol:line, level axis, console refresh at patch, release notes by reader action (ruling A) #25114 merged at 2026-10-21T13:23Z, so theMetadata-protocol:spelling is final.not-measured-materialonce..claude/**is governed Tier S, and it isdomain:skills's.objectstack-fleet commentedon Oct 22, 2026
Claim: PM loop round 1 (card thread) · 2026-10-22T14:11Z · p1,
enhancement,domain:skills. The.claude/**half of ruling A (#25105): the claim template and the os-dev definition carryMetadata-protocol: added | narrowed | semantic | nonebesideClause-②:, the seat declares it at claim, the dev copies it into the PR body and each changeset body. Serial behind #25185: its PR merged as03de83bfe145eea8f495bcbc9886105715721b3f.Session:
session_014c2nFpk7VDtwqxvaGaHPu3(card thread ofdomain:skillsseat 1, seat sessionsession_0165fj9zYfUrt6ckcUgYBD5a)Account:
os-bill(the seat's linked user; always the card's assignee)Branch:
claude/project-thread-pzu36x(fromorigin/mainafter #25185's merge, no commits of its own yet)Worktree: the card thread's own checkout
Domain:
domain:skillsSeat:
domain:skills#1(seat post #7623)File surface:
.claude/skills/pm-dispatch/SKILL.md(the claim template block only),.claude/agents/os-dev.md(the claim-copy rule and, if measured necessary, the changeset-body rule),.claude/skills/pm-dispatch/references/execution-duties.md(theClause-②spelling line's sibling);references/contract-review.md/landing-operations.mdonly if measurement shows the review routing must read the kind.skip-changesetor one changeset as the repo's rules say for.claude/**-only diffs (measure:check-empty-changeset/Check Changeset). (stop on breach; explain in the report)⛔ Not in scope:
scripts/**,AGENTS.md,pr-automation.yml(landed by PR #25114); theMetadata-protocol:readerscripts/pm/clause2-line.mjs; the level axis incheck-changeset-no-major.mjs.Container & model:
M,mode:thread(the maintainer's word: one project thread per M-or-larger / p1 card),model: CONTRACT_REVIEW_TIER(dispatch-gates.mjs --tier --repo objectstack-ai/objectstackat03de83b: "MANDATORY: ….claude/skills/pm-dispatch/SKILL.md⇢ clause ① of the model-tiering ruling (narrowed to protocol semantics, 2026-08-20)" and ".claude/agents/os-dev.md⇢ clause ① (2026-08-20 narrowing): the dev-agent definition is protocol semantics"),effort: xhigh(p1). Governed surface.claude/**is Tier S: aCONTRACT_REVIEW_TIERPASS record on the PR's head plus all-green checks, then the seat lands it.Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (the unlanded half of a maintainer ruling)
Thread-read: 6317835688
Serial constraints cleared: #25185 (claim 6335635315, branch
claude/project-thread-4nzwyi) merged as03de83bfe145eea8f495bcbc9886105715721b3fbefore this claim; #25191 (domain:skills, the objectui lane lines inreferences/cross-repo-coordination.md,lanes/*.md,ensure-pm-labels.sh) is disjoint by region, ordinary concurrency. Open-PR list re-checked before the first edit (GET /pulls?state=open, 11 open PRs, each one's/filesread): none touches.claude/skills/pm-dispatch/**or.claude/agents/**.Generated by Claude Code
objectstack-fleet commentedon Oct 22, 2026
os-dev-report
{ "issue": 25115, "status": "done", "branch": "claude/project-thread-pzu36x", "pr": "https://github.com/objectstack-ai/objectstack/pull/25240", "session": "session_014c2nFpk7VDtwqxvaGaHPu3", "premise_still_valid": true, "summary": "The claim template in .claude/skills/pm-dispatch/SKILL.md carries `Metadata-protocol: added | narrowed | semantic | none` directly under `Clause-②: yes | no`, annotated with the level table's home (AGENTS.md Post-Task Checklist step 3) and the two bodies the dev copies it into. .claude/agents/os-dev.md's claim-copy rule widens to the pair and names both carriers: PR body, and every changeset body, where `Check Changeset` reads it (a kind grades minor, none grades patch). references/execution-duties.md names the third line-initial key in claim step ② and adds the kind pointer beside the `Clause-②` spelling rule. contract-review.md and landing-operations.md are untouched by measurement: the review tier follows the face of the diff, the level follows the kind. Each ceilinged file paid its added line by deletion (SKILL.md 319→318, os-dev.md 404→404, execution-duties.md 188→187); no re-wrap.", "tests": "No package touched, no test suite owed. Pins: (1) `node scripts/pm/post-stamped.mjs --dry-run --comment=25115 --file=claim.md` on a claim written from the new template: exit 0, verdict stamped-by-this-act, no keyed-line refusal (the seat then posted that very text as claim 6342870822). (2) `scripts/pm/clause2-line.mjs` imported over a PR-body sample and a changeset-body sample carrying both lines: readClause2Line → declared no / declared yes (widening); readMetadataProtocolLine → declared none / declared added; the template placeholders read malformed, never none. (3) The stored body of PR 25240 read back byte-identical to the one sent (one footer, no appended second footer) and both readers read it: Clause-② declared no, Metadata-protocol declared none.", "gates": "Local subset on head 588f0599 (`dispatch-gates --commands` derived 22, all run, exit codes captured before any pipe, `--ran` reconciled 22/22, 0 NOT-MEASURED): check-closing-keyword-parity (+ self-test), check-comment-mask-corpus, check-governed-queue-guard self-test, check-harness-current self-test, lint check:doc-formula-expressions (after building formula+lint under the verify lock; a first run exited 3 prerequisite-not-met), check:agent-model-declared, check:agent-test-spelling, check:commit-card-trailers, check:cross-package-test-inputs, check:doc-authoring, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:pm-expected-skips, check:pm-governed-merges, check:pm-governed-prose, check:pm-skill-id-lint, check:pm-skill-ratchet, check:refd-timer-probe, check:skill-frame-sync, check:watch-hint-literal — all exit 0. Interim red, fixed before the final run: deleting os-dev.md's commit-trailer rule line as ratchet payment made check:commit-card-trailers --self-test red (that script pins the sentence verbatim); the line was restored and the footer-pointer line paid instead. CI on the PR head at report time: 27 check-runs, 3 success (Check Changeset, Lint · scoped · tooling self-tests, Lint · scoped · slot lookup & corpus), 3 skipped by design (Temporal Conformance, Dogfood Regression Gate shards, Console Pin Gate), the rest queued or in_progress — honest in_progress, the seat reads the converged set.", "line_budget": "SKILL.md 319/319 → 318/319 (+1 template line; −2: the template caption line and its blank; carried by execution-duties ② and AGENTS.md). os-dev.md 404/404 → 404/404 (+1: the copy rule is two lines; −1: the intra-file pointer to the footer block, whose annotation already says session-URL is the PR-body form). execution-duties.md 188/188 → 187/188 (+1 kind pointer; −2: the preamble line and its blank, carried by SKILL.md's 阶段细则索引 rows). New bullets 110/111/114/113 bytes, under the 120-byte cap. Frame md5 abff5f852c8fd09b79ec0623439aa4f0 unchanged.", "deviations": "(1) Claim ownership: the dispatch order asked this thread to post the Claim and write the assignee; the runbook that landed with #25214 (卡线程 mode:thread) and AGENTS.md give both to the seat, so the thread handed the seat a dry-run-clean claim text and started after the seat posted it (claim 6342870822, 14:11Z); edits were made locally before that but nothing was pushed until the claim stood. (2) PR body line 1 is the harness-prescribed HTML-comment attribution marker, against os-dev.md 干净收尾; known conflict, carried by the seat's #25214 OOS-2 card. (3) check:skill-frame-freshness (local-only family) not run: worktree is origin/main 03de83bfe plus this commit, frame untouched. (4) The relay pr_create run 39794393779 did not complete within the tool's 300 s window (exit 6); the PR, its assignee and its labels were read back from the target directly, not re-dispatched.", "files_changed": [".claude/skills/pm-dispatch/SKILL.md", ".claude/agents/os-dev.md", ".claude/skills/pm-dispatch/references/execution-duties.md"], "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "0 GitHub MCP calls (no write tool, no read tool); 1 claude-code-remote subscribe_pr_activity on PR 25240 (a session subscription, not a GitHub write)", "api_writes": "1 — relay pr_create (POST /repos/objectstack-ai/objectstack/dispatches → fleet-write run 39794393779: POST /pulls draft, POST /issues/25240/assignees os-bill, POST /issues/25240/labels skip-changeset); plus git push of the branch (not REST) and this report comment via post-stamped. The claim and the two label writes on the card were the seat's.", "open_questions": [], "out_of_scope_findings": [ "carrier: the skills seat at landing · noted, not filed — scripts/pm/check-skill-line-ratchet.mjs ceilings for SKILL.md (319→318) and execution-duties.md (188→187) can be lowered; scripts/** is outside this card's surface", "carrier: the seat's #25214 OOS-2 card · noted, not filed — harness HTML-comment attribution marker on PR body line 1 vs os-dev.md 干净收尾", "carrier: none · noted, not filed — scripts/check-commit-card-trailers.mjs pins one os-dev.md sentence verbatim and nothing indexes which rule lines are script-pinned; a ratchet payment learns it by running the gate. dedupe words: script-pinned rule sentence, ratchet payment, commit-card-trailers citation" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 22, 2026
ACCEPT → PR #25240 comment 6343395835 (
## 席位核对, head588f05993a49672c57f4f56ac2f65410b6ac9e76; contract review 6343268424 PASS atCONTRACT_REVIEW_TIER). Tier S: the seat lands it through the relay once every check-run is green, then follows it to MERGED.Generated by Claude Code
objectstack-fleet commentedon Oct 22, 2026
Landed · PR #25240 MERGED ·
domain:skillsseat 1 ·session_0165fj9zYfUrt6ckcUgYBD5a· 2026-10-22T15:41Zadded_to_merge_queue14:58:34Z,merged+removed_from_merge_queue15:21:23Z (PR timeline); nogh-readonly-queue/main/pr-25240-*ref remainsorigin/main345f0b154cbdbce771eb40d33f722cf4b48050d1— "docs(pm-dispatch, os-dev): the claim template and the dev definition carry theMetadata-protocol:line besideClause-②:", in main's first-parent history at this read (HEAD 80ec71d)Tier S landing on contract review 6343268424 (PASS) + ACCEPT 6343395835; the seat flipped it ready and armed auto-merge 14:43Z. Status: card closed by the merge;
pm:dispatchedremoved in the same stroke. Follow-ups carried elsewhere: #25220 (os-dev.md exemption + theCheck Changesetwording), the two ratchet ceilings (318 / 187) for the next tooling PR.Generated by Claude Code