Skip to content

Commit ff26bc4

Browse files
docs(audits): archive eleven closed 2026-06 liveness audits, with the spec ledger notes that cite them (#27280)
<!-- claude-projects-attribution: {"github_login":"os-support-ai"} --> _Requested by **Yibo Wang** · [project thread](https://claude.ai/code/project/chan_01BVUyyPie8gHwoPM18iABwB?thread=cmsg_01BVUyyPie8gHwoPM18iABwBEWyq4TR24cs3kXM8Hhr1WG)_ Fixes #26257 Claim: 6470176009 Clause-②: no Metadata-protocol: none The fuller arm of the card, as the claim scopes it: the 11 closed 2026-06 property-liveness audits whose every citation can be rewritten move to `docs/audits/archive/2026-06/`, with each citation rewritten. Only path text inside notes and docs moves. No liveness status, evidence row, schema, accept set or export changes. ## 维护者速读 - **改了什么:** 11 份已关闭的 2026-06 属性存活审计从 `docs/audits/` 移进 `docs/audits/archive/2026-06/`,`packages/spec/liveness/*.json` 里引用它们的 `_note` 路径、两份 README 和一处审计正文同步改写。 - **为什么改:** #26075 的裁决 A 要求关闭的审计归档;#26925 已移走 4 份无引用的,这次是 spec 引用的那部分。 - **风险与回滚:** 只改注释性路径文字,`_note` 不参与任何校验;`@objectstack/spec` 发 patch(`liveness/` 在其 `files[]` 里)。回滚 = revert 本 PR。 - **先看:** `docs/audits/README.md`(新增的「保留原位」说明与 12 行改动)、`packages/spec/liveness/README.md` L7、任一 `packages/spec/liveness/*.json` 第 3 行。 - **两分钟验证:** `git grep -nE "audits/2026-06-(action|agent|dashboard|field|flow|hook|object|report|skill|tool|view)schema"` → 零命中。 - **需要你做的:** 无,席位落地。 ## What changes - **Moved (`git mv`, nothing deleted), 11 files** into `docs/audits/archive/2026-06/`: `2026-06-{action,agent,dashboard,field,flow,hook,object,report,skill,tool,view}schema-property-liveness.md`. None of them has an outbound relative link, so no link inside them needed re-rooting. - **`@objectstack/spec`, `liveness/*.json`.** The `_note` of action, agent, dashboard, field, flow, hook, object, report, skill, tool and view names `docs/audits/archive/2026-06/...` instead of `docs/audits/...`. One line in each file. - **`packages/spec/liveness/README.md` L7.** The `docs/audits/2026-06-*-property-liveness.md` glob now names the archive and says the ones still cited from an ADR or a changelog stay in `docs/audits/`. - **`docs/audits/README.md`.** 11 table rows and the report-slice link point into `archive/2026-06/`. A new note under the lifecycle line records which closed audits stay in place and why (ADR-cited, or cited from the published `packages/spec/CHANGELOG.md`). - **`docs/audits/2026-06-record-search-liveness.md` L34.** Its bare mention of the fieldschema audit names the archive path. That file stays in place because ADR-0061 cites it, but it is an audit, not an ADR, so its text can change. - **Changeset:** `.changeset/26257-archive-2026-06-liveness-audits.md`, `@objectstack/spec` patch, with both declaration lines. ### Staying in place by design (9 files) - **Cited from the release-owned `packages/spec/CHANGELOG.md` (3):** `2026-06-appschema-property-liveness` (CHANGELOG L77148, L101255), `2026-06-dead-surface-disposition-plan` (L67997, L110039) and `2026-06-validationschema-property-liveness` (L113020, L113790). Seat 1 ruled in the claim that a stale path in a published changelog is worse than an unarchived audit. So their zod comments (`app.zod.ts` L1607, `field.zod.ts` L1956/L1976/L2005, `validation.zod.ts` L53), the `field.json` `_note` mention of the disposition plan and `content/docs/references/data/validation.mdx` do not change. - **ADR-cited (6), untouched:** `handwritten-docs-accuracy-followups` (ADR-0112), `metadata-functional-completeness` (ADR-0078), `react-blocks-conformance` and `react-tier-authoring-dogfood` (ADR-0082), `record-search-liveness` (ADR-0061) and `security-identity-property-liveness` (ADR-0049, also `liveness/permission.json`). No ADR is edited. ## Tests No behaviour changes, so no test is added. The liveness suites that read `liveness/*.json` were re-run on this head (below). ## Acceptance notes - Census taken on `origin/main` `0cd578f7` for each of the 20 remaining files: `git grep -F BASENAME` over the whole tree (packages, content, docs, skills, scripts, ui), plus a sweep for `audits/2026-06` and `2026-06-*` globs. No script, test or skill pins a `_note` path or the "Seeded from docs/audits/..." spelling. - No package `CHANGELOG.md` cites any of the 11 moved files. ## Verification All readings on head `9876aa877`, tree `objectstack-ai/objectstack`. <details><summary>No reference to a moved file's old location</summary> For each of the 11 basenames, `git grep -n BASENAME -- . ':!packages/spec/CHANGELOG.md'` with every `archive/2026-06/` hit removed: 0 lines for every file. `node scripts/check-adr-links.mjs` exit 0. `pnpm check:doc-authoring` exit 0. </details> <details><summary>Spec build, generated artifacts and liveness suites (under os-verify-lock)</summary> - `pnpm --filter @objectstack/spec build`: VERDICT command-exit 0. - `pnpm --filter @objectstack/spec check:generated`: exit 0, "All 14 generated artifacts are up to date" (`check:docs` content/docs/references included, so nothing under `references/` moves). - `pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 scripts/liveness scripts/count-shards-merge.test.ts`: VERDICT command-exit 0, Test Files 13 passed (13), Tests 369 passed (369). - `pnpm --filter @objectstack/spec run check:liveness`: exit 0. </details> <details><summary>Derived gates: 60 derived, 59 run with exit 0, 1 NOT MEASURED</summary> `node scripts/pm/dispatch-gates.mjs --ran FILE`: "60 derived famil(ies) accounted for, 59 run, 1 NOT-MEASURED". The one NOT MEASURED is `pnpm check:dual-build-cjs-loads` (exit 3, PREREQUISITE NOT MET: it needs every package's `dist`, 85+ packages unbuilt here); CI's Lint & Repo Gates runs it. `check:doc-formula-expressions` and `check:lean-entry-closure` first exited 3 for the same reason and were re-run green after building the `@objectstack/lint` and `@objectstack/objectql` closures. `check-plugin-teardown-shape --self-test` needed its pinned fixture commit fetched into the shallow clone, then exit 0. </details> --- _Generated by [Claude Code](https://claude.ai/code/session_01WGufziKbCZuq2UMoc2FvwP)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent d4427ae commit ff26bc4

26 files changed

Lines changed: 38 additions & 25 deletions
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
'@objectstack/spec': patch
3+
---
4+
5+
docs(spec): the liveness ledger's `_note` paths follow eleven closed 2026-06 audits into `docs/audits/archive/2026-06/`
6+
7+
Clause-②: no
8+
Metadata-protocol: none
9+
10+
The `_note` of `liveness/{action,agent,dashboard,field,flow,hook,object,report,skill,tool,view}.json` named its seeding audit as `docs/audits/2026-06-<type>schema-property-liveness.md`. Those audits are closed and now live under `docs/audits/archive/2026-06/`, so each note names the new path, and `liveness/README.md` says where the series sits. No status, evidence or accepted shape changes: only the path text inside notes moves.

‎docs/audits/2026-06-record-search-liveness.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ Record search is a **declared-but-unenforced** capability (cf. ADR-0049). `$sear
3131
- `object.searchable` boolean (`object.zod.ts:52`) — consumed by metadata-admin UI + the command-palette object gate; **not** the data layer.
3232
- `object.search` (`SearchConfigSchema`, `object.zod.ts:113`) — `fields`/`displayFields`/`filters`; **no runtime consumer**.
3333
- `view.searchableFields` (`view.zod.ts:522`) — UI input control + ListView; not the data layer.
34-
- field-level `searchable` — **DEAD** (per `2026-06-fieldschema-property-liveness.md`).
34+
- field-level `searchable` — **DEAD** (per `archive/2026-06/2026-06-fieldschema-property-liveness.md`).
3535

3636
## 4. Lookup search (objectui) — sends `$search`, gets a no-op
3737
- `LookupField.tsx:311` / `RecordPickerDialog.tsx:451` — bare `$search`. The picker "works" visually only because datasets are tiny; there is **no server filtering**.

‎docs/audits/README.md‎

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,29 @@
22

33
> **Lifecycle of a file in `docs/audits/`:** an audit is *open* while its findings are being worked and *closed* once each one is fixed, ruled out or carried into a tracked ledger or issue; a closed audit moves to `docs/audits/archive/`, and git history keeps every version.
44
5+
> **Closed but kept in place:** a closed audit that an ADR cites by path stays where it is, because ADRs are append-only and a move would leave a dead link in their text. So does one cited by path from a published `CHANGELOG.md`, which is release-owned. In the 2026-06 series that holds `2026-06-handwritten-docs-accuracy-followups`, `2026-06-metadata-functional-completeness`, `2026-06-react-blocks-conformance`, `2026-06-react-tier-authoring-dogfood`, `2026-06-record-search-liveness` and `2026-06-security-identity-property-liveness` (ADR-cited), and `2026-06-appschema-property-liveness`, `2026-06-dead-surface-disposition-plan` and `2026-06-validationschema-property-liveness` (cited from `packages/spec/CHANGELOG.md`).
6+
57
A protocol-level audit of **every ObjectStack metadata type**: for each schema property, cross-reference its spec definition against its **actual consumers** (`file:line`) in the runtime and renderers, to answer two questions in order — **(1) does the property take effect?** and **(2) is it necessary / reasonable?**
68

79
Liveness is judged by **code consumption**, not browser observation (an unreactive UI can't distinguish "dead property" from "data didn't trigger it"). "DEAD" = parsed but read by no non-spec/non-test consumer → a **silent no-op** for authors.
810

911
## Per-type reports
1012
| Type | Doc | Health |
1113
|---|---|---|
12-
| field | `2026-06-fieldschema-property-liveness.md` | ~half dead |
13-
| object | `2026-06-objectschema-property-liveness.md` | ~half dead |
14-
| view | `2026-06-viewschema-property-liveness.md` | list-family healthy; chart/form-variants broken |
14+
| field | `archive/2026-06/2026-06-fieldschema-property-liveness.md` | ~half dead |
15+
| object | `archive/2026-06/2026-06-objectschema-property-liveness.md` | ~half dead |
16+
| view | `archive/2026-06/2026-06-viewschema-property-liveness.md` | list-family healthy; chart/form-variants broken |
1517
| app | `2026-06-appschema-property-liveness.md` | nav core healthy; aspirational tail |
1618
| page | `archive/2026-06/2026-06-pageschema-property-liveness.md` | drift breaks layouts |
17-
| dashboard | `2026-06-dashboardschema-property-liveness.md` | ADR-0021 half-done |
18-
| report | `2026-06-reportschema-property-liveness.md` | dataset live; chart dead |
19+
| dashboard | `archive/2026-06/2026-06-dashboardschema-property-liveness.md` | ADR-0021 half-done |
20+
| report | `archive/2026-06/2026-06-reportschema-property-liveness.md` | dataset live; chart dead |
1921
| dataset | `archive/2026-06/2026-06-datasetschema-property-liveness.md` | live; Studio under-covers |
20-
| action | `2026-06-actionschema-property-liveness.md` | disabled-CEL ignored; form/shortcut dead |
21-
| flow | `2026-06-flowschema-property-liveness.md` | enum out of sync; runAs unenforced |
22-
| agent | `2026-06-agentschema-property-liveness.md` | autonomy + access-control aspirational |
23-
| tool | `2026-06-toolschema-property-liveness.md` | **write-only metadata** |
24-
| skill | `2026-06-skillschema-property-liveness.md` | triggerPhrases display-only |
25-
| hook | `2026-06-hookschema-property-liveness.md` | **healthy** (near-total) |
22+
| action | `archive/2026-06/2026-06-actionschema-property-liveness.md` | disabled-CEL ignored; form/shortcut dead |
23+
| flow | `archive/2026-06/2026-06-flowschema-property-liveness.md` | enum out of sync; runAs unenforced |
24+
| agent | `archive/2026-06/2026-06-agentschema-property-liveness.md` | autonomy + access-control aspirational |
25+
| tool | `archive/2026-06/2026-06-toolschema-property-liveness.md` | **write-only metadata** |
26+
| skill | `archive/2026-06/2026-06-skillschema-property-liveness.md` | triggerPhrases display-only |
27+
| hook | `archive/2026-06/2026-06-hookschema-property-liveness.md` | **healthy** (near-total) |
2628
| validation | `2026-06-validationschema-property-liveness.md` | **healthy** (all 6 types enforced) |
2729
| security/identity (role, permission, policy, sharing) | `2026-06-security-identity-property-liveness.md` | **policy 100% dead** |
2830
| system/integration (email/i18n/theme/job/webhook/portal) | `archive/2026-06/2026-06-system-integration-property-liveness.md` | email + portal dead |
@@ -44,7 +46,7 @@ The most serious cluster — properties that imply a security boundary but enfor
4446
### 2. 🔴 ADR-0021 analytics migration debt
4547
Spec moved to `dataset`+`values`/`dimensions`, but: the **chart view variant** + **dashboard renderer + Studio WidgetConfigPanel** still read the *removed* legacy `object/valueField/categoryField/aggregate` shape. (Same debt that invalidated the showcase dashboard/report seeds.)
4648

47-
**✅ Report slice resolved (#3463 + 2026-07 close-out).** `report.chart` is **wired** (`DatasetReportRenderer` plots `chart.xAxis`/`yAxis` via `DatasetReportChart`, now dogfooded by the showcase `…_chart` report); `ReportColumn`/`ReportGrouping` (+ objectui `SpecReport*` re-exports) and the unread `chart.groupBy` + dead `aria`/`performance` are **removed**; the legacy `ReportViewer` chart fallback is **retired**. See [`2026-06-reportschema-property-liveness.md`](./2026-06-reportschema-property-liveness.md). The **chart-view / dashboard / WidgetConfigPanel** legacy-shape readers above remain open.
49+
**✅ Report slice resolved (#3463 + 2026-07 close-out).** `report.chart` is **wired** (`DatasetReportRenderer` plots `chart.xAxis`/`yAxis` via `DatasetReportChart`, now dogfooded by the showcase `…_chart` report); `ReportColumn`/`ReportGrouping` (+ objectui `SpecReport*` re-exports) and the unread `chart.groupBy` + dead `aria`/`performance` are **removed**; the legacy `ReportViewer` chart fallback is **retired**. See [`2026-06-reportschema-property-liveness.md`](./archive/2026-06/2026-06-reportschema-property-liveness.md). The **chart-view / dashboard / WidgetConfigPanel** legacy-shape readers above remain open.
4850

4951
### 3. 🟠 Naming drift → silent no-ops (spec key ≠ consumed key)
5052
field `maxLength`/`minLength`/`referenceFilters`/`maxRating`; page `type`→`pageType` & `label`→`title` & `visibility`; dashboard `title` vs `label`; app `accentColor`/`badgeVariant`/`separator` (renderer reads, **not in spec**); action `disabled`→`enabled`; flow `http` vs `http_request`; skill `requiredPermissions` vs `permissions`; agent `knowledge.{topics→sources}`; webhook `object`→`object_name`, `isActive`→`active`.

docs/audits/2026-06-actionschema-property-liveness.md renamed to docs/audits/archive/2026-06/2026-06-actionschema-property-liveness.md

File renamed without changes.

docs/audits/2026-06-agentschema-property-liveness.md renamed to docs/audits/archive/2026-06/2026-06-agentschema-property-liveness.md

File renamed without changes.

docs/audits/2026-06-dashboardschema-property-liveness.md renamed to docs/audits/archive/2026-06/2026-06-dashboardschema-property-liveness.md

File renamed without changes.

docs/audits/2026-06-fieldschema-property-liveness.md renamed to docs/audits/archive/2026-06/2026-06-fieldschema-property-liveness.md

File renamed without changes.

docs/audits/2026-06-flowschema-property-liveness.md renamed to docs/audits/archive/2026-06/2026-06-flowschema-property-liveness.md

File renamed without changes.

docs/audits/2026-06-hookschema-property-liveness.md renamed to docs/audits/archive/2026-06/2026-06-hookschema-property-liveness.md

File renamed without changes.

docs/audits/2026-06-objectschema-property-liveness.md renamed to docs/audits/archive/2026-06/2026-06-objectschema-property-liveness.md

File renamed without changes.

0 commit comments

Comments
 (0)