Skip to content

Skills optimization flight — skills/objectstack-i18n: DIET (≈ −1,685 tok, −27%) — "Core Concepts" restated in full four sections later, a per-namespace layout with zero real usages, os i18n check taught in six places, and the #1 real pattern (a package shipping its own generated bundle) dead-ends #14315

Description

@os-litant

Member card of the skills catalog optimization program #14292 (maintainer mandate 2026-09-02, verbatim: 「审核所有的 skills,进行全面的优化。」). Filed by the skills lane seat (session session_01LraLgQVGq8egUwfYZpbYt1). Read-only audit at objectstack origin/main a59f78d. Full findings table = audit record: the dev posts audit/objectstack-i18n/findings.md (seat scratchpad) verbatim as the first comment at claim time.

Audit summary

3 files, 7,296 tok shipped: SKILL.md 6,337 (headroom 1) · evals/README.md 410 (headroom 1) · generated 549. Real usage: 6 patterns — object/field labels + pluralLabel (3 apps, 40/37 sites), option label maps (23), _sections (10), _views + emptyState (12/2), apps/navigation/messages (6/3/5), stack registration (3) — and the biggest by far, a package shipping its own generated bundle (8 packages, 36 *.objects.generated.ts across 4 locales, 11 withSourceFallback sites, 5 kernel:ready loadTranslations sites), which is the package's main hole. Enumeration check: 12 of 14 presented-as-exhaustive enumerations complete; two stale (_tabs missing from the lint-surface list :300-302; --objects-only missing from the extract flag list :546-547). Retired-spelling residue: none. Verdict DIET (28.8%).

Top findings

id span proposal Δ
I18N-B-01 SKILL.md:44-66 DELETE "Core Concepts" — each item restated in full at :252-278, :151-248, :399-415, :308-354 −301
I18N-D-02 SKILL.md:99-148 REWRITE-AS-CONSTRUCT (3-row table) — per-namespace layout 0 real usages; localesDir 0 −280
I18N-H-01 evals/README.md:1-45 planned-eval stub, 6 named files that don't exist (DEFERRED, #14296 item 2) −267
I18N-B-02 SKILL.md:646-688 DELETE "Quick-Start Template" — strict subset of :157-245; its own preamble says so −245
I18N-B-04 SKILL.md:28-41 DELETE "When to Use" −243
I18N-F-03 SKILL.md:308-362 defineTranslation( has 0 usages outside the schema's own file → ONE schema-pointing row (live surface: never delete the last mention) −250
I18N-C-01 SKILL.md:506-530 DELETE hand-wired "Plugin Setup" — os serve auto-registers it (serve.ts:2850-2895), stated in objectstack-platform :442 −150
I18N-D-05 SKILL.md:569-585 REWRITE-AS-CONSTRUCT — "CRM Blueprint" restates :89-93, :234-244, :292 −150
I18N-D-07 SKILL.md:608-638 DELETE two pitfalls that restate :292 and :294-297 −151
I18N-D-01 SKILL.md:455-469 DELETE "AI-Powered Translation Suggestions" — the "no shipped adapter" fact appears 4× −147
I18N-A-01 SKILL.md:35-39 DELETE the locale-formatting trigger — body teaches zero formatting −103
I18N-B-03 SKILL.md:19-25 DELETE preamble −89
I18N-D-04 SKILL.md:356-362 MERGE-INTO :588-606 — the o.* retirement stated twice −87
I18N-D-06 SKILL.md:270-274 REWRITE — validationMessages removal narration → one redirect line −45

Hazards short of falsehood (fix in this flight)

  1. SKILL.md:513kernel.use(new I18nServicePlugin({…})) is not awaited; ObjectKernel.use is async (packages/core/src/kernel.ts:192); platform's own examples write await kernel.use(...).
  2. SKILL.md:535-560 — the extract → translate → check workflow cannot converge: extract defaults to --objects-only while os i18n check demands app/navigation/dashboard/… keys (packages/cli/src/utils/i18n-coverage.ts:190-220). One clause naming --objects-only makes it terminate.

Three funded additions

  1. Canonical "package ships its own generated bundle" block (+180, paid by I18N-D-01 + I18N-D-05) — the real shape: const enSource: TranslationData = { objects: enObjects }withSourceFallback({objects: zhCNObjects}, enSource, undefined, zhCNGeneratedSourceHashes) (public @objectstack/platform-objects/apps) → i18n.loadTranslations at kernel:ready; fold --source-hashes' purpose in (I18N-F-04).
  2. One clause naming --objects-only (+25, paid by I18N-B-03).
  3. translation metadata item in the frontmatter description (+12) and "tab, " in the lint-surface list (+3), paid by I18N-A-01.

Flight scope

IMPLEMENT (same-file, shrink-only): every row above and in the findings file at HIGH or MED except the deferred ones; the two stale enumerations; the two hazards; the three funded additions; the description edits (regenerate the README index only if the drift gate requires it — report which).

ANCHOR RULINGS: plugin wiring / os serve auto-registration → objectstack-platform (I18N-C-01: delete + pointer). Field/view labels stay here (data and ui point here for translation of what they declare).

DEFER: I18N-H-01 (eval stub, #14296 item 2); I18N-C-03 (generator-owned _index.md transitive pointers → out-of-scope card for the spec lane's build-skill-references.ts); I18N-A-03 (a routing bullet in skills/README.md → "follow-up for skills/README.md" in the PR body).

Flight constraints (binding)

  • ONE draft PR, first line Fixes #<this card>; governed ⇒ stays draft; review requests are the seat's step.
  • Token ratchet: SKILL.md may not grow; additions paid by deletions in the same file; ⛔ re-wrap is not payment; ⛔ no ceiling raise; ⛔ no new files; ⛔ do not touch the ratchet script.
  • ⛔ Never edit another package's files; follow-ups in the PR body. Generated files untouched.
  • Live surface with zero measured usage ⇒ one row pointing at its schema; retired/tombstoned ⇒ delete. A false claim matching a spec .describe() string ⇒ spec-side twin card.
  • Gates: node scripts/check-skills-token-ratchet.mjs, pnpm --filter @objectstack/spec check:skill-examples, pnpm check:skill-compatibility, pnpm check:skill-identifier-liveness, pnpm --filter @objectstack/spec check:skill-docs, plus node scripts/pm/dispatch-gates.mjs --commands <changed paths>; record the head sha.
  • PR body: per-item 落点 | before | after keyed by finding id; per-file token delta; needs:contract-review on both carriers (the generated-bundle block and the --objects-only semantics are contract claims).

Refs: #14292 · #14296 · #13658.

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions