Skip to content

docs(skills): the objectstack-ui report example declares its download in exportOptions under the base object's allowExport - #27318

Merged
os-zhuang merged 2 commits into
mainfrom
claude/issue-26777-report-export-options
Oct 28, 2026
Merged

os-zhuang merged 2 commits into
mainfrom
claude/issue-26777-report-export-options

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #26777

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么:skills/objectstack-ui/rules/dashboards.md 〈Report Configuration〉的 defineReport 示例在 dateRange 下加一行 exportOptions: { formats: ['csv', 'xlsx'] },行尾注释点名可选的 includeHeaders / fileNamePrefix;注释块加一句:exportOptions 只声明下载,谁能下载是基对象权限集上的 allowExport,joined 报表既不接受 dateRange 也不接受 exportOptions。token 棘轮用同文件折叠支付:删掉〈Server-side date bucketing〉已教过的 dateGranularity 一条和〈Drilldown〉已教过的 drilldown 一句;文件 6221 → 6214 tokens,上限 6221 不动。
  • 为什么改:PR docs(skills): objectstack-ui gains an eval for a report's dateRange and exportOptions #26774 为卡 skills(objectstack-ui): no eval teaches a report's dateRange / exportOptions, because both ui eval files sit at their token ceiling (follow-up owed by #26548) #26633 落地的 eval 要求报表声明 exportOptions 并以 allowExport 命名下载权限,而技能规则只教 dateRange;照技能写报表的 agent 没有下载声明的样例,可能自造 permissions.export 这类键或漏掉导出。改后 eval 若失败只会是 agent 的错,不再是教学的缺口。
  • 风险与回滚:只动一个受管 markdown 规则文件和一个 patch changeset,不改 schema、键或运行时;折掉的两处文字在同文件另两节原样存在。回滚即 revert 本 PR。
  • 先看:skills/objectstack-ui/rules/dashboards.md L419–421(注释块新句,措辞即契约)、L401(示例新行)、原 L406–409 与 L414–415 的删除(折叠是否真有第二处);.changeset/26777-report-export-options-rule.md。
  • 两分钟验证:node scripts/check-skills-token-ratchet.mjs,预期打印 skills/objectstack-ui/rules/dashboards.md is 6214 tokens (ceiling 6221; headroom 7) 并以 0 退出。
  • 需要你做的:批准本 PR(skills/** 受管面,Tier H;PR 保持 draft,由席位落地)。

What changes

One governed rule file and one changeset.

skills/objectstack-ui/rules/dashboards.md 〈Report Configuration〉 — the report section the skill routes to (SKILL.md L148 points at this file for report config):

  • The defineReport example gains one line under dateRange (the diff below): exportOptions with formats: ['csv', 'xlsx'], and a trailing comment naming the optional includeHeaders / fileNamePrefix. Every key is read off packages/spec/src/ui/report.zod.ts on origin/main: the report's exportOptions is ReportExportOptionsSchema.optional() whose describe reads "Report export control: { formats?, includeHeaders?, fileNamePrefix? }, csv / xlsx, on by default; who may export is the base object's export permission (refused on a joined report)"; formats admits exactly 'csv' | 'xlsx' (the reverse leg under Tests shows 'pdf' refused by the type).
  • The note block gains one sentence: exportOptions declares the download, never who may download — that is the base object's permission-set allowExport; a joined report takes neither dateRange nor exportOptions. It is the schema's own docblock shortened — "Who may export is NOT declared here — there is no report permission key. The control is offered to a viewer whose effective API operations on the dataset's base object include export: the ObjectPermission.allowExport axis" — plus the two joined-container refusals JOINED_CONTAINER_DATE_RANGE_REFUSED and JOINED_CONTAINER_EXPORT_OPTIONS_REFUSED. The example writes no allowExport: true anywhere: allowExport is named in words as a permission-set key, which is what the eval's must_not_contain guards.
  • Paid under the token ratchet by two folds of wording the same file already teaches, measured line by line (table below):
    • the dateGranularity bullet (old L406–409): its meaning lives in 〈Server-side date bucketing — dateGranularity (ADR-0021)〉 — the lead paragraph (the dataset dimension carries it; selecting it groups server-side; without it every timestamp becomes its own category) and the five-value bucket table — in the Level A table under 〈Dataset-Bound Widgets〉 (date-bucket day/week/month/quarter/year fits a dataset; a computed bucket escalates), and in the example's own comment two lines above the call (close_date with dateGranularity: 'quarter');
    • the drilldown sentence (old L414–415): its meaning lives in 〈Drilldown〉 — "Reports drill the same way. A summary / matrix report (drilldown defaults true) opens the identical in-place drawer on row/cell click".
  • Not folded: the rows / columns axis sentence and the order nuances (by must be a selected name; list the columns key first) have no second home in the file beyond the example's inline comments, so they stay. One further candidate was left for a later shrink: the example's order comment ("by measure; dates default to chronological") restates the note's ASCENDING sentence.

.changeset/26777-report-export-options-rule.md: @objectstack/skills patch — the published bundle is built from skills/** (packages/skills ships dist, its build is sync-catalog.mjs) — both declaration lines at line start, one sentence.

Not touched, by the ruling: scripts/check-skills-token-ratchet.mjs (the dashboards.md row stays 6221 — the standing ruling 「A:先削重复,余额按实测提高」 has no locatable comment id, so no raise; the file now sits 7 tokens under its ceiling, so none is needed either) and skills/objectstack-ui/evals/** (the eval already expects this teaching).

The edited region, before → after

@@ -400,2 +400,3 @@ export const PipelineCoverageReport = defineReport({
   dateRange: { dimension: 'close_date', defaultRange: 'this_year' },
+  exportOptions: { formats: ['csv', 'xlsx'] }, // the download; optional `includeHeaders`, `fileNamePrefix`
   order: [{ by: 'amount_sum', direction: 'desc' }], // by measure; dates default to chronological
@@ -405,6 +406,2 @@

-> **`dateGranularity`** lives on the dataset's date **dimension**
-> (`day | week | month | quarter | year`); selecting that dimension buckets the
-> field server-side in a single aggregate query — do **not** pre-compute virtual
-> columns for this.
 > **`rows`** are the report's grouping dimensions (selected from the dataset by
@@ -413,4 +410,3 @@
 > put both axes in `rows`. Multi-level grouping on either axis = multiple
-> dimension names in that array. `drilldown` (default `true`) makes cells
-> click-through to the underlying records.
+> dimension names in that array.
 > **`order`** sorts the result server-side — a list of `{ by, direction }`, most
@@ -422,2 +418,5 @@
 > report orders per block (`blocks[].order`), never on the container.
+> **`exportOptions`** declares the download, never who may download — that is the
+> base object's permission-set `allowExport`; a `joined` report takes neither
+> `dateRange` nor `exportOptions`.

Skills readings (skills/** touched; before = origin/main a0aa8a1, the branch base; after = head; tokens in the ratchet's ceil(utf8 bytes / 4) convention):

Reading Before After
rules/dashboards.md lines / bytes / tokens 461 / 24881 / 6221 (ceiling 6221, headroom 0) 460 / 24853 / 6214 (ceiling 6221, headroom 7)
added lines — L401 108 B (27.00 tok) · L419 84 B (21.00) · L420 78 B (19.50) · L421 35 B (8.75) → 305 B, 76.25 tok
folded lines old L406 66 B (16.50 tok) · L407 80 B (20.00) · L408 83 B (20.75) · L409 20 B (5.00) · L414–415 tail 84 B (21.00) → 333 B, 83.25 tok —
net on the file — −28 B = −7 tokens; no re-wrap counted as payment
skills/objectstack-ui/** lines 2286 2285
all SKILL.md lines 4615 4615
whole skills/** tree lines 19268 19267
bundle total tokens (ratchet report) 215826 215819

Why

The eval landed by PR #26774 for card #26633 (skills/objectstack-ui/evals/report-period-export.json) scores a report-authoring answer on exportOptions with 'csv' / 'xlsx' and on allowExport named in words, and refuses permissions.export, canExport, allowExport: true and 'pdf'. On origin/main the rules teach dateRange and nothing about the download (git grep -n "exportOptions\|allowExport" skills → hits only under evals/), so an agent authoring from the skill had no example of the declaration and the eval could fail for a gap in the teaching rather than in the agent. The premise held on the branch base a0aa8a1: the same grep, the same zero hits under rules/**.

Tests

  • node scripts/check-skills-token-ratchet.mjs — before: skills/objectstack-ui/rules/dashboards.md is 6221 tokens (ceiling 6221; headroom 0); after: … is 6214 tokens (ceiling 6221; headroom 7), 82 authored bundle file(s) within their ceilings, exit 0 both runs. Its --self-test exit 0.
  • pnpm --filter @objectstack/spec check:skill-examples (the gate that type-checks every os:check block; it is packages/spec's script, run by CI after the workspace build, and not in the dispatch-gates --commands list for this diff) — after building @objectstack/spec and the @objectstack/client-react... closure under scripts/pm/os-verify-lock.sh (VERDICT command-exit 0, held 73 s and 264 s): ✅ 270 prose examples type-check across 3 surface(s) — every marked block parsed, so tsc ran the SEMANTIC pass on all of them, exit 0. So formats: ['csv', 'xlsx'] as string literals is accepted by defineReport's input type (hypothesis 4 holds).
  • Reverse leg, proving the gate reads this very block and not a cached reading — run after the commit, on the committed file, through node scripts/ablation-replace.mjs --file skills/objectstack-ui/rules/dashboards.md --anchor "formats: ['csv', 'xlsx'] }" --replacement "formats: ['csv', 'pdf'] }" -- pnpm --filter @objectstack/spec check:skill-examples: mutation landed on disk (anchor 1 → 0, blob b5223630 → afe444cb), the gate went red with error TS2322: Type '"pdf"' is not assignable to type '"csv" | "xlsx"', command exited 1; restored by the tool, then proven: the on-disk blob hash equals the HEAD blob (b5223630913e881657aac13fe9d2ad21757779e1), git diff HEAD empty, git status clean. Expected direction red; observed red. No permanent test file left.
  • No package source is touched, so no package test / typecheck is owed; no test file edited. The eval JSON is executed by no gate (the repo has no eval runner).

Acceptance notes

  • Hypotheses from the dispatch, measured: (1) the schema block carries exportOptions with formats 'csv' | 'xlsx', includeHeaders?, fileNamePrefix?, and the joined refusals at report.zod.ts L187–207 — confirmed, quoted above; (2) content/docs/references/ui/report.mdx L71 and L116–122 teach the same keys — confirmed (a generated reference page; the rule text here is shorter); (3) the folds — confirmed for dateGranularity and drilldown; the rows / columns / order wording was not a restatement and stays; (4) the os:check compile — confirmed, with the reverse leg; (5) the derived gate list carried 43 families and did not name check:pm-governed-prose (the diff touches neither AGENTS.md nor the governed register), so it was not run.
  • origin/main moved from a0aa8a1 (the branch base) to d4427ae (one ui/packages/components test commit) while the branch was open; merged in as 94cb20a with no overlap on any touched surface, and the gate union below ran on that head.
  • The ratchet script's header says lowering a ceiling to a shrunken file's count is "always legitimate and encouraged"; the row was left at 6221 because the ruling section names the script as not touched. Noted for the seat.
  • Nothing found worth filing: no reproducible defect, no contract violation, no authoring trap met on this card.

Verification

  • node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack at head 94cb20ad (the final commit, derived from the merge base with no paths passed) printed 43 commands, identical to the derivation before the origin/main merge. All 43 ran sequentially in the worktree after that commit, each exit captured before any pipe (bash -c "$cmd" >> log 2>&1; EXIT=$?): 42 exit 0 — among them node scripts/check-skills-token-ratchet.mjs and its --self-test, 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, node scripts/check-closing-keyword-parity.mjs, pnpm check:changeset-gate-self-tests, pnpm check:pm-governed-merges, pnpm check:published-files, pnpm check:skill-compatibility, pnpm check:skill-frame-sync, pnpm check:skill-identifier-liveness, pnpm check:doc-authoring, pnpm check:role-word, pnpm check:corpus-claim-drift, pnpm check:nul-bytes, pnpm check:pm-skill-id-lint, pnpm check:dts-closure, pnpm check:lean-entry-closure; 1 exit 3 — pnpm check:dual-build-cjs-loads, PREREQUISITE NOT MET ("some package has no dist/": 33 packages, it asks for a whole-workspace pnpm build), NOT MEASURED locally; CI's Lint & Repo Gates runs it after its build.
  • dispatch-gates --ran: ✓ dispatch-gates --ran: 43 derived famil(ies) accounted for — 42 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3), exit 0.
  • Local-only families: pnpm check:dev-prereqs read this box as not fully built (68 of 106 packages without dist; exit 1) — a state of the worktree, not of the diff, since only @objectstack/spec and the client-react closure were built here; check:skill-frame-freshness is not implicated (no four-axis framework file touched).
  • The wide-population families, the repo-wide pnpm lint, the type-check lanes and the path-scheduled jobs are CI's runs on this PR.
  • Head at the time of the union: git rev-parse --short HEAD = 94cb20a.

Human Minimum

Each item is one rule from
CONTRIBUTING.md › Human Minimum,
which links the AGENTS.md text that states it.

  • 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_01QSeKYmhU5KEj1nukYhp1Tg


Generated by Claude Code

… in exportOptions under the base object's allowExport

The Report Configuration example in rules/dashboards.md taught dateRange and
not exportOptions. The example now declares exportOptions with formats csv /
xlsx and names the optional includeHeaders / fileNamePrefix in a trailing
comment; the note block says who may download is the base object's
permission-set allowExport and that a joined report takes neither dateRange
nor exportOptions. Paid under the token ratchet by folding the
dateGranularity bullet (taught under Server-side date bucketing) and the
drilldown sentence (taught under Drilldown): 6221 -> 6214 tokens, ceiling
untouched.

Claude-Session: https://claude.ai/code/session_01QSeKYmhU5KEj1nukYhp1Tg
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation tooling labels Oct 28, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#2 · os-justin · session_01QSeKYmhU5KEj1nukYhp1Tg

Contract-review-claim: session_01QSeKYmhU5KEj1nukYhp1Tg · head 94cb20a · 2026-10-28T16:38Z

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#2 · os-justin · session_01QSeKYmhU5KEj1nukYhp1Tg

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 94cb20ad78cfc084ef02d21009f8f53c069f35e0
Local-runs: probe — the seat ran node scripts/check-skills-token-ratchet.mjs in a detached read-only worktree of the head (no edit, no build, no network): skills/objectstack-ui/rules/dashboards.md is 6214 tokens (ceiling 6221; headroom 7), 82 authored bundle file(s) within their ceilings, exit 0; the os:check compile gate (check:skill-examples, needs a built @objectstack/spec) was NOT run by the seat — the dev ran it (270 blocks, exit 0) with a hash-proven reverse leg ('pdf' → TS2322), and CI's lanes carry it
Scope: skills/objectstack-ui/rules/dashboards.md (〈Report Configuration〉: the example line L401, the two folds, the note sentence L419–421) + packages/spec/src/ui/report.zod.ts (cited, read not reviewed: ReportExportOptionsSchema import L9, the joined refusals L187–223, the allowExport-is-a-permission guidance L464, the exportOptions docblock L631–646), skills/objectstack-ui/evals/report-period-export.json (cited: the eval the teaching serves) + .changeset/26777-report-export-options-rule.md (prose face, checked sentence by sentence in the ACCEPT)

Claim line 6474877580 on this head (2026-10-28T16:41Z); no earlier record or claim on it. Read at 2026-10-28T16:41Z by the domain:skills#2 seat on the fetched head (two commits: f4457145 + the merge of origin/main d4427aed): two files, +15/−6 (21 ≤ 3000; check-governed-merges --pr 27318: one governed path skills/** ⇒ Tier H). The card's claim 6474010475 served CONTRACT_REVIEW_TIER by path mandate; this review is served at that tier.

① Derived judgments

  • The example line (L401, 108 B): exportOptions: { formats: ['csv', 'xlsx'] }, // the download; optional includeHeaders, fileNamePrefix — the keys are the schema's (ReportExportOptionsSchema: formats 'csv' | 'xlsx', includeHeaders?, fileNamePrefix?; the type refuses 'pdf', shown by the dev's reverse leg) — holds; it is the card's 「Wanted」 first half verbatim.
  • The note sentence (L419–421, 84/78/35 B): exportOptions declares the download, never who may download — the base object's permission-set allowExport; a joined report takes neither dateRange nor exportOptions — matches the schema's own guidance (L464: 「allowExport is a permission, not a report key … declares only what is exported, in exportOptions」) and the two joined refusals (L187–223) — holds; the card's 「Wanted」 second half. The eval's must_not_contain set (allowExport: true, permissions.export, canExport, 'pdf') has 0 hits in the file on this head; exportOptions 3 hits.
  • The two folds: the dateGranularity bullet (old L406–409) — its meaning stands at 〈Server-side date bucketing — dateGranularity (ADR-0021)〉 L279–283 (dimension carries it; selecting it groups server-side), the widget-options row L342, the example comment L190 and the dataset example L295; the drilldown sentence (old L414–415) — stands at 〈Drilldown〉 L373 「Reports drill the same way. A summary / matrix report (drilldown defaults true) …」. Both homes read on the head — genuine deletions, not re-wraps; the dev's 「not folded」 reading (rows/columns/order have no second home) is right. Net −7 tokens; ceiling row untouched (the ruling section forbade a raise; none was needed) — holds.
  • No accept-set or public-surface change: a rules markdown file and a changeset; nothing a runtime reads.

② Semver level

  • @objectstack/skills patch: the published bundle is built from skills/**, so the changeset is owed and is the right level for a teaching addition with no key change; Clause-②: no, Metadata-protocol: none at line start in both the PR body and the changeset, matching the claim; no Skills-docs: line owed (kind none, no narrowing arm). Holds.

③ Boundary flags

  • check:dual-build-cjs-loads NOT MEASURED locally by the dev (whole-workspace build prerequisite) — CI's Lint & Repo Gates lane carries it; read off the head's check-runs in the ACCEPT. The repo-wide pnpm lint and the type-check lanes likewise CI's.
  • Dev's deviations accepted: --no-track worktree spelling; three pushes on its own branch (probe, WIP, merge — no force); the reverse-verification leg on a docs file is a proof that the compile gate reads the block, restoration hash-proven; origin/main merged in as 94cb20ad (one ui/packages/components test commit, no overlap).
  • Out-of-scope notes carried: the ratchet row could be lowered 6221 → 6214 (the script's header calls lowering legitimate) — left for the next author of the file, not this card; one further fold candidate (the example's order trailing comment). Acceptance notes.
  • Author objectstack-fleet[bot] through the relay; mcp_calls: 0; api_writes 2 (both relay dispatches); the relay requested hotlong and os-zhuang and set the assignee on pr_create — the relay's act (card fleet-write: relay pr_create asks the governed approvers to review a Tier H draft before any contract review exists, so an approver can approve and merge it unreviewed (#26566, #26570) #26617's recorded behaviour); draft, no flip by anyone. The labeler added tooling to the PR — a labeler reading, no state meaning.

④ Design judgment

  • Against the card and the eval it serves: an agent authoring a report from this file now sees the download declared beside the period, with the permission named in words on the object — exactly what the eval scores and what the schema's guidance string says. Against the standing ruling 「10402 需要整体考虑 skills 的长度,不能为了一个小功能扩写很多」: +4 lines of teaching paid by −6 lines of restatement; the file shrinks. Against the four-axis frame: focus (one example line, one sentence, no new section), AI-error (the permission is not written as a report key — the trap the eval guards against is named, not tolerated), long-run (the keys are the schema's, read off report.zod.ts, not paraphrased). Holds. Residual: none that a later author must undo.

Implemented-by: claude/issue-26777-report-export-options
Reviewed-by: session_01QSeKYmhU5KEj1nukYhp1Tg

VERDICT: PASS

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#2 · os-justin · session_01QSeKYmhU5KEj1nukYhp1Tg

维护者速读 — 席位终稿 · PR #27318 · head 94cb20ad · domain:skills#2 · 2026-10-28T16:52Z

  • 改了什么:skills/objectstack-ui/rules/dashboards.md 〈Report Configuration〉的 defineReport 示例在 dateRange 下加一行 exportOptions: { formats: ['csv', 'xlsx'] }(行尾注释点名可选的 includeHeaders / fileNamePrefix);注释块加一句:exportOptions 只声明下载,谁能下载是基对象权限集上的 allowExport,joined 报表两键都不收。付账:折掉同文件〈Server-side date bucketing〉与〈Drilldown〉已教过的两段复述,文件 6221 → 6214 tokens,上限不动;一个 patch changeset(@objectstack/skills)。
  • 为什么改:PR docs(skills): objectstack-ui gains an eval for a report's dateRange and exportOptions #26774 为 skills(objectstack-ui): no eval teaches a report's dateRange / exportOptions, because both ui eval files sit at their token ceiling (follow-up owed by #26548) #26633 落地的 eval 要求报表声明 exportOptions 并用 allowExport 命名权限,但规则只教 dateRange——照技能写报表的 agent 没有样例,可能自造 permissions.export 之类的键;改后 eval 若红只会是 agent 的错。
  • 风险与回滚:只动一个受管 markdown 规则文件与一个 changeset,不改 schema、键或运行时;折掉的两段在同文件另两节原样在。回滚 = revert 本 PR。
  • 先看:L401(示例新行)、L419–421(注释新句,措辞即契约,与 report.zod.ts L464 的 guidance 同义)、删掉的旧 L406–409 与 L414–415(折叠之家在 L279–283 与 L373)。
  • 两分钟验证:node scripts/check-skills-token-ratchet.mjs → dashboards.md is 6214 tokens (ceiling 6221; headroom 7),exit 0;grep -c exportOptions skills/objectstack-ui/rules/dashboards.md → 3。
  • 需要你做的:Tier H(skills/**)—— 请审批人(hotlong / os-zhuang,中继已请审)批准本 PR;批准在案后席位落地(ready + 入队),你不必动 draft 位。
  • 席位意见:ACCEPT。契约复核 PASS(6474923414,本席达档,认领行 6474877580 先落);示例键与 schema 逐键对上,eval 的 must_not_contain 四项在文件上零命中;两处折叠之家在 head 上读到;净 −7 tokens,未抬上限(卡引的「先削重复,余额按实测提高」裁决无可引 id,本次也无需抬)。

席位核对 — ACCEPT · domain:skills#2 · session_01QSeKYmhU5KEj1nukYhp1Tg · 2026-10-28T16:52Z

  1. 形态:draft → main,首行 Fixes #26777,Clause-②: no、Metadata-protocol: none 行首在(PR 正文与 changeset 两处);两文件 +15/−6(21 行 ≤ 3000);assignee os-justin;changeset '@objectstack/skills': patch 在,无 skip-changeset(正确:bundle 由 skills/** 构建);两 commit(改动 + 合 origin/main d4427aed);作者 objectstack-fleet[bot] 经中继,mcp_calls: 0;dev 报告首行带署名(6474800024);中继在 pr_create 上已请 hotlong、os-zhuang(requested_reviewers 本席自读)。
  2. 前提实测:席位在取回的 head 的 detached worktree 复跑 token 棘轮 → 6214/6221 ✓;折叠之家 grep 实读(L279–283、L342、L190、L295;L373);eval must_not_contain 四项 0 命中、exportOptions 3 命中;report.zod.ts L9/L187–223/L464/L631–646 读到键与 guidance;check-empty-changeset --base origin/main ✓;check-governed-merges --pr 27318 ⇒ Tier H,一条受管路径;新行字节 108/84/78/35。
  3. 门禁 check-runs(head 94cb20ad,本笔读数 2026-10-28T16:52Z):41 check-runs,27 success · 14 skipped · 0 in progress · 0 failure;14 个 skip 由 check-expected-skips.mjs --check-runs-json(origin/main 名单)判定全部在册,exit 0;mergeable_state: blocked(= draft 待人批,非冲突)。dev 本地派生 43 族 42 绿 + 1 未测(check:dual-build-cjs-loads,CI 的 Lint & Repo Gates 绿)。
  4. 接受的偏差:① --no-track worktree 拼法;② 三次 push(探针/WIP/合 main,自有分支无 force);③ 对 docs 文件跑了一条反向验证腿(证明编译门读到该块,恢复经 hash 证明);④ check:dual-build-cjs-loads 本地未测(需全仓构建),留 CI;⑤ check:dev-prereqs 读本机未全量构建,属本机状态。
  5. 范围外去向:none filed;Acceptance notes 两条留给下一位改该文件者:棘轮行可降 6221 → 6214(脚本头称降低恒合法);示例 order 行尾注释与注释块 ASCENDING 句重复。Skills-docs: 不欠(kind none)。
  6. 落地条款:Tier H;契约复核 PASS 评论 6474923414(head 94cb20ad,认领行 6474877580);等 GOVERNED_APPROVERS 任一 APPROVED 在案 ⇒ 席位过落地前检、经中继 pr_ready + automerge_enable 落地;MERGED 后关卡摘 pm:dispatched;本 PR 后 dashboards.md 热文件队列 FREE。

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

Development

Successfully merging this pull request may close these issues.

skills(objectstack-ui): rules teach a report's dateRange but not its exportOptions

3 participants