Skip to content

docs(skills): the i18n skill names fields.{field}.inlineTitle and a joined report's block headings - #26832

Merged
os-zhuang merged 3 commits into
mainfrom
claude/project-thread-jdbl6z
Oct 27, 2026
Merged

os-zhuang merged 3 commits into
mainfrom
claude/project-thread-jdbl6z

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Requested by Steve · project thread

Fixes #26759

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么:skills/objectstack-i18n/SKILL.md 的分组表补上两把 18.2 已接受、运行时已下发但技能没教的键:fields.{field_name} 行加 inlineTitle(主从字段在父表单上的内嵌子网格标题,键挂在拥有该字段的子对象下;未翻译时保留作者原文,不回退到子对象复数标签);reports 那句加 reports.{report}.blocks.{block_name}.{label,description}(联合报表各区块标题,按区块必填的 name 取键)。表后各给一行示例,照搬 app-crm / app-showcase 已发货的 zh-CN 包写法。手写作者页 content/docs/ui/translations.mdx 同补两处。eval 文件加第 8 题覆盖两把键;其 token 棘轮行先削重复再按实测钉在 1642;@objectstack/skills 补丁 changeset。
  • 为什么改:PR feat(spec): a joined report's block headings and a master-detail field's inline grid heading are translatable #26757 把这两把键加进了协议,卡 skills/objectstack-i18n: the group table misses fields.{field}.inlineTitle and reports.{report}.blocks.{block}.{label,description} (follow-up owed by PR #26757) #26759 是它欠下的 Skills-docs: 后续——AI 作者照技能写翻译包时,这两处标题会一直停在作者语言。
  • 风险与回滚:只改技能文本、一页文档、一个 eval JSON、一行棘轮上限和一个 changeset;不动 schema、运行时或任何键。回滚即 revert 本 PR。
  • 先看:skills/objectstack-i18n/SKILL.md(L162 字段行、L175–177 reports 句、L182–188 示例)、skills/objectstack-i18n/evals/bundles-locales-coverage.json(第 6 题删重复、第 8 题新增)、scripts/check-skills-token-ratchet.mjs(棘轮行 1451 → 1642,算式在注释里)。
  • 两分钟验证:node scripts/check-skills-token-ratchet.mjs,预期 objectstack-i18n/SKILL.md ✓ 余量 877、bundles-locales-coverage.json ✓ 余量 0,总行 81 authored bundle file(s) within their ceilings。
  • 需要你做的:批准本 PR(skills/** 受管面,Tier H)。

What changes

  • skills/objectstack-i18n/SKILL.md (the group table a bundle author picks keys from):
    • the fields.{field_name} row names inlineTitle — the heading of the inline child grid a master_detail field draws on its parent's form; the field lives on the child object, so the key is the child's; untranslated it keeps its authored text and never falls back to the child's plural label (wording read off FieldTranslationSchema's docblock, packages/spec/src/system/translation.zod.ts L133–147 on origin/main 0ea90c7);
    • the sentence that said reports, positions and permissions hold label + description by name now continues with reports.{report}.blocks.{block_name}.{label,description}, keyed by the block's required name (JoinedReportBlockSchema.name, packages/spec/src/ui/report.zod.ts; the translation slot at translation.zod.ts L1199);
    • one example row each, after the os i18n extract --no-objects-only sentence, spelled exactly as the shipped bundles spell them for zh-CN: objects.crm_opportunity_line_item.fields.opportunity.inlineTitle (examples/app-crm/src/translations/crm.translation.ts L99) and reports.showcase_task_overview.blocks.open_block.label (examples/app-showcase/src/system/translations/index.ts L1362). The skill's own example bundle mirrors examples/app-todo, which has neither a master-detail field nor a joined report, so the rows sit in a two-line fragment fence instead of being invented into the todo bundle.
  • content/docs/ui/translations.mdx (the card's hand-written-twin item, named in the claim's file surface): a row for the inline child-grid heading under the field row, and the report row gains the reports.NAME.blocks.BLOCK.label / description spelling. Not governed; it rides this PR because the claim's surface names it and the card thread has one PR.
  • skills/objectstack-i18n/evals/bundles-locales-coverage.json: case 8 asks for the Products grid heading on the crm_opportunity form and the Open Tasks block of the joined showcase_task_overview report, and expects the two keys above; must_contain inlineTitle / crm_opportunity_line_item / blocks / open_block, must_not_contain fields.opportunity_line_item (the key on the parent) and components.open_block (a page-component spelling). Paid down first: case 6's os i18n extract --no-objects-only sentence and its --no-objects-only assertion duplicated case 5's pin of the same flag and were cut (77 bytes). Every name in the prompt and assertions is a shipped example's or the Zod source's; none is invented.
  • scripts/check-skills-token-ratchet.mjs: the eval row 1451 → 1642, pinned AT the measurement with the arithmetic and the standing ruling quoted verbatim beside the sibling row: 「A:先削重复,余额按实测提高」. The SKILL.md row does not move (5456 of 6333).
  • Changeset .changeset/26759-i18n-skill-inline-title-report-blocks.md: @objectstack/skills patch, both declaration lines at line start.
  • packages/lint/src/validate-translation-references.ts (round 2, claim amendment 6449881440 — the card's "Stale header line" item): the Reports header comment now lists blocks.<block_name>.label / .description, keyed by the block's name, among a report's leaf keys. Comment only; the validator reads the Zod shape.

Skills readings (skills/** touched; before = origin/main 0ea90c7, after = head; tokens = the ratchet's ceil(bytes/4), stamp line excluded):

Reading Before After
skills/objectstack-i18n/SKILL.md lines / tokens 512 / 5282 (ceiling 6333, headroom 1051) 520 / 5456 (ceiling 6333, headroom 877)
skills/objectstack-i18n/evals/bundles-locales-coverage.json lines / tokens 75 / 1451 (ceiling 1451, headroom 0) 85 / 1642 (ceiling 1642, headroom 0)
all SKILL.md lines / tokens (whole package) 4603 / 56079 4611 / 56253

Why

An AI author who writes a translation bundle from this skill picks keys off the group table; the two keys PR #26757 added were missing from it, so a localized app kept a master-detail grid's heading and a joined report's block headings in English even though the runtime serves both translated (the business case on the card).

Tests

  • node scripts/check-skills-token-ratchet.mjs at head: 81 authored bundle file(s) within their ceilings; 10 generator-owned file(s) measured, not ratcheted, exit 0; objectstack-i18n/SKILL.md ✓ (5456 / 6333), bundles-locales-coverage.json ✓ (1642 / 1642, headroom 0).
  • node scripts/check-skills-token-ratchet.mjs --self-test: 79 cases pass, exit 0.
  • The eval file parses, and no case has a must_contain string in its must_not_contain.
  • No test file edited; no forced test edit.

Acceptance notes

  • The eval is not run by any gate (the repo has no eval runner; check:skill-docs / check:skill-refs / check:skill-examples read SKILL.md, references/ and the marked code fences). The new example fence is a fragment and carries no os:check marker on purpose.

Verification

  • node scripts/pm/dispatch-gates.mjs --tier --repo objectstack-ai/objectstack: MANDATORY — skills/**, clause ①, no one-line exit; changed lines 51 vs the 3000 threshold.
  • node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack at head 4f490d8e (the final commit) derived 87 commands. All 87 ran in the worktree after that commit, each exit code captured before any pipe: 87 of 87 exit 0 (70 source-reading commands in one serial runner, the 17 dist-reading ones in a second after the build) — among them node scripts/check-skills-token-ratchet.mjs and its --self-test, pnpm --filter @objectstack/spec run check:skill-docs / check:skill-examples / check:docs, pnpm check:pm-governed-merges, pnpm check:pm-dispatch-gates, pnpm check:published-files, node scripts/check-empty-changeset.mjs --base origin/main, node scripts/check-adr-0087-registration.mjs --base origin/main, node scripts/check-changeset-no-major.mjs --base origin/main, pnpm check:skill-identifier-liveness, pnpm check:skill-frame-sync, pnpm check:skill-compatibility, pnpm check:doc-authoring, pnpm check:docs-spec-enumerations, pnpm check:ratchet-remedy-authority, pnpm check:nul-bytes.
  • dispatch-gates --ran: 87 derived famil(ies) accounted for — 87 run, 0 NOT-MEASURED (a DERIVED zero — all 87 recorded an exit code and none of them is 3), exit 0; no UNRUN family named on stderr.
  • Build closure before the dist-reading gates: turbo run build --filter='./packages/**' --concurrency=2 under scripts/pm/os-verify-lock.sh, VERDICT command-exit 0 (held 8m20s).
  • The edited gate script's own test suite is its --self-test (79 cases); no package source is touched, so no package test / typecheck is owed; pnpm lint is CI's run.

Human Minimum

  • 1. Schemas start as Zod; packages/spec holds no runtime logic. (No schema touched.)
  • 2. Every name I added uses the casing for its kind.
  • 3. No formatter ran; pnpm lint passes (the repo-wide run is CI's; no source file edited).
  • 4. One issue, one branch off an up-to-date main, one pull request.
  • 5. A change that publishes carries a changeset, and both declaration lines are filled in here and in the changeset.
  • 6. packages/spec touched: n/a, not touched.
  • 7. No hand edits to content/docs/references/, packages/*/CHANGELOG.md or content/docs/releases/.
  • 8. Title, body and comments are in English.
  • The Before Submitting list in CONTRIBUTING.md is done.

🤖 Generated with Claude Code

https://claude.ai/code/session_01ADHkmPqouEb6yELnSqBwRY


Generated by Claude Code

…oined report's block headings

The objectstack-i18n group table did not name two keys the 18.2 bundle
accepts and the runtime serves: a master-detail field's `inlineTitle`
(addressed on the child object that owns the field; untranslated it keeps
its authored text, no fallback to the child's plural label) and a joined
report's `blocks.{block_name}.{label,description}` (keyed by the block's
required `name`). Both are now in the table, with one example row each
spelled as the shipped app-crm and app-showcase bundles spell them, and
the hand-written author page under content/docs/ui gains the same two
rows. The eval file gains one prompt for both keys; its ratchet row is
pinned at the measurement after the duplicate `--no-objects-only` pin was
cut, under the standing ruling.

Claude-Session: https://claude.ai/code/session_01ADHkmPqouEb6yELnSqBwRY
Co-authored-by: Claude <noreply@anthropic.com>
…der lists report blocks

The lead-in above the zh-CN example fence read as the two keys of the
previous sentence; it now names `inlineTitle` and the report-block keys,
and a blank line separates the fence from the `settings` paragraph. The
validate-translation-references header's Reports section lists
`blocks.<block_name>.label` / `.description` among a report's leaf keys,
which the validator already accepts from the Zod shape.

Claude-Session: https://claude.ai/code/session_01ADHkmPqouEb6yELnSqBwRY
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️ 1 changed file(s) yielded no anchor (packages/lint/src/validate-translation-references.ts), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)).

What this run could not see
  • 1 changed file(s) yielded no anchor (packages/lint/src/validate-translation-references.ts) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.
  • a key NAME is not a key, so the hand re-read the line above prescribes can land on the wrong schema. The same spelling is authorable on one governed type and a [REMOVED] tombstone on another for each of active, aria, joins, objects, template, tools and version (censused on [finding] tools is a key on BOTH AgentSchema (tombstoned, dead) and SkillSchema (live, cloud-attested), so a name-based search attributes skill examples to the agent key — it produced a false stop-the-line alarm on PR #19059 #19093 over the liveness ledger's governed types, top-level keys); nothing in a search result distinguishes the two, so a grep hit on a LIVE example reads as evidence about the DEAD key. Measured on fix(spec): the agent.tools liveness row says dead — it claimed live on a key the schema tombstoned #19059: content/docs/ai/agents.mdx was reported as contradicting the agent.tools tombstone over its tools: example at :161, which is inside the defineSkill({ block opened at :155 — the page was already correct. Settle ownership by PARSING the value against both schemas, never by the name: that literal PASSES SkillSchema, and as an AgentSchema it FAILS at tools with the tombstone prescription. ⛔ These names are not the whole class — a key retired through a .strict() guidance map leaves no tombstone in the walked shape and none of them here (tool.category, live as AIToolDefinition.category).

Coarse fallback — 4 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 8eef9a8db402b6d46b15cc2375f8acddbb0d7b7e → packageMentionDocs.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对

ACCEPT · domain:skills#1 · session_01ADHkmSrRBdu9MdC6fc33Uu · head 73e5a8f1 · 2026-10-27T18:36Z

  1. 形态 — Tier H (skills/**): skills/objectstack-i18n/SKILL.md teaches fields.{field}.inlineTitle (keyed on the child object that owns the master-detail field; untranslated keeps its authored text) and reports.{report}.blocks.{block_name}.{label,description}, with one example row each from the shipped bundles; evals/bundles-locales-coverage.json case 8 for both keys; the same two rows on content/docs/ui/translations.mdx (the card's hand-written-twin item); the validate-translation-references.ts Reports header comment (round 2, claim amendment 6449881440); eval ratchet row 1451 → 1642 at the measurement; patch changeset for @objectstack/skills.
  2. 前提实测 — PR feat(spec): a joined report's block headings and a master-detail field's inline grid heading are translatable #26757 merged; the examples are real (examples/app-crm/src/translations/crm.translation.ts:99, examples/app-showcase/src/system/translations/index.ts:1362); case 6's cut --no-objects-only pin stays pinned by case 5 (must_contain L50), so no fact left the file.
  3. 门禁 check-runs — dev ran the 108 derived commands on the head (87 + 21 from the lint path), all exit 0 (--ran 108, 0 NOT-MEASURED); @objectstack/lint typecheck and 7430/7430 tests green; build closure VERDICT 0. CI on the head is read again before landing.
  4. 接受的偏差 — the example rows sit in a fragment fence after the table rather than in the todo-mirroring bundle (open question A). The seat patched the PR body (L163 now in this PR; the "not filed" note removed). Payment of the eval row follows 「A:先削重复,余额按实测提高」: 77 B trimmed first, then raised by the measured remainder.
  5. 范围外去向 — none. Contract review at CONTRACT_REVIEW_TIER: requested from the director seat.
  6. 落地条款 — governed, Tier H: stays draft until a GOVERNED_APPROVERS approval; then it lands through the queue. skills(objectstack-ui, objectstack-i18n): the actions rule and the i18n skill do not teach an action's disabledReason (follow-up owed by #26619) #26790 (same SKILL.md) is dispatched after it lands.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 73e5a8f1d60b4332b2da22a580cbffaff3f6aeeb
Local-runs: none
Scope: skills/objectstack-i18n/SKILL.md + skills/objectstack-i18n/evals/bundles-locales-coverage.json, scripts/check-skills-token-ratchet.mjs, content/docs/ui/translations.mdx, packages/lint/src/validate-translation-references.ts, .changeset/26759-i18n-skill-inline-title-report-blocks.md, packages/spec/src/system/translation.zod.ts, packages/spec/src/ui/report.zod.ts, examples/app-crm/src/translations/crm.translation.ts, examples/app-showcase/src/system/translations/index.ts

Director seat (summon #52, ledger objectstack#12708), summoned by the domain:skills#1 seat. Read-only at the head above: the diff, card #26759 (filing gate ①, the Skills-docs: follow-up owed by #26757), its thread (claim 6449271046, amendment 6449881440, both dev reports), the seat's ACCEPT 6450504495, the eval file as stored at this head and on origin/main 0ea90c7a, the spec docblocks and the two shipped bundles on main, the head's check runs. skills/** is a governed-register row and publishes (the @objectstack/skills bundle) ⇒ the rules face, CONTRACT_REVIEW_TIER; Tier H, lands on a GOVERNED_APPROVERS approval, not on this record. Served at CONTRACT_REVIEW_TIER. The seat records; it does not approve, ready, queue or merge.

① Derived judgments

  • Both taught keys are the spec's, with the spec's own rule. FieldTranslationSchema.inlineTitle (translation.zod.ts:134–147 on main): the heading of the inline child grid drawn on the PARENT's form, addressed on the child (objects.<child>.fields.<field>.inlineTitle), overlaid by translateObject, "No fallback to the child object's translated plural label: an authored inlineTitle with no entry here keeps its authored text". The skill row and the docs row say exactly that. reports.<name>.blocks.<block_name>.{label,description} (translation.zod.ts:1199, a strictObject keyed "by the block's name (JoinedReportBlockSchema.name, required)"; report.zod.ts:280). The skill sentence, the docs row and the lint header comment all spell it that way.
  • The example rows are the shipped bundles', byte for byte. crm.translation.ts:97–99: crm_opportunity_line_item: { fields: { opportunity: { inlineTitle: '产品明细' } } }, under the comment "the field lives on the line item, so the key is the line item's". app-showcase … translations/index.ts:1361–1363: showcase_task_overview … blocks: { open_block: { label: '未完成任务' } … }. The fragment fence invents nothing; the skill's own todo-mirroring bundle has neither source, so a fence is the right home (dev open question A — agreed).
  • Case 8 grades its own ideal answer right. Reading the stored head file: every must_contain (inlineTitle, crm_opportunity_line_item, blocks, open_block) present; neither must_not_contain (fields.opportunity_line_item, the key on the parent; components.open_block, a page-component spelling) present. The refused spellings are the two mistakes an author would actually make.
  • The cut is a duplicate, as the seat read. Case 6 loses its os i18n extract --no-objects-only sentence and the --no-objects-only assertion; case 5 on main and at the head still pins the flag in must_contain. 77 bytes (56 from expected_output, 21 from the assertion list), matching the row comment.
  • Ratchet arithmetic at the head. Eval file stored 5802 → 6567 bytes (+765 = the new case − 77); ceil(5802/4) = 1451, ceil(6567/4) = 1642, pinned at the measurement, headroom 0, the tap quoted verbatim. SKILL.md 21866 − 20 (stamp) = 21846 ⇒ 5462 of 6333, row unmoved. The head's own ratchet row reads 1642.
  • The lint edit is a comment. validate-translation-references.ts:163–165 header only; the validator reads the Zod shape, which already accepts blocks. No behaviour, no export.

② Semver level

@objectstack/skills takes a patch changeset, both declaration lines present at line start and equal to the PR body's. Skill text, an eval and a docs page; patch is right. The lint comment edit publishes nothing new.

③ Boundary flags

  • Governed path (skills/**, Tier H): no review yet; draft. This seat's account is not a GOVERNED_APPROVERS member; this record is not an approval and does not lift Tier H.
  • Should-fix, in this PR's own hunk (same class as 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): case 6 — the case this PR edits — still spells its own must_not_contain string inside its ideal answer: expected_output says "never permissionSets" while must_not_contain lists permissionSets, so the ideal answer is graded wrong. Pre-existing on main, but the PR has the case open and the dev's "no must_contain string sits in a must_not_contain" check does not cover expected_output against must_not_contain. A same-byte rewording (for example "not the camel-case alias") keeps the file at its 1642 pin; a longer one is paid under the same ruling. Fix here rather than carry it to a third card.
  • Check runs on 73e5a8f1 at this record: 42 success, 9 expected skips, nothing in progress, nothing red — including Lint · repo & tooling gates (the token ratchet), Check Changeset, both Lint · docs & code guards and the @objectstack/lint typecheck/test shards.
  • origin/main has not moved on any of the six files since the branch's base; no merge-in owed.
  • No gate runs the eval; the green proves parse, ratchet, changeset and the doc gates, not that an agent passes case 8 (named, as on docs(skills): objectstack-ui gains an eval for a report's dateRange and exportOptions #26774 and docs(skills): objectstack-formula evals exercise label(record.kind), and refuse it in a predicate #26810).
  • Note, not a finding: the spec docblock says the inline grid is drawn by "a master_detail / lookup field with inlineEdit"; the skill says master_detail. field.form.ts:294 shows the key only when type == 'master_detail' and field.zod.ts:1675 describes it as the master-detail grid title, so the skill follows the authoring surface. Fine as written.
  • Dev deviations: the examples in a fragment fence (judged above); the docs page rides this Tier H PR (the card allowed either; nothing on it is blocked by waiting); the seat patched the body after the round-2 amendment so the L163 bullet now matches the diff.

④ Design judgment

  • skills/objectstack-i18n/SKILL.md against the spec: the inlineTitle row teaches the one non-obvious fact (the key is the child's, and silence keeps authored text) in the row where an author picks field sub-keys, and the report sentence puts blocks.{block_name} beside the label + description it extends, keyed the way pages.{page}.components.{id} already taught. Case 8's prompt gives real object, field, report and block names from shipped bundles, so a candidate cannot pass by paraphrase, and its refusals are the two plausible wrong addresses. The docs twin carries the same two rows with the same rule. Holds; nothing to break.

Implemented-by: claude/project-thread-jdbl6z
Reviewed-by: session_01ADHkmQr732toX135tyo5zs

VERDICT: PASS


Generated by Claude Code

…used string

The i18n eval's case 6 said "never `permissionSets`" in its ideal answer
while listing `permissionSets` under must_not_contain, so the ideal
answer graded wrong. Same-byte rewording ("not the camelCase name");
the file stays at its 1642-token pin.

Claude-Session: https://claude.ai/code/session_01ADHkmPqouEb6yELnSqBwRY
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 57406c6ff6f1e8037aa9e2846f483637d74a8afb
Local-runs: none
Scope: skills/objectstack-i18n/SKILL.md + skills/objectstack-i18n/evals/bundles-locales-coverage.json, scripts/check-skills-token-ratchet.mjs, content/docs/ui/translations.mdx, packages/lint/src/validate-translation-references.ts, .changeset/26759-i18n-skill-inline-title-report-blocks.md, packages/spec/src/system/translation.zod.ts, packages/spec/src/ui/report.zod.ts, examples/app-crm/src/translations/crm.translation.ts, examples/app-showcase/src/system/translations/index.ts

Director seat (summon #52), re-stamping record 6450590107 (head 73e5a8f1, PASS) for round 3. Read-only: the one-file diff 73e5a8f1..57406c6f, the eval file as stored at this head, the ratchet row, the head's check runs. Served at CONTRACT_REVIEW_TIER. The seat records; it does not approve, ready, queue or merge.

① Derived judgments

② Semver level

Unchanged: @objectstack/skills patch, both declaration lines as before.

③ Boundary flags

  • Governed path (skills/**, Tier H): draft, no review yet; this record is not an approval.
  • Check runs on 57406c6f at this record: 18 success, 7 skips, 19 still in_progress (Test Core 1–8/8, Build & E2E UI, Type Check UI, Build Docs, Build Core among them). The one-line JSON edit touches no gate input but the ratchet, whose job (Lint · repo & tooling gates) is among the ones to land; a red there re-opens this record.
  • Should-fix from 6450590107: resolved at this head. No new flags.

④ Design judgment

Unchanged from 6450590107 ④; the rewording keeps case 6's teaching (the stack's permissions[] spelling, not the alias) without spelling the refused token.

Implemented-by: claude/project-thread-jdbl6z
Reviewed-by: session_01ADHkmQr732toX135tyo5zs

VERDICT: PASS


Generated by Claude Code

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

Labels

documentation Improvements or additions to documentation size/s tooling

Projects

None yet

3 participants