Skip to content

skills: third-party developer review — fix fabricated/stale surface across all 9 skills#3374

Merged
os-zhuang merged 12 commits into
mainfrom
claude/third-party-skills-review-2r4sj1
Jul 21, 2026
Merged

skills: third-party developer review — fix fabricated/stale surface across all 9 skills#3374
os-zhuang merged 12 commits into
mainfrom
claude/third-party-skills-review-2r4sj1

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

概述

以第三方开发者的立场对发布的 skills bundle 做了一次完整审核与修复。模拟真实消费路径验证:npm create objectstack@16.0.0-rc.1npx skills add objectstack-ai/framework/skills --allnpm installnpm run validate 全链路跑通(发布的 @objectstack/spec 确实携带 216 个 src/**/*.zod.ts,skills 的 spec 指针在用户项目中可解析)。

随后对 9 个 skill 逐一对照 @objectstack/spec 16.0.0-rc.1 的 Zod 源码与运行时(engine / drivers / CLI / rest / core)核实每条载荷性论断,共确认并修复 40+ 个 P0 事实错误(按此生成的代码要么构建即抛错、要么静默产出死元数据)和大量 P1 第三方不可用问题。

系统性问题模式

  1. declared ≠ enforced(与 Prime Directive chore: version packages #10 同类):把 schema 里声明但运行时从未执行的能力当作可用功能来教 —— platform 的 data:* 内核钩子(注册后永不触发)、query 的 cursor/joins/窗口函数/HAVING/FILTER 聚合/$field(多数静默返回错误结果)、api 的幻造路由与配置形状、i18n 的 o.* 管线与不存在的 CLI 子命令、automation 的顶层 schedule:(被静默剥离,定时流永不运行)。
  2. pre-16 遗留表面referenceFiltersencryptionConfig/maskingRulesoftDelete/versioning、tenancy 三模式表、record_detail 等已删除/重命名的键与枚举。
  3. monorepo 内部假设泄漏../../docs/adr/*.mdpackages/*examples/*content/docs/* 相对链接在 .agents/skills/ 安装布局下全部失效;references/_index.md 列出了不随包发布的非 .zod.ts 文件。
  4. 凭空捏造的包名/API:六个 adapter 包、三个 driver 包、LiteKernel.create/api/seed/resetdefineObject/defineHookkernel.resolve()os studio 等。

主要修改

  • 每个 skill 一个原子 commit(见提交历史,逐条列出修复内容)
  • build-skill-references.ts:只输出符合发布 glob 的指针;补充缺失 schema(knowledge-source、time-relative-trigger、validation、dataset、date-macros);为 formula 补齐 references/_index.md
  • build-react-blocks-contract.ts:带 .default() 的 props 不再标记为 required;provenance 改为可解析的模块路径
  • skills/README.md:定位改为面向所有 ObjectStack 应用;写明 /skills 目录边界(fix(create-objectstack): scope skill installs to the curated skills/ catalog #3101)与真实 skill anatomy
  • 各 evals/README.md 从 data-skill 复制的占位内容改为各自领域的评测点

验证

  • check:skill-examples32 个 os:check 示例全部通过类型检查(修复前 21 个,新增 11 个带标记的可编译示例)
  • check:skill-refs / check:skill-docs / check:react-blocks:生成文件全部同步
  • pnpm --filter create-objectstack test:18/18 通过(skills 目录边界守护)
  • pnpm --filter @objectstack/formula test:242/242 通过(stdlib 漂移防护)
  • automation 的全部流程示例额外经 defineFlow()/FlowSchema.parse 运行时验证

关联

  • 同批次跨仓库修复:objectos 文档中 49 处 npx skills add objectstack-ai/framework(缺 /skills 子路径)及虚构的 @v5.0.0 固定版本语法 —— 见 objectstack-ai/objectos 的同名分支 PR。
  • 审核中发现但未在本 PR 处理(规模过大):query/ui 等 SKILL.md 与 rules/ 的内容重复(progressive disclosure 失效)、_index.md 一行摘要取自文件首个 JSDoc 导致的误导性描述。

🤖 Generated with Claude Code

https://claude.ai/code/session_012Kj2MJEPXoUXC4LiC3XYJc


Generated by Claude Code

claude added 11 commits July 20, 2026 18:12
…DME framing

Third-party review of the published skills bundle (installed via
`npx skills add objectstack-ai/framework/skills --all` into a scaffolded
app) found the references layer leaking monorepo-only surface:

- build-skill-references.ts listed transitively-imported src files that
  are NOT in the published package (only src/**/*.zod.ts ships) —
  lazy-schema.ts / visibility.ts / public-auth-features.ts pointers 404
  in a consumer's node_modules. The generator now traverses through
  non-shipping files but never lists them.
- Add missing load-bearing schemas to the map: ai/knowledge-source +
  knowledge-document (the real RAG primitives), automation/
  time-relative-trigger + data/validation (state-machine rules),
  ui/dataset, query date-macros.
- Give objectstack-formula a references/_index.md like its 8 siblings
  (it previously pointed at monorepo-relative packages/ paths instead).
- Mark the regen note maintainers-only and stop claiming the root barrel
  re-exports every symbol (it doesn't — e.g. DATE_MACRO_TOKENS lives on
  @objectstack/spec/data only).
- skills/README.md: reposition the bundle as serving any ObjectStack app
  (not 'the monorepo'), document the install commands and the /skills
  catalog boundary (#3101), and describe the real skill anatomy
  (rules/, contracts/, evals/).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Kj2MJEPXoUXC4LiC3XYJc
Third-party review found the skill teaching schemas that don't exist in
@objectstack/spec 16.x:

- The 'RAG Pipeline Configuration' section (sources[]/indexes[]/
  retrieval{topK,scoreThreshold,reranker}) matched no schema — the spec
  explicitly scopes chunking/retrieval/reranking out of the platform.
  Rewritten around KnowledgeSourceSchema (object/file/http sources,
  contentFields, where, adapter binding, refresh policy), with an
  os:check'd example, and honest registration guidance
  (IKnowledgeService.registerSource — no defineStack collection).
- Tool section now teaches first-class defineTool metadata (category
  enum, JSON-Schema parameters, required label) with the spec's own
  READ-ONLY-PROJECTION caveat (hand-authored tool metadata does not
  execute in the open edition), separated from the legacy inline
  agent tools[] shape.
- structuredOutput: retry:{maxAttempts} → maxRetries (real field);
  guardrails pitfall no longer cites nonexistent requireApprovalFor.
- Agent-level table no longer lists temperature/maxTokens (they live
  under model); adds surface/planning/memory/permissions.
- Coherence: description and blueprint now lead with skills + tools +
  knowledge sources; *.agent.ts flagged platform-internal (ADR-0063 §2)
  instead of being taught to third parties against a nonexistent
  src/{agents,skills,rag} reference layout.
- Auto-exposed actions + HITL sections labeled Cloud/EE runtime;
  actionSkipReason import caveated as cloud-only.
- evals/README.md: replace data-skill boilerplate with AI-domain evals.

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

Third-party review findings applied:

- P0: formula fields carry their CEL in `expression`, not `formula`
  (field.zod.ts; the engine reads def.expression) — the wrong key
  produced zod-stripped, never-evaluated formulas.
- Dialect set is cel/cron/template — the js dialect was retired (#3278);
  procedural JS is the L2 ScriptBody surface, not an expression dialect.
- daysFromNow/daysAgo are calendar-day functions (today() ± n at UTC
  midnight) — the time-of-day claim was inverted; today() documented as
  reference-timezone calendar day at UTC midnight (ADR-0053).
- Removed surface rows that match no schema: View.criteria,
  Workflow.Task.dueDate, Workflow.criteria, ai/orchestration,
  ai/devops-agent, ai/agent-action, ai/nlq, ai/mcp.systemPrompt.
- os.org context is { id, tier } — dropped os.org.slug/name examples;
  documented the current_user binding (ADR-0068).
- titleFormat marked deprecated (→ nameField, ADR-0079); model-registry
  template keys corrected to promptTemplate.system/user.
- Replaced monorepo-relative links (packages/, content/docs/) with
  node_modules paths that resolve in a consumer app; dropped
  ROADMAP/north-star pointers and the nonexistent build-twice CI claim.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Kj2MJEPXoUXC4LiC3XYJc
Third-party review found the skill's narrative built on the aspirational
o.* AppTranslationBundle pipeline while every shipped consumer (runtime
resolvers, defineStack translations, coverage CLI, os i18n extract,
example apps) runs on objects.* TranslationData:

- Primary authoring path is now TranslationData + defineTranslationBundle
  wired via defineStack({ translations }) with an os:check'd example;
  AppTranslationBundle demoted to a clearly-labeled Studio/workbench
  secondary format with a do-not-register warning.
- CLI truth: os i18n suggest / os i18n coverage don't exist — workflow
  now uses os i18n extract (--locales/--out/--fill, emits TS modules,
  not JSON) and os i18n check --locales / os lint --i18n-strict.
- Interpolation is {{var}} (both shipped adapters) — single-brace
  examples silently no-op'd; ICU section marked EXPERIMENTAL quoting the
  schema's own not-enforced annotation.
- getCoverage/suggestTranslations/getAppBundle/loadAppBundle flagged as
  optional contract methods with no shipped implementation.
- localesDir loads only flat {locale}.json; fileOrganization has no
  runtime consumer — layouts labeled authoring conventions.
- defaultLocale/supportedLocales marked required; cache/lazyLoad marked
  unenforced; _options keyed by field name; namespace prefixing claim
  dropped; unshipped contracts/i18n-service.ts pointer replaced with the
  subpath type import; evals README rewritten for i18n.

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

Third-party review found ~a third of the skill documenting QueryAST
surface the ObjectQL engine and drivers never execute, mostly failing
silently with wrong results. A consistent 'Schema-reserved — NOT
executed by the engine yet' caveat style now separates spec from
runtime:

- P0 cursor pagination: engine never reads cursor (silently returns
  page 1 forever) — replaced the recommendation with manual keyset
  pagination (where + orderBy + limit).
- joins, window functions (SQL builder even drops the field argument),
  HAVING, per-aggregation FILTER (won_deals silently equals
  total_deals), $field cross-field comparisons, most full-text options
  (only query+fields execute; terms AND-ed), top-level distinct — all
  caveated with working alternatives; KPI pattern rewritten as separate
  aggregate calls.
- Expand: select + filter only; per-parent limit/offset/orderBy are not
  applied — paginate the related object directly.
- SQL vs in-memory aggregation support matrix added (SQL throws on
  count_distinct/array_agg/string_agg); fabricated 'groupBy fields MUST
  appear in fields[]' rule deleted.
- Documented two features that DO work and were missing: structured
  groupBy date bucketing ({ field, dateGranularity, alias }) and
  date-macro tokens ({today}, {30_days_ago}) with their real
  client-side resolution scope.
- Description stops headlining joins/window functions; evals README
  rewritten for the query domain.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Kj2MJEPXoUXC4LiC3XYJc
Third-party review found the skill's core payload — the shapes a
developer would copy — substantially fabricated:

- P0: generated CRUD routes live under /api/v1/data/{object} (the /data
  prefix was missing everywhere); there is no /bulk and no GET
  /aggregate — batch is POST /data/{object}/batch (+ cross-object
  POST /api/v1/batch), aggregation goes through POST .../query.
- P0: the custom-endpoint example matched no schema — rewritten to
  RestApiEndpointSchema (method/path/handler/category/public/
  permissions/requestSchema string refs/handlerStatus) with
  ApiEndpointSchema as the declarative alternative.
- API-methods table: upsert/history/restore/purge are enum gates with
  no generated route; search is the global /api/v1/search.
- Service-info, health (/api/v1/health + /ready, envelope shape),
  auth config (public/permissions/authRequired + real
  RateLimitConfigSchema), datasource (defineDatasource, driver ids
  postgres/mysql/mongo/sqlite/memory), inter-service
  (kernel.getService<IDataEngine>), and error-envelope guidance all
  rewritten against the actual Zod sources; five examples now carry
  os:check markers and type-check.
- Added the missing realtime-subscription and auth-provider sections
  the description promised; documented environment-scoped route
  mounting; dropped unresolvable ADR/issue tokens and stale 9.x/4.0.1
  version framing; evals README rewritten for the API domain.

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

Third-party review found SKILL.md's security/advanced sections and
rules/field-types.md carrying a thick stratum of pre-16 material —
generated code would either throw at ObjectSchema.create() or ship
silently dead metadata:

- 49 field types (not 48); added the missing secret/user/composite/
  repeater/record types; password row corrected (generic path stores
  plaintext at rest — recommend type:'secret', ADR-0100).
- referenceFilters (removed #2377/ADR-0049) → structured lookupFilters
  across SKILL.md and all rules files.
- summary fields use summaryOperations {object, field, function};
  formula fields use expression + returnType (no 'currency') with
  record.-prefixed CEL; vector fields use flat dimensions.
- enable.feeds/activities default TRUE (opt-out, not opt-in).
- tenancy is strict { enabled, tenantField } — the shared/isolated/
  hybrid mode table was a retired key (#2763); dropped
  softDelete/versioning/partitioning/cdc checklist rows (retired keys
  that throw) and the pruned encryptionConfig/maskingRule sections in
  favor of type:'secret' + field requiredPermissions (ADR-0066 D3).
- Object-level permissions:{read:[roles]} shape doesn't exist —
  definePermissionSet boolean CRUD bits; RLS policies take singular
  operation + required object; current_user.roles →
  current_user.positions (ADR-0090 D3).
- defineObject/defineHook are not exported — ObjectSchema.create +
  Hook objects via defineStack({ hooks }); object extensions via
  defineObjectExtension registered in objectExtensions.
- rules/field-types.md Config columns purged of ~20 nonexistent knobs
  (silently-stripped dead metadata); hooks reference corrected
  (onError default abort, after-hooks in-transaction unless async,
  update(..., { multi: true }), CEL conditions, no aggregate in
  api.read); broken monorepo links replaced with plain text.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Kj2MJEPXoUXC4LiC3XYJc
Third-party review found the five load-bearing examples broken against
the schemas the skill itself cites:

- Cron cadence lives in the START NODE's config.schedule ({ type:
  'cron', expression } or bare string) — the top-level schedule: key is
  silently stripped and the flow never binds to the scheduler.
- update_record/get_record filters are ObjectQL where MAPS ($in/$lt),
  not {field,operator,value} triples (that's the UI view-filter
  dialect); date values use {TODAY() + N} template tokens — cel
  envelopes are not evaluated in CRUD filter values.
- Decision routing is edge-condition driven; unguarded out-edges all
  run in parallel — the old pattern executed both branches. Edges now
  carry mutually-exclusive cel conditions.
- FlowSchema requires label on every flow and node, and variables is an
  array of { name, type, isInput } — all examples now pass
  FlowSchema.parse (runtime-validated via defineFlow).
- http_request → http (retired alias), query_record → get_record
  (NO_EXECUTOR throw), object: → objectName:; node table regenerated
  from the 20-value FlowNodeAction enum (adds notify/map; script row =
  registered callables only, inline JS never executes).
- Approval behavior enum completed (quorum/per_group + minApprovals +
  per-approver group); waitEventConfig documented as canonical; unset
  http timeoutMs = no timeout at all; removed the false claim that bare
  field refs in start/edge conditions resolve to null; description
  stops advertising the retired workflow metadata type; evals fixed
  (expected output now passes its own criterion).

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

Third-party review found a dense cluster of P0 schema errors that made
generated UI metadata fail os validate or render unknown components:

- Page types are record|home|app|utility|list — record_detail/
  app_launcher/utility_bar don't exist; page examples fixed (type:
  'record', object: not objectName:) and all definePage/defineDataset
  examples now carry the required label.
- Interface-page rule updated to the revised ADR-0047 model: the page
  IS the view definition (page-owned columns/sort/filterBy);
  sourceView is a deprecated fallback.
- Report types = tabular|summary|matrix|joined (charts are the
  embedded chart: config); dashboard widget type is the 18-value
  ChartTypeSchema taxonomy; widget placement is optional layout (not
  required position).
- Action locations: global → global_nav (+record_related/
  record_section); nav divider → separator; requiresCapability →
  requiresService; component names record:related_list, line_items,
  object-metric/object-chart, <object-grid> — all verified against the
  objectui block registry.
- DATE_MACRO_TOKENS/isDateMacroToken import from @objectstack/spec/data
  (not root); monorepo-relative ADR/examples/content pointers replaced
  with plain text or shipped zod paths; stale dated objectui coverage
  scan removed.
- build-react-blocks-contract.ts no longer marks .default()-carrying
  props as required (Zod v4 output-io artifact); contract + reference
  regenerated; provenance now cites the @objectstack/spec/ui module
  instead of a non-shipping src path; evals cleaned of internal issue
  refs.

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

Third-party review found the skill's core plugin-development narrative
teaching a data:* kernel hook system that does not exist in the
codebase — ctx.hook() accepts any string, so handlers registered
against data:beforeInsert etc. silently never fire (the worst failure
mode). Also fabricated wholesale: six adapter packages, three driver
packages, three scaffold templates, and the Part-3 testing API.

- data:* excised from four files; replaced with the real kernel events
  (kernel:ready|bootstrapped|listening|shutdown, app:seeded,
  metadata:reloaded, external.schema.drift) with payloads read from the
  actual trigger sites, plus a prominent record-lifecycle-belongs-to-
  objectstack-data cross-reference. metadata:changed →
  metadata:reloaded.
- Adapters: only @objectstack/hono + @objectstack/plugin-hono-server
  exist. Drivers: driver-memory/driver-sql (SqlDriver via Knex)/
  driver-mongodb/driver-sqlite-wasm; driver-turso marked cloud/EE-only;
  driver-postgres/-sqlite/-d1 and SQLiteDriver/PostgreSQLDriver
  removed.
- Templates corrected to blank|todo|compliance|content|contracts|
  procurement; LiteKernel testing rewritten to the real surface
  (use/bootstrap/getService — no create/api/seed/reset).
- defineStack key list regenerated from ObjectStackDefinitionSchema
  (41 keys; workflows/approvals/ragPipelines/roles/policies/driver/
  logging are silently-stripped phantoms — ADR-0019/0020 noted);
  bootstrap-patterns.md rewritten around DriverPlugin + a valid
  manifest (id/version/type/name required).
- CLI truth: no os studio / os data seed / os meta apply; os diff/
  cloud/start/info descriptions corrected; /health + /ready; Console
  mounts at /_console/ (studio plugin intentionally not default-
  loaded); HonoServerPlugin registers before AuthPlugin; port 3000.
- Service registry: required key is data; REST plugin id
  com.objectstack.rest.api registers no service; registerService
  throws on duplicate; fallbacks are createMemory* factories;
  null-placeholder anti-pattern removed; deps at ^16.0.0-rc.1
  mirroring the blank template; evals README rewritten for platform.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Kj2MJEPXoUXC4LiC3XYJc
Descriptions changed in the review wave: query stops headlining
schema-reserved joins/window functions; ai leads with skills/tools/
knowledge sources; automation drops the retired workflow type;
platform drops the nonexistent data:* hooks.

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

vercel Bot commented Jul 20, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jul 20, 2026 6:40pm

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

104 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via packages/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via packages/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/cli.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via packages/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/runtime-capabilities.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@github-actions github-actions Bot added size/xl documentation Improvements or additions to documentation tooling labels Jul 20, 2026
Replace the two new 'role' usages introduced by the review wave
(junction-attribute example → position; phantom-key example → approvals:)
and ratchet the baseline down for the three files whose role-word count
improved.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Kj2MJEPXoUXC4LiC3XYJc
@os-zhuang
os-zhuang marked this pull request as ready for review July 21, 2026 00:56
@os-zhuang
os-zhuang merged commit 7d391e0 into main Jul 21, 2026
17 checks passed
@os-zhuang
os-zhuang deleted the claude/third-party-skills-review-2r4sj1 branch July 21, 2026 00:57
os-zhuang pushed a commit that referenced this pull request Jul 21, 2026
All ten patterns were dropped verbatim into a scaffolded 16.0.0-rc.1 app
and run through npm run validate — twice: as-published (passes, proving
the gate does NOT catch these) and as-fixed. The fixes target
runtime-fatal issues invisible to validate:

- Both flow patterns lacked the start-node trigger binding
  (config.objectName + triggerType: 'record-after-update' …) — they
  validated but never fired; approval-flow nodes (auto_approve /
  request_approval / update_record) had no config at all, making them
  no-ops. Bindings, node configs, status: 'active', and a CEL start
  condition added.
- reference: 'user' → 'sys_user' (no 'user' object exists; lookups
  silently never resolve).
- notify recipient '{record.assigned_to.email}' → '{record.assigned_to}'
  (recipients are user ids; path-walking a string yields empty
  recipients and a node error).
- Formula field: bare 'quantity * unit_price' →
  'record.quantity * record.unit_price' + returnType (bare identifiers
  resolve to null in the CEL scope).
- Cursor-pagination section replaced with keyset pagination (cursor is
  schema-reserved, zero engine/driver execution — same finding as
  PR #3374).
- Frontmatter description no longer promises realtime; import callout
  gains definePermissionSet.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Kj2MJEPXoUXC4LiC3XYJc
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/xl tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants