@ngockhoale/ukit 2.6.6 → 2.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,43 @@
2
2
 
3
3
  All notable changes to UKit are documented here.
4
4
 
5
+ ## 2.6.7 - 2026-09-19
6
+
7
+ Canonical-instructions release — second roadmap slice (cycle C25,
8
+ DOC-101..107). Root instruction files are now generated from a single
9
+ canonical source; shipped contracts shrink ~25%; no runtime behavior
10
+ changes to install/update/uninstall flows.
11
+
12
+ - **DOC-102 — deterministic core/overlay renderer**: new
13
+ `templates/instructions/` sources (`core.md` + host overlays +
14
+ `layout.yaml`) rendered by `src/render/instructionRenderer.js` into
15
+ `templates/CLAUDE.md`, `templates/AGENTS.md`, `templates/.omp/RULES.md`
16
+ (plus repo roots). `yarn docs:render` regenerates; `yarn docs:render:check`
17
+ fails CI on drift. Byte-stable, duplicate-heading and unreferenced-section
18
+ errors enforced.
19
+ - **DOC-101 — rule IDs + markers**: `manifests/instructionRules.yaml`
20
+ declares 48 rule IDs (kind/anchor/marker_in); `<!-- RULE: ID -->` markers
21
+ embedded in the 4 marker-bearing artifacts; `instructionRules.test.js`
22
+ validates schema, marker coverage, and anchor presence.
23
+ - **DOC-103 — parity → semantic tests**: `contextDocsParity.test.js`
24
+ rewritten to generated-artifact checks (drift, rule coverage, overlay
25
+ heading allowlists, Release Policy boundary) + mutation tests that fail
26
+ on dropped/duplicate critical rules; shared helpers in
27
+ `tests/consistency/helpers/semanticParity.js`.
28
+ - **DOC-104 — root contract shrink ≥25%**: `templates/CLAUDE.md` 288→214
29
+ lines, `templates/AGENTS.md` 305→229 (all critical rule markers + anchors
30
+ preserved). Internal-orchestration detail moved to new shipped doc
31
+ `templates/docs/UKIT_INTERNALS.md` (manifest item `docs-ukit-internals`);
32
+ baselines recorded in `docs/_baseline/root-instruction-lines.txt`.
33
+ - **DOC-105 — WORKLOG rotation + MEMORY cleanup**: live worklog ≤500 lines,
34
+ rotated entries preserved in `docs/WORKLOG_ARCHIVE.md` (regression-tested);
35
+ MEMORY.md trimmed to durable protocol/decisions/constraints (≤200).
36
+ - **DOC-106 — PROJECT_IMPORTANT_SPEC archived**: shrunk to a decision
37
+ record; full body at `docs/archive/specs/PROJECT_IMPORTANT_SPEC.md`;
38
+ `docArchiveLinks.test.js` guards link integrity.
39
+ - **DOC-107 — user-first README**: rewritten around `ukit install` +
40
+ natural-language flow (115 lines); maintainer detail moved to linked docs.
41
+
5
42
  ## 2.6.6 - 2026-09-19
6
43
 
7
44
  Documentation-hardening release — first slice of the
package/README.md CHANGED
@@ -2,52 +2,33 @@
2
2
 
3
3
  UKit installs a project-local AI workspace (`.claude/`, adapters, docs, and index helpers) so your team can work with Claude Code, OpenAI Codex, OpenCode, and omp (Oh My Pi) from the same repo setup.
4
4
 
5
- ## Highest-Priority Team Rule
5
+ ## Install
6
6
 
7
- **For normal team usage, the only UKit command anyone should need to remember is `ukit install`.**
7
+ 1. Install the UKit CLI globally:
8
8
 
