Skip to content

docs(skills): objectstack-platform factual sweep — 6 false behavioral claims corrected - #13760

Merged
os-zhuang merged 3 commits into
mainfrom
claude/issue-13747-skills-sweep-platform
Aug 31, 2026
Merged

docs(skills): objectstack-platform factual sweep — 6 false behavioral claims corrected#13760
os-zhuang merged 3 commits into
mainfrom
claude/issue-13747-skills-sweep-platform

Conversation

@huangyiirene

Copy link
Copy Markdown
Collaborator

Fixes #13747
Part of #13658

Flight ④ of the published-skills factual sweep: skills/objectstack-platform/**, 8 files / 2,633 lines, every behavioral claim verified against the implementing code — never against another document.

Landing sites — 6 distinct facts, 8 sites

# 落点 before after how it was settled
1 rules/service-registry.md core-fallback table, job row 'job' → core → auto-inject createMemoryJob() if missing 'job' → core → NO fallback — warns; getService throws if missing Executed: ObjectKernel bootstrapped with only a data provider, getService('job') threw [Kernel] Service 'job' not found while cache/metadata/queue/i18n all resolved in the same kernel. CORE_FALLBACK_FACTORIES printed from the built artifact as metadata,cache,queue,i18n. packages/core/src/fallbacks/index.ts states the omission is deliberate (maintainer ruling 2026-08-22): a fallback must not fake capability, and every consumer's documented no-job-service path has to stay reachable.
2 same file, auth row no fallback factory — degraded-capability warning if missing NO fallback — warns; getService throws if missing Same run: getService('auth') threw identically. The row was true but understated the consequence; job and auth now read alike because they behave alike.
3 same file, section headline + criticality table "auto-injects in-memory fallbacks for core-criticality services" / "Auto-injected in-memory fallback if no plugin provides it" qualified with "that has one" / "where one exists, else warn" The same falsehood had three landing sites in one file; ObjectKernel.preInjectCoreFallbacks() and validateSystemRequirements() both branch on CORE_FALLBACK_FACTORIES[name] being present.
4 same file, factory list lists createMemoryJob among "the fallbacks" dropped from the list; "job/auth have none" createMemoryJob is still exported (for embedders who want a manual-trigger registry) but is not a fallback. Export presence confirmed by import in the same probe.
5 SKILL.md defineStack() top-level key enumeration 39 keys, no server 40 keys, server added Parsed ObjectStackDefinitionSchema's real shape: 43 keys. All 39 documented keys are real (zero phantoms). defineStack({ server: { trustProxy: true } }) parses green, while the paragraph directly below tells the reader an undeclared top-level key makes the stack fail to load — so the omission actively taught that a live v17 key is refused.
6 SKILL.md object naming object-level namespace field "is deprecated and ignored by the runtime" "is retired (ADR-0129 D3) and refused at load" Executed: defineStack with objects: [{ name, label, namespace: 'crm', fields }] throwsUnrecognized key(s) on this object: 'namespace' with the ADR-0129 D3 prescription. "Ignored" says the stack loads; it does not. This also contradicted SKILL.md's own "Refused — … each objects[] entry (ObjectSchema) … The parse throws" thirty lines earlier.
7 SKILL.md ObjectKernel logger config // 'debug' | 'info' | 'warn' | 'error' | 'fatal' // debug|info|warn|error|fatal|silent LogLevel in packages/spec/src/system/logging.zod.ts is a 6-member enum; LEVEL_ORDER in packages/core/src/logger.ts carries silent: 5. The skill's own examples use level: 'silent' eight times — it was contradicting itself.
8 SKILL.md + rules/plugin-lifecycle.md Plugin.type comment SKILL.md listed 5 of 8 values; the rules file listed 7 of 8 both now standard|ui|driver|server|app|theme|agent|objectql 'standard' + CORE_PLUGIN_TYPES (packages/spec/src/kernel/plugin.zod.ts) = 8. objectql is not decorative — ObjectQLPlugin declares type = 'objectql'. A cross-file contradiction inside the package, settled against the schema rather than against either document.

Also corrected in the same stroke, same class: the "Complete Working Example" package.json pinned ^16.0.0-rc.1 on six deps and claimed to mirror the blank template. The real template (packages/create-objectstack/src/templates/blank/package.json) pins ^17.0.0 and ships a different dependency set (three connector packages, no driver-memory) — and the skill's own frontmatter already declares 17.x. Versions corrected; the false "mirrors" claim removed rather than papered over.

Budget

Net line delta across the package: 0 (2,633 → 2,633). Net tokens: −24, from the ratchet's own verdict lines — SKILL.md −18, rules/plugin-lifecycle.md −4, rules/service-registry.md −2. No ceiling raised. Every remaining file was already sitting at zero headroom, so every edit was made byte-shrinking in place.

Verification

Gate families derived from the real diff, not recalled — node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands on the merged tree (13 families). Union re-run at the final commit f6c81ba5:

EXIT=0  node scripts/check-ci-filter-parity.mjs
EXIT=0  node scripts/check-cross-package-test-inputs.mjs
EXIT=0  node scripts/check-shard-attestation.mjs
EXIT=0  node scripts/check-skills-token-ratchet.mjs
EXIT=3  node scripts/check-test-completeness.mjs      <- PREREQUISITE NOT MET, NOT MEASURED
EXIT=0  pnpm --filter @objectstack/lint run check:doc-formula-expressions
EXIT=0  pnpm check:agent-test-spelling
EXIT=0  pnpm check:cross-package-test-inputs
EXIT=0  pnpm check:doc-authoring
EXIT=0  pnpm check:pm-governed-merges
EXIT=0  pnpm check:role-word
EXIT=0  pnpm check:skill-compatibility
EXIT=0  pnpm check:skill-frame-sync

check-test-completeness grades a saved turbo run test log and was handed none; it prints PREREQUISITE NOT MET and exits 3 before parsing a line. Recorded as NOT MEASURED, per its own instruction — not a red.

Two more run because the diff visibly implicates them even though the path derivation does not name them:

EXIT=0  pnpm --filter @objectstack/spec run check:skill-examples   (260 marked examples, 3 surfaces)
EXIT=0  pnpm --filter @objectstack/spec run check:skill-refs       (9 generated files in sync)

check:skill-examples population for this package is NOT emptySKILL.md carries two os:check fences (the defineStack minimal example and task.object.ts). Both type-check.

check:doc-authoring caught a defect I introduced: the first draft of the job row cited an internal issue id, which skills/** forbids because the catalog ships into customer context windows where a tracker id resolves to nothing. Fixed in f6c81ba5 — the teaching kept, the citation dropped.

No changeset: the diff publishes nothing from any package. skip-changeset applied, matching the precedent this branch merged up to — flight ③'s PR #13740 landed five skills/objectstack-query/** files with no changeset.

needs:contract-review attached at creation: these corrections make falsifiable operator/contract semantic claims, the CONTENT limb of clause ②. Not self-cleared.

Governed posture

Published skills/** — this PR stays draft for human merge. .md content goes to maintainer review.


Generated by Claude Code

claude added 3 commits August 31, 2026 09:48
Published-skills factual sweep, flight 4 of program #13658. Every
correction is settled against the implementing code, not against another
document, and each is byte-neutral-or-shrinking under the token ratchet.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EnE7G31tqbxN1rqpQmzurT
check:doc-authoring red: skills/** ships to customer projects, where an
internal tracker id resolves to nothing. Keep the teaching, drop the
citation — the row now reads exactly like its 'auth' sibling.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EnE7G31tqbxN1rqpQmzurT

Copy link
Copy Markdown
Collaborator Author

Contract review — PASS at head f6c81ba5

Applicability: clause-② CONTENT limb (批 #12 on #13588) — falsifiable operator/contract semantic claims in published skills/**. The carrier was attached by the PR creator in the same stroke the PR existed, as ruled — the discipline's first clean same-stroke attach in this lane, noted.

Reviewer qualification, machine-read this sitting: get_sessionexternal_metadata.last_served_model = claude-fable-5 = CONTRACT_REVIEW_TIER. Reviewing seat is the dispatching seat, permitted per the 2026-08-21 relaxation; the object under review is the opus implementer's contract increment.

Review: full report + diff summary read; five anchors independently re-measured on origin/main this hour, all corroborating —

  • packages/core/src/fallbacks/fallbacks.test.ts:16 pins CORE_FALLBACK_FACTORIES to exactly ['metadata','cache','queue','i18n'] with "job deliberately absent (plugin-reports: the documented setInterval dispatcher fallback is unreachable on ObjectKernel, and the job fallback it takes instead never fires #10746)" and the 2026-08-22 maintainer ruling quoted — the four-site "job auto-filled" claim was false, correction right;
  • packages/spec/src/data/object.zod.ts:1482: "namespace was retired (ADR-0129 D3)" with the REJECTS test at object.test.ts:1575 — refused at parse, not "deprecated and ignored";
  • packages/spec/src/stack.zod.ts:474: server: StackServerConfigSchema.optional() — the live v17 key the enumeration omitted;
  • CORE_PLUGIN_TYPES single-sourced at packages/spec/src/kernel/plugin.zod.ts:89 — the right settle target for the 5-vs-7 cross-file contradiction;
  • packages/spec/src/system/logging.zod.ts:32: 'silent' is a LogLevel member (and core's own tests use it).

Direction: five of six corrections un-hide shipped capability or surface a hard failure (deader-than-real); the sixth pins the example to the real template. Budget: net lines 0, net tokens −24, zero ceilings raised, every file under ceiling by the ratchet's own verdict lines. The check:doc-authoring catch-and-fix (an internal issue-id briefly introduced into published text, caught by the gate, removed) is the gate farm working — no residue at final head.

needs:contract-review cleared on this PR in this stroke (card #13747 never carried the second copy — a dev-side carrier deviation recorded on the ACCEPT, moot at clear time). Governed .md content: this PR remains DRAFT for the maintainer's merge (os-zhuang / hotlong requested); the review chain never enqueues a governed surface.


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review August 31, 2026 10:12
@os-zhuang
os-zhuang enabled auto-merge August 31, 2026 10:13
@os-zhuang
os-zhuang disabled auto-merge August 31, 2026 10:14
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 31, 2026
Merged via the queue into main with commit c42bc8e Aug 31, 2026
40 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-13747-skills-sweep-platform branch August 31, 2026 10:43
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 skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

skills-sweep ④: objectstack-platform (2,633 lines, 8 files) — behavioral-claim verification, content-class execution-first

3 participants