9
- After `ukit install` finishes:
10
- - open your AI tool
11
- - describe the task in natural language
12
- - let the workspace instructions route the flow
13
-
14
- How the CLI binary itself gets installed or refreshed is a maintainer/platform concern.
15
- Inside projects, the command teammates should remember remains **`ukit install`**.
16
-
17
- Do **not** onboard the whole team around `ukit doctor`, `ukit diff`, `ukit uninstall`, or `ukit index ...`. Those commands can still exist for maintainers/debugging, but they are intentionally **not** the default human workflow.
18
-
19
- ## Team Workflow
20
-
21
- 1. Install the UKit CLI globally.
22
9
  ```bash
23
10
  npm install -g @ngockhoale/ukit
24
11
  ```
25
- 2. Open any project root in the terminal.
26
- 3. Run:
27
12
 
28
- ```bash
29
- ukit install
30
- ```
13
+ 2. Open any project root in the terminal and run:
31
14
 
32
- 4. Fill in the generated docs baseline:
33
- - `docs/PROJECT.md`
34
- - `docs/MEMORY.md`
35
- - `docs/AI_HANDOFF/`
36
- - `docs/WORKLOG.md`
37
- 5. Open your AI tool and work in natural language.
15
+ ```bash
16
+ ukit install
17
+ ```
38
18
 
39
- ## Update Policy
19
+ The same `ukit install` command handles both first-time setup and refreshes. If UKit changes, your templates change, or a teammate needs to re-apply the workspace, rerun `ukit install`.
40
20
 
41
- The same command handles both first-time setup and refreshes:
21
+ ## After install
42
22
 
43
- ```bash
44
- ukit install
45
- ```
23
+ For normal team usage, `ukit install` is the only UKit command anyone should need to remember:
46
24
 
47
- If UKit changes, your templates change, or a teammate needs to re-apply the workspace, rerun `ukit install`.
48
- If maintainers roll out a newer CLI build, the in-project workflow still stays the same: rerun `ukit install`.
25
+ - open your AI tool
26
+ - describe the task in natural language
27
+ - let the workspace instructions route the flow
49
28
 
50
- ## What `ukit install` Creates
29
+ Fill in the generated docs baseline (`docs/PROJECT.md`, `docs/MEMORY.md`, `docs/AI_HANDOFF/`, `docs/WORKLOG.md`), then work in natural language. Do **not** onboard the team around `ukit doctor`, `ukit diff`, `ukit uninstall`, or `ukit index ...` — those remain maintainer/debug workflows, not the default human path.
30
+
31
+ ## What `ukit install` creates
51
32
 
52
33
  **Core workspace**
53
34
  - `.claude/skills/` — canonical skills
@@ -73,180 +54,62 @@ If maintainers roll out a newer CLI build, the in-project workflow still stays t
73
54
 
74
55
  ## `PROJECT_IMPORTANT.md` — project-owner instructions
75
56
 
76
- `ukit install` seeds a root `PROJECT_IMPORTANT.md` **once**. After that the file is
77
- yours: UKit never rewrites, merges, formats, chmods, tracks, or deletes it — edits
78
- survive every `ukit install` rerun byte-for-byte, and deleting it + reinstalling
79
- seeds a fresh copy. It is also excluded from `ukit uninstall` deletion; uninstall
80
- backs it up to a sibling `PROJECT_IMPORTANT.md.ukit-backup[.n]` file at project
81
- root (never overwritten — a new suffix is chosen, and dry-run creates nothing).
57
+ `ukit install` seeds a root `PROJECT_IMPORTANT.md` **once**. After that the file is yours: UKit never rewrites, merges, formats, or deletes it — edits survive every `ukit install` rerun byte-for-byte, and uninstall backs it up to a sibling `PROJECT_IMPORTANT.md.ukit-backup[.n]` file instead of deleting it.
82
58
 
83
- Put your non-negotiable project rules there. On each session start your AI tool
84
- receives its contents as advisory project-owner context — Claude Code and omp via
85
- their session hooks (and once more after a compaction, which starts a new context
86
- epoch), Codex and OpenCode via a static pointer in `AGENTS.md` (read-the-file
87
- instructions, not a runtime hook). Keep the file at or below **6,000 Unicode code
88
- points** — anything past that is truncated with an explicit warning, and the fix is
89
- to shorten the file, not rerun `ukit install`. Do not put credentials or secrets in
90
- it: a fail-closed sensitive-value scan runs on the exact body before injection and
91
- blocks anything that looks like a key or token.
59
+ Put your non-negotiable project rules there. On each session start your AI tool receives its contents as advisory project-owner context. Keep the file at or below **6,000 Unicode code points** — anything past that is truncated with an explicit warning. Do not put credentials or secrets in it: a fail-closed sensitive-value scan runs before injection and blocks anything that looks like a key or token.
92
60
 
93
- ## UKit v1.3.1 Runtime
61
+ ## Shared runtime
94
62
 
95
- UKit now installs a hidden shared local runtime at `.ukit/` for production-oriented state that should survive across agent sessions:
63
+ UKit installs a hidden shared local runtime at `.ukit/` for production-oriented state that survives across agent sessions:
96
64
 
97
65
  - `.ukit/storage/config.json` — runtime defaults for compact/router/memory/validation/subagent hints
98
- - `.ukit/storage/cache/` — reusable prompt-cache, compact history, compact-pressure state, and output summaries
66
+ - `.ukit/storage/cache/` — reusable prompt-cache, compact history, and output summaries
99
67
  - `.ukit/storage/memory/` — cross-agent local memory
100
68
  - `.ukit/storage/backups/` — rollback bytes for risky Safe Patch Protocol edits
101
69
 
102
- If an older repo still has a visible legacy `ukit/` runtime folder, rerunning `ukit install` now migrates the shared runtime into hidden `.ukit/` when the target paths are free.
103
-
104
- When long sessions approach the compact threshold, UKit now uses a conservative pressure lane:
105
-
106
- - soft threshold = configured compact token threshold
107
- - hard threshold = roughly 20% above soft
108
- - compact only safe-zone history/noise
109
- - preserve active task, rules, decisions, and current code focus
110
-
111
- UKit v1.3.1 keeps the same shared runtime contract while adding Safe Patch Protocol guardrails and the local AI task queue alongside living project status routing:
112
-
113
- - install globally with `npm install -g @ngockhoale/ukit`
114
- - keep using the exact same human workflow inside projects: `ukit install`
115
- - preserve the same `ukit` binary, hooks, and install-first orchestration while standardizing the runtime root as hidden `.ukit/`
116
- - install `docs/AI_HANDOFF/` as the cross-AI handoff folder with per-task isolation: ACTIVE.md (snapshot), INDEX.md (task index), tasks/ (one file per task) so each AI reads only the task it needs, with token budget rules in RULES.md
117
- - auto-route open-ended “what next?” / “continue” prompts to the `next-step` skill with a visible freshness cue when status may be stale
118
- - auto-route explicit handoff/wrap-up requests to the `update-status` skill while skipping trivial/no-state-change tasks
119
- - keep concrete debug/implementation/review prompts primary, so project status never replaces source/index-first task work
120
- - quietly guard risky AI edits with Safe Patch Protocol: stale/ambiguous specs are blocked, shared-risk whole-file writes are discouraged, and internal helpers preserve UTF-8 BOM/no-BOM plus LF/CRLF for multilingual text
121
-
122
- UKit v1.3.1 also keeps the fast path improvements from the recent runtime releases:
123
-
124
- - Vietnamese prompts now normalize more effectively for English-heavy code symbols and paths
125
- - localized simple direct-target lanes skip extra previous-context / recent-output work when it would not change the next action
126
- - routed verification lanes reuse declared `packageManager` metadata so helpers/hooks stop probing every lockfile candidate unnecessarily
127
-
128
- For maintainers, the runtime is inspectable with:
129
-
130
- - `ukit status`
131
- - `ukit memory list`
132
- - `ukit memory recall "<current task>"`
133
- - `ukit memory export`
134
-
135
- Normal teammates should still only need **`ukit install`**.
136
-
137
- ## Retuning The Context Budget (maintainers)
138
-
139
- Switching to a model with a different context window is a **three-number edit in one file**:
140
- `templates/ukit/storage/config.json` → `compact`.
141
-
142
- | Key | Default | What it means |
143
- | --- | --- | --- |
144
- | `tokenThreshold` | `150000` | Soft advisory. Past this UKit starts recommending compaction. |
145
- | `hardCapTokens` | `500000` | Absolute ceiling — 50% of a 1M window. `context-hardcap-gate` blocks Edit/Write/Bash here. |
146
- | `autoCompactWindowRatio` | `0.7` | Auto-compact fires at this fraction of the cap (→ `350000`). Must be `< 1`. |
147
-
148
- Everything else is derived — do **not** hand-edit these:
149
-
150
- - `.claude/settings.json` → `env.CLAUDE_CODE_AUTO_COMPACT_WINDOW`
151
- - `.omp/config.yml` → `compaction.thresholdTokens`
152
- - the code-side defaults in `src/core/runtimeConfig.js` and `src/core/compact/threshold.js`
70
+ When long sessions approach the compact threshold, UKit compacts only safe-zone history/noise while preserving the active task, rules, decisions, and current code focus. If an older repo still has a visible legacy `ukit/` runtime folder, rerunning `ukit install` migrates the shared runtime into hidden `.ukit/` when the target paths are free.
153
71
 
154
- They are all rendered/read from the three keys above via `src/core/compact/contextBudget.js`.
155
- Edit the three numbers, rerun **`ukit install`**, and Claude Code and omp both follow.
72
+ ## Supported tools
156
73
 
157
- `hardCapTokens` must stay **below the model's real context window**, otherwise the API rejects
158
- the request before the gate can ever fire. Sizing at 50% of the window keeps room for the
159
- response plus the estimator's own undercount:
160
-
161
- | Model window | `hardCapTokens` | derived auto-compact |
162
- | --- | --- | --- |
163
- | 1M | `500000` | `350000` |
164
- | 256k | `128000` | `89600` |
165
- | 200k | `100000` | `70000` |
166
-
167
- ## Installer Behavior
168
-
169
- - idempotent install (safe to rerun)
170
- - timestamped backups before overwrite
171
- - template rendering with project-aware variables
172
- - dependency-ordered manifest execution
173
- - path safety checks for template and target traversal
174
- - shared-skill adapter linking across supported tools
175
- - post-install docs baseline reminders
176
- - automatic code-index build + refresh hook install
177
-
178
- ## Working Style After Install
179
-
180
- UKit is built so the team can stop memorizing UKit subcommands and focus on product work:
181
- - ask for fixes, reviews, implementations, tests, or docs in natural language
182
- - let the installed instructions choose the right workflow
183
- - let the AI use the indexed source code first so it can find the right files/tests fast
184
- - let Claude Code / Codex / OpenCode auto-detect and use the right project-local skill from the prompt and the files/tools involved
185
- - let the AI prefer targeted verification first, then widen only when shared/risky scope justifies it
186
- - let the AI selectively auto-delegate internal subagents only when that actually reduces context/noise or unlocks parallel progress; small localized work should stay direct
187
- - keep long sessions compact across agents: Claude keeps PreCompact/reinject, OpenCode keeps native auto/prune compaction, and Codex Desktop uses internal `compact.codexContext.compactTarget` soft handoffs (default 150 lines; 120-150 preferred, hard max 170), without asking end users to manage context manually
188
- - let UKit internally use the `ukit-small-task-maintainer` subagent with `subagents.smallTaskModel=unic-lite` for safe task cleanup, fast-vs-slow/safe-vs-risky lane hints, skill-routing/step-budget hints, agent context-budget decisions, compact decisions, doc summarization, classification, and queue maintenance while risky/security/release/quality-risk work stays on the main model
189
- - rerun `ukit install` when you need to refresh the workspace
190
-
191
- End users should **not** need to know or memorize skill names.
192
-
193
- ## Upstream Skill Alignment
194
-
195
- To keep UKit strong over time, maintainer work should track the current upstream skill ecosystem:
196
- - official Anthropic skills: [anthropics/skills](https://github.com/anthropics/skills)
197
- - official OpenAI skills: [openai/skills](https://github.com/openai/skills)
198
- - Agent Skills open standard: [agentskills.io](https://agentskills.io/)
199
- - curated discovery lists such as [awesome-claude-code](https://github.com/hesreallyhim/awesome-claude-code) and [awesome-agent-skills](https://github.com/VoltAgent/awesome-agent-skills)
200
-
201
- But this is a **maintainer concern**, not a team-onboarding burden.
74
+ | Tool | Instructions | Skills | Config |
75
+ |------|-------------|--------|--------|
76
+ | Claude Code | `CLAUDE.md` | `.claude/skills/` (canonical) | `.claude/settings.json` |
77
+ | OpenAI Codex | `AGENTS.md` | `.claude/skills/` (referenced) | `.codex/settings.json`, `.codex/settings.local.json`, `.codex/README.md` |
78
+ | OpenCode | `AGENTS.md` | `.claude/skills/` (native Claude-compatible support) | `opencode.json` |
79
+ | omp (Oh My Pi) | `.omp/AGENTS.md` (imports `AGENTS.md`) | `.claude/skills/` (read via omp's claude provider — no symlink) | `.omp/config.yml`, `.omp/RULES.md`, `.omp/README.md` |
202
80
 
203
- The rule remains:
81
+ All supported tools share the same SKILL.md ecosystem so the workspace is authored once and reused everywhere.
204
82
 
205
- > ship curated improvements through UKit, then ask teammates to rerun **`ukit install`**
83
+ ## Maintainer docs
206
84
 
207
- Do **not** require normal contributors to learn marketplace/plugin commands just to use the workspace.
85
+ Maintainer internals live in dedicated docs — linked here, not duplicated:
208
86
 
209
- ## Maintainer / Debug Commands
87
+ - [`docs/CONTEXT_BUDGET.md`](docs/CONTEXT_BUDGET.md) — retuning the context budget (three-number edit)
88
+ - [`docs/UKIT_CODEV_PRINCIPLES.md`](docs/UKIT_CODEV_PRINCIPLES.md) — CoDev working principles
89
+ - [`docs/RELEASE_CHECKLIST.md`](docs/RELEASE_CHECKLIST.md) — release steps
210
90
 
211
- These commands are still available, but they are **advanced workflows**, not default team onboarding:
91
+ Maintainer/debug commands (advanced workflows, not team onboarding):
212
92
 
213
93
  - `ukit diff` — preview file changes before install
214
94
  - `ukit doctor` — validate UKit state and docs baseline
215
95
  - `ukit uninstall` — remove UKit-managed assets
216
96
  - `ukit status` — inspect shared UKit runtime state
217
97
  - `ukit memory ...` — inspect/export/forget shared memory items
218
- - `ukit update` — upgrade the global UKit CLI to the latest published version (same as `npm install -g @ngockhoale/ukit`)
98
+ - `ukit update` — upgrade the global UKit CLI to the latest published version
219
99
  - `ukit index ...` — run repo indexing/query/triage tools directly
220
100
  - `ukit build index` — alias for `ukit index build`
221
101
 
222
- Use them when maintaining UKit, debugging workspace setup, or developing the CLI itself — not as the day-to-day path every teammate must learn.
223
-
224
- ## Repo Development
225
-
226
- For maintainers evolving **UKit itself**, the key repo references live in:
227
-
228
- - `docs/UKIT_CODEV_PRINCIPLES.md`
229
- - `docs/RELEASE_1_1_3_SIGNOFF.md`
102
+ ## Development
230
103
 
231
- Run the test suite from the UKit repo root:
104
+ For maintainers evolving **UKit itself**, run the test suite from the repo root:
232
105
 
233
106
  ```bash
234
107
  yarn test
235
108
  ```
236
109
 
237
- For deeper index development, repo-level scripts are available:
110
+ Repo-level index scripts:
111
+
238
112
  - `yarn index:build`
239
113
  - `yarn index:refresh`
240
114
  - `yarn index:query -- "<error|symbol|path>"`
241
115
  - `yarn bug:triage -- "<error signature>"`
242
-
243
- ## Tool Support
244
-
245
- | Tool | Instructions | Skills | Config |
246
- |------|-------------|--------|--------|
247
- | Claude Code | `CLAUDE.md` | `.claude/skills/` (canonical) | `.claude/settings.json` |
248
- | OpenAI Codex | `AGENTS.md` | `.claude/skills/` (referenced) | `.codex/settings.json`, `.codex/settings.local.json`, `.codex/README.md` |
249
- | OpenCode | `AGENTS.md` | `.claude/skills/` (native Claude-compatible support) | `opencode.json` |
250
- | omp (Oh My Pi) | `.omp/AGENTS.md` (imports `AGENTS.md`) | `.claude/skills/` (read via omp's claude provider — no symlink) | `.omp/config.yml`, `.omp/RULES.md`, `.omp/README.md` |
251
-
252
- All supported tools share the same SKILL.md ecosystem so the workspace is authored once and reused everywhere.
@@ -15,7 +15,7 @@ entries:
15
15
  load_policy: always
16
16
  validation: [manual]
17
17
  archive_policy: never
18
- notes: repo-owned copy; never overwritten by ukit install/update
18
+ notes: generated by yarn docs:render from templates/instructions/ + repo overlay
19
19
  - id: root-agents-md
20
20
  path: AGENTS.md
21
21
  class: canonical
@@ -26,7 +26,7 @@ entries:
26
26
  load_policy: always
27
27
  validation: [manual]
28
28
  archive_policy: never
29
- notes: repo-owned copy; never overwritten by ukit install/update
29
+ notes: generated by yarn docs:render from templates/instructions/ + repo overlay
30
30
  - id: root-readme
31
31
  path: README.md
32
32
  class: canonical
@@ -35,9 +35,9 @@ entries:
35
35
  source_of_truth: README.md
36
36
  merge_strategy: none
37
37
  load_policy: on-demand
38
- validation: [manual]
38
+ validation: [manual, test:tests/consistency/rootReadme.test.js]
39
39
  archive_policy: never
40
- notes: v1.3.1 prose — DOC-107 queued
40
+ notes: user-first refactor shipped DOC-107 (2026-09-19)
41
41
  - id: root-quick-start
42
42
  path: QUICK_START.md
43
43
  class: canonical
@@ -195,7 +195,19 @@ entries:
195
195
  merge_strategy: none
196
196
  load_policy: on-demand
197
197
  validation: [manual]
198
+ archive_policy: replace-with-snapshot
199
+ notes: archived DOC-106 → docs/archive/specs/; live file is compact decision record
200
+ - id: docs-context-budget
201
+ path: docs/CONTEXT_BUDGET.md
202
+ class: canonical
203
+ audience: [maintainer]
204
+ owner: product
205
+ source_of_truth: docs/CONTEXT_BUDGET.md
206
+ merge_strategy: none
207
+ load_policy: on-demand
208
+ validation: [manual]
198
209
  archive_policy: never
210
+ notes: moved from README.md DOC-107
199
211
  - id: docs-prompt-caching
200
212
  path: docs/PROMPT_CACHING.md
201
213
  class: canonical
@@ -328,26 +340,60 @@ entries:
328
340
  # ── templates/ canonical authoring sources ───────────────────────────────
329
341
  - id: tpl-claude-md
330
342
  path: templates/CLAUDE.md
331
- class: canonical
343
+ class: generated
332
344
  audience: [agent, maintainer]
333
345
  owner: product
334
- source_of_truth: templates/CLAUDE.md
346
+ source_of_truth: templates/instructions/
335
347
  merge_strategy: overwrite_with_backup
336
348
  load_policy: always
337
- validation: [manual]
349
+ validation: [manual, test:tests/consistency/instructionRender.test.js]
338
350
  archive_policy: never
339
- notes: renders to installed roots
351
+ notes: generated by yarn docs:render from templates/instructions/ (DOC-102); renders to installed roots
340
352
  - id: tpl-agents-md
341
353
  path: templates/AGENTS.md
342
- class: canonical
354
+ class: generated
343
355
  audience: [agent, maintainer]
344
356
  owner: product
345
- source_of_truth: templates/AGENTS.md
357
+ source_of_truth: templates/instructions/
346
358
  merge_strategy: overwrite_with_backup
347
359
  load_policy: always
360
+ validation: [manual, test:tests/consistency/instructionRender.test.js]
361
+ archive_policy: never
362
+ notes: generated by yarn docs:render from templates/instructions/ (DOC-102); renders to installed roots
363
+ - id: tpl-instructions
364
+ path: templates/instructions/
365
+ class: canonical
366
+ audience: [agent, maintainer]
367
+ owner: product
368
+ source_of_truth: templates/instructions/
369
+ merge_strategy: none
370
+ load_policy: task-routed
348
371
  validation: [manual]
349
372
  archive_policy: never
350
- notes: renders to installed roots
373
+ notes: dir entry — core/overlay render sources (DOC-102)
374
+ - id: tpl-instructions-core
375
+ path: templates/instructions/core.md
376
+ class: canonical
377
+ audience: [agent, maintainer]
378
+ owner: product
379
+ source_of_truth: templates/instructions/core.md
380
+ merge_strategy: none
381
+ load_policy: task-routed
382
+ validation: [manual]
383
+ archive_policy: never
384
+ budget: { max_lines: 160, enforcement: warning }
385
+ notes: canonical shared core; pre-shrink >160 is warning-only (DOC-104 shrinks)
386
+ - id: tpl-omp-rules
387
+ path: templates/.omp/RULES.md
388
+ class: generated
389
+ audience: [agent, maintainer]
390
+ owner: adapter
391
+ source_of_truth: templates/instructions/overlays/omp-rules.md
392
+ merge_strategy: overwrite_with_backup
393
+ load_policy: always
394
+ validation: [manual, test:tests/consistency/ompContextLayer.test.js]
395
+ archive_policy: never
396
+ notes: generated by yarn docs:render from overlay:omp-rules (DOC-102); file entry overrides tpl-omp-dir
351
397
  - id: tpl-project-important
352
398
  path: templates/PROJECT_IMPORTANT.md
353
399
  class: canonical
@@ -461,6 +507,17 @@ entries:
461
507
  validation: [manual]
462
508
  archive_policy: never
463
509
  notes: dir sourceTemplate docs/AI_HANDOFF → dir path ending '/'
510
+ - id: tpl-docs-ukit-internals
511
+ path: templates/docs/UKIT_INTERNALS.md
512
+ class: canonical
513
+ audience: [agent, maintainer]
514
+ owner: product
515
+ source_of_truth: templates/docs/UKIT_INTERNALS.md
516
+ merge_strategy: overwrite_with_backup
517
+ load_policy: task-routed
518
+ validation: [manual]
519
+ archive_policy: never
520
+ notes: internal-orchestration detail extracted from core.md (DOC-104); shipped via docs-ukit-internals manifest item
464
521
  - id: tpl-codex-readme
465
522
  path: templates/.codex/README.md
466
523
  class: canonical