@ngockhoale/ukit 2.6.6 → 2.6.8
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 +37 -0
- package/README.md +40 -177
- package/manifests/documentation.yaml +143 -15
- package/manifests/hostCapabilities.yaml +49 -0
- package/manifests/instructionRules.yaml +383 -0
- package/manifests/platform.full.yaml +15 -0
- package/package.json +3 -1
- package/scripts/bench/goldTasks.json +38 -0
- package/scripts/bench/runGold.mjs +220 -0
- package/scripts/docs/render-instructions.mjs +42 -0
- package/scripts/release/verify-release.mjs +6 -0
- package/src/cli/commands/code.js +182 -0
- package/src/cli/commands/doctor.js +35 -3
- package/src/cli/commands/indexTools.js +102 -1
- package/src/cli/commands/memory.js +137 -0
- package/src/cli/index.js +7 -0
- package/src/core/codeintel/compiler.js +316 -0
- package/src/core/codeintel/diagnostics.js +114 -0
- package/src/core/codeintel/freshness.js +295 -0
- package/src/core/codeintel/impact.js +251 -0
- package/src/core/codeintel/invalidation.js +150 -0
- package/src/core/codeintel/manifest.js +176 -0
- package/src/core/codeintel/packet.js +146 -0
- package/src/core/codeintel/providers.js +201 -0
- package/src/core/codeintel/retriever.js +372 -0
- package/src/core/codeintel/router.js +149 -0
- package/src/core/codeintel/semanticProvider.js +235 -0
- package/src/core/docContracts.js +723 -0
- package/src/core/memory/migrate.js +324 -0
- package/src/core/memory/records.js +172 -0
- package/src/core/memory/retrieval.js +161 -11
- package/src/core/memory/store.js +398 -0
- package/src/core/memory/storeV2.js +171 -0
- package/src/core/memory/storeV2Loader.js +22 -0
- package/src/core/projectImportant.js +1 -1
- package/src/core/runtimeConfig.js +125 -0
- package/src/core/runtimePaths.js +3 -0
- package/src/core/uninstall.js +1 -1
- package/src/index/taskRouting.js +39 -0
- package/src/render/instructionRenderer.js +226 -0
- package/templates/.claude/ukit/index/route-task.mjs +40 -0
- package/templates/.gitignore +2 -2
- package/templates/.omp/RULES.md +1 -0
- package/templates/AGENTS.md +89 -218
- package/templates/CLAUDE.md +85 -212
- package/templates/docs/AI_HANDOFF/tasks/_TEMPLATE.md +5 -0
- package/templates/docs/BUGFIX.md +2 -19
- package/templates/docs/BUG_INDEX.md +43 -0
- package/templates/docs/BUG_METRICS.md +1 -5
- package/templates/docs/BUG_TEMPLATE.md +1 -11
- package/templates/docs/UKIT_INTERNALS.md +223 -0
- package/templates/instructions/core.md +157 -0
- package/templates/instructions/layout.yaml +149 -0
- package/templates/instructions/overlays/agents.md +15 -0
- package/templates/instructions/overlays/claude.md +3 -0
- package/templates/instructions/overlays/omp-rules.md +74 -0
- package/templates/instructions/overlays/repo.md +9 -0
- package/templates/instructions/repo-vars.yaml +23 -0
- package/templates/ukit/storage/config.json +30 -0
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
|
-
##
|
|
5
|
+
## Install
|
|
6
6
|
|
|
7
|
-
|
|
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
|
-
|
|
29
|
-
ukit install
|
|
30
|
-
```
|
|
13
|
+
2. Open any project root in the terminal and run:
|
|
31
14
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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
|
-
|
|
21
|
+
## After install
|
|
42
22
|
|
|
43
|
-
|
|
44
|
-
ukit install
|
|
45
|
-
```
|
|
23
|
+
For normal team usage, `ukit install` is the only UKit command anyone should need to remember:
|
|
46
24
|
|
|
47
|
-
|
|
48
|
-
|
|
25
|
+
- open your AI tool
|
|
26
|
+
- describe the task in natural language
|
|
27
|
+
- let the workspace instructions route the flow
|
|
49
28
|
|
|
50
|
-
|
|
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
|
-
##
|
|
61
|
+
## Shared runtime
|
|
94
62
|
|
|
95
|
-
UKit
|
|
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,
|
|
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`
|
|
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
|
-
|
|
155
|
-
Edit the three numbers, rerun **`ukit install`**, and Claude Code and omp both follow.
|
|
72
|
+
## Supported tools
|
|
156
73
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
|
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
|
-
|
|
81
|
+
All supported tools share the same SKILL.md ecosystem so the workspace is authored once and reused everywhere.
|
|
204
82
|
|
|
205
|
-
|
|
83
|
+
## Maintainer docs
|
|
206
84
|
|
|
207
|
-
|
|
85
|
+
Maintainer internals live in dedicated docs — linked here, not duplicated:
|
|
208
86
|
|
|
209
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
@@ -134,7 +134,8 @@ entries:
|
|
|
134
134
|
load_policy: task-routed
|
|
135
135
|
validation: [manual]
|
|
136
136
|
archive_policy: never
|
|
137
|
-
budget: { max_lines:
|
|
137
|
+
budget: { max_lines: 120, enforcement: warning }
|
|
138
|
+
notes: 'recalibrated TASK-217: actual 92 lines; 250 was >2.7× actual — 120 leaves ~30% headroom'
|
|
138
139
|
- id: docs-improvement-roadmap
|
|
139
140
|
path: docs/DOCUMENTATION_IMPROVEMENT_ROADMAP.md
|
|
140
141
|
class: canonical
|
|
@@ -175,7 +176,8 @@ entries:
|
|
|
175
176
|
load_policy: task-routed
|
|
176
177
|
validation: [manual]
|
|
177
178
|
archive_policy: never
|
|
178
|
-
budget: { max_lines:
|
|
179
|
+
budget: { max_lines: 110, enforcement: warning }
|
|
180
|
+
notes: 'recalibrated TASK-217: actual 82 lines; 200 was ~2.4× actual — 110 leaves ~34% headroom'
|
|
179
181
|
- id: docs-project
|
|
180
182
|
path: docs/PROJECT.md
|
|
181
183
|
class: canonical
|
|
@@ -186,6 +188,16 @@ entries:
|
|
|
186
188
|
load_policy: on-demand
|
|
187
189
|
validation: [manual]
|
|
188
190
|
archive_policy: never
|
|
191
|
+
- id: docs-project-description
|
|
192
|
+
path: docs/PROJECT_DESCRIPTION.md
|
|
193
|
+
class: canonical
|
|
194
|
+
audience: [agent, maintainer]
|
|
195
|
+
owner: product
|
|
196
|
+
source_of_truth: docs/PROJECT_DESCRIPTION.md
|
|
197
|
+
merge_strategy: none
|
|
198
|
+
load_policy: on-demand
|
|
199
|
+
validation: [manual]
|
|
200
|
+
archive_policy: never
|
|
189
201
|
- id: docs-project-important-spec
|
|
190
202
|
path: docs/PROJECT_IMPORTANT_SPEC.md
|
|
191
203
|
class: canonical
|
|
@@ -195,7 +207,20 @@ entries:
|
|
|
195
207
|
merge_strategy: none
|
|
196
208
|
load_policy: on-demand
|
|
197
209
|
validation: [manual]
|
|
210
|
+
archive_policy: replace-with-snapshot
|
|
211
|
+
budget: { max_lines: 60, enforcement: warning }
|
|
212
|
+
notes: 'archived DOC-106 → docs/archive/specs/; live file is compact decision record. TASK-217: budget added (audit listed 44/150) — actual 44 lines, 60 leaves ~36% headroom'
|
|
213
|
+
- id: docs-context-budget
|
|
214
|
+
path: docs/CONTEXT_BUDGET.md
|
|
215
|
+
class: canonical
|
|
216
|
+
audience: [maintainer]
|
|
217
|
+
owner: product
|
|
218
|
+
source_of_truth: docs/CONTEXT_BUDGET.md
|
|
219
|
+
merge_strategy: none
|
|
220
|
+
load_policy: on-demand
|
|
221
|
+
validation: [manual]
|
|
198
222
|
archive_policy: never
|
|
223
|
+
notes: moved from README.md DOC-107
|
|
199
224
|
- id: docs-prompt-caching
|
|
200
225
|
path: docs/PROMPT_CACHING.md
|
|
201
226
|
class: canonical
|
|
@@ -259,7 +284,7 @@ entries:
|
|
|
259
284
|
validation: [manual]
|
|
260
285
|
archive_policy: date-rotate
|
|
261
286
|
budget: { max_lines: 150, enforcement: error }
|
|
262
|
-
notes: enforcement flipped to error by TASK-005 (2026-09-19)
|
|
287
|
+
notes: enforcement flipped to error by TASK-005 (2026-09-19); TASK-217 audit — actual 83 lines (~55% headroom), value kept
|
|
263
288
|
- id: docs-worklog
|
|
264
289
|
path: docs/WORKLOG.md
|
|
265
290
|
class: runtime
|
|
@@ -271,7 +296,7 @@ entries:
|
|
|
271
296
|
validation: [manual]
|
|
272
297
|
archive_policy: never
|
|
273
298
|
budget: { max_lines: 600, enforcement: warning }
|
|
274
|
-
notes: rotation = DOC-105
|
|
299
|
+
notes: 'rotation = DOC-105; TASK-217 audit — actual 528 lines (~12% headroom), value kept pending rotation'
|
|
275
300
|
- id: docs-ai-handoff
|
|
276
301
|
path: docs/AI_HANDOFF/
|
|
277
302
|
class: runtime
|
|
@@ -283,6 +308,17 @@ entries:
|
|
|
283
308
|
validation: [manual]
|
|
284
309
|
archive_policy: never
|
|
285
310
|
notes: dir entry — covers all files beneath
|
|
311
|
+
- id: docs-ai-handoff-index
|
|
312
|
+
path: docs/AI_HANDOFF/INDEX.md
|
|
313
|
+
class: runtime
|
|
314
|
+
audience: [agent, maintainer]
|
|
315
|
+
owner: runtime
|
|
316
|
+
source_of_truth: docs/AI_HANDOFF/INDEX.md
|
|
317
|
+
merge_strategy: none
|
|
318
|
+
load_policy: task-routed
|
|
319
|
+
validation: [manual]
|
|
320
|
+
archive_policy: never
|
|
321
|
+
notes: handoff run cursor index; declared in context_layers.intents.handoff (DOC-201)
|
|
286
322
|
- id: docs-archive
|
|
287
323
|
path: docs/archive/
|
|
288
324
|
class: archive
|
|
@@ -328,26 +364,60 @@ entries:
|
|
|
328
364
|
# ── templates/ canonical authoring sources ───────────────────────────────
|
|
329
365
|
- id: tpl-claude-md
|
|
330
366
|
path: templates/CLAUDE.md
|
|
331
|
-
class:
|
|
367
|
+
class: generated
|
|
332
368
|
audience: [agent, maintainer]
|
|
333
369
|
owner: product
|
|
334
|
-
source_of_truth: templates/
|
|
370
|
+
source_of_truth: templates/instructions/
|
|
335
371
|
merge_strategy: overwrite_with_backup
|
|
336
372
|
load_policy: always
|
|
337
|
-
validation: [manual]
|
|
373
|
+
validation: [manual, test:tests/consistency/instructionRender.test.js]
|
|
338
374
|
archive_policy: never
|
|
339
|
-
notes: renders to installed roots
|
|
375
|
+
notes: generated by yarn docs:render from templates/instructions/ (DOC-102); renders to installed roots
|
|
340
376
|
- id: tpl-agents-md
|
|
341
377
|
path: templates/AGENTS.md
|
|
342
|
-
class:
|
|
378
|
+
class: generated
|
|
343
379
|
audience: [agent, maintainer]
|
|
344
380
|
owner: product
|
|
345
|
-
source_of_truth: templates/
|
|
381
|
+
source_of_truth: templates/instructions/
|
|
346
382
|
merge_strategy: overwrite_with_backup
|
|
347
383
|
load_policy: always
|
|
384
|
+
validation: [manual, test:tests/consistency/instructionRender.test.js]
|
|
385
|
+
archive_policy: never
|
|
386
|
+
notes: generated by yarn docs:render from templates/instructions/ (DOC-102); renders to installed roots
|
|
387
|
+
- id: tpl-instructions
|
|
388
|
+
path: templates/instructions/
|
|
389
|
+
class: canonical
|
|
390
|
+
audience: [agent, maintainer]
|
|
391
|
+
owner: product
|
|
392
|
+
source_of_truth: templates/instructions/
|
|
393
|
+
merge_strategy: none
|
|
394
|
+
load_policy: task-routed
|
|
348
395
|
validation: [manual]
|
|
349
396
|
archive_policy: never
|
|
350
|
-
notes:
|
|
397
|
+
notes: dir entry — core/overlay render sources (DOC-102)
|
|
398
|
+
- id: tpl-instructions-core
|
|
399
|
+
path: templates/instructions/core.md
|
|
400
|
+
class: canonical
|
|
401
|
+
audience: [agent, maintainer]
|
|
402
|
+
owner: product
|
|
403
|
+
source_of_truth: templates/instructions/core.md
|
|
404
|
+
merge_strategy: none
|
|
405
|
+
load_policy: task-routed
|
|
406
|
+
validation: [manual]
|
|
407
|
+
archive_policy: never
|
|
408
|
+
budget: { max_lines: 160, enforcement: warning }
|
|
409
|
+
notes: 'canonical shared core; TASK-217 shrink 210→157 lines — budget 160 kept per SPEC §14 (now obeyed, warning-only)'
|
|
410
|
+
- id: tpl-omp-rules
|
|
411
|
+
path: templates/.omp/RULES.md
|
|
412
|
+
class: generated
|
|
413
|
+
audience: [agent, maintainer]
|
|
414
|
+
owner: adapter
|
|
415
|
+
source_of_truth: templates/instructions/overlays/omp-rules.md
|
|
416
|
+
merge_strategy: overwrite_with_backup
|
|
417
|
+
load_policy: always
|
|
418
|
+
validation: [manual, test:tests/consistency/ompContextLayer.test.js]
|
|
419
|
+
archive_policy: never
|
|
420
|
+
notes: generated by yarn docs:render from overlay:omp-rules (DOC-102); file entry overrides tpl-omp-dir
|
|
351
421
|
- id: tpl-project-important
|
|
352
422
|
path: templates/PROJECT_IMPORTANT.md
|
|
353
423
|
class: canonical
|
|
@@ -461,6 +531,17 @@ entries:
|
|
|
461
531
|
validation: [manual]
|
|
462
532
|
archive_policy: never
|
|
463
533
|
notes: dir sourceTemplate docs/AI_HANDOFF → dir path ending '/'
|
|
534
|
+
- id: tpl-docs-ukit-internals
|
|
535
|
+
path: templates/docs/UKIT_INTERNALS.md
|
|
536
|
+
class: canonical
|
|
537
|
+
audience: [agent, maintainer]
|
|
538
|
+
owner: product
|
|
539
|
+
source_of_truth: templates/docs/UKIT_INTERNALS.md
|
|
540
|
+
merge_strategy: overwrite_with_backup
|
|
541
|
+
load_policy: task-routed
|
|
542
|
+
validation: [manual]
|
|
543
|
+
archive_policy: never
|
|
544
|
+
notes: internal-orchestration detail extracted from core.md (DOC-104); shipped via docs-ukit-internals manifest item
|
|
464
545
|
- id: tpl-codex-readme
|
|
465
546
|
path: templates/.codex/README.md
|
|
466
547
|
class: canonical
|
|
@@ -603,3 +684,50 @@ entries:
|
|
|
603
684
|
load_policy: on-demand
|
|
604
685
|
validation: [manual]
|
|
605
686
|
archive_policy: never
|
|
687
|
+
|
|
688
|
+
# ── Same-wave additions (DOC-201 batch; files authored by TASK-208/212) ────
|
|
689
|
+
- id: docs-host-capability-matrix
|
|
690
|
+
path: docs/HOST_CAPABILITY_MATRIX.md
|
|
691
|
+
class: canonical
|
|
692
|
+
audience: [maintainer, contributor]
|
|
693
|
+
owner: adapter
|
|
694
|
+
source_of_truth: docs/HOST_CAPABILITY_MATRIX.md
|
|
695
|
+
merge_strategy: none
|
|
696
|
+
load_policy: on-demand
|
|
697
|
+
validation: [manual]
|
|
698
|
+
archive_policy: never
|
|
699
|
+
notes: hand-authored from manifests/hostCapabilities.yaml (TASK-208 adds hostCapabilityMatrix.test.js enforcement)
|
|
700
|
+
- id: manifest-host-capabilities
|
|
701
|
+
path: manifests/hostCapabilities.yaml
|
|
702
|
+
class: canonical
|
|
703
|
+
audience: [maintainer]
|
|
704
|
+
owner: adapter
|
|
705
|
+
source_of_truth: manifests/hostCapabilities.yaml
|
|
706
|
+
merge_strategy: none
|
|
707
|
+
load_policy: on-demand
|
|
708
|
+
validation: [manual]
|
|
709
|
+
archive_policy: never
|
|
710
|
+
notes: machine-readable host capability states (DOC-202); matrix doc renders from it
|
|
711
|
+
- id: docs-prompt-caching-vendor-evidence
|
|
712
|
+
path: docs/research/PROMPT_CACHING_VENDOR_EVIDENCE.md
|
|
713
|
+
class: archive
|
|
714
|
+
audience: [maintainer]
|
|
715
|
+
owner: product
|
|
716
|
+
source_of_truth: docs/research/PROMPT_CACHING_VENDOR_EVIDENCE.md
|
|
717
|
+
merge_strategy: none
|
|
718
|
+
load_policy: never
|
|
719
|
+
validation: [manual]
|
|
720
|
+
archive_policy: immutable
|
|
721
|
+
notes: vendor evidence extracted from docs/PROMPT_CACHING.md (DOC-206, TASK-212)
|
|
722
|
+
|
|
723
|
+
# Declared complexity→docs mapping consumed by the router's `docs=` summary segment
|
|
724
|
+
# (src/index/taskRouting.js CONTEXT_LAYER_DOCS mirrors this block; DOC-201 FR-001/002).
|
|
725
|
+
# queued-task intent omitted v1: docs/TASKS.md is optional per-repo (SPEC §14).
|
|
726
|
+
context_layers:
|
|
727
|
+
task_types:
|
|
728
|
+
trivial: []
|
|
729
|
+
simple: [docs/MEMORY.md]
|
|
730
|
+
non-trivial: [docs/MEMORY.md, docs/PROJECT.md, docs/CODE_MAP.md]
|
|
731
|
+
intents:
|
|
732
|
+
open-ended: [docs/STATUS.md]
|
|
733
|
+
handoff: [docs/AI_HANDOFF/INDEX.md]
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Host capability matrix (DOC-202 / FR-003).
|
|
2
|
+
# Every host × capability cell carries a state:
|
|
3
|
+
# tested — an automated test under tests/** exercises the shipped artifact (evidence required)
|
|
4
|
+
# observed — shipped artifact exists and is reviewed by hand; no dedicated automated test (evidence/note required)
|
|
5
|
+
# unknown — not verified in this repo
|
|
6
|
+
# Human table mirror: docs/HOST_CAPABILITY_MATRIX.md
|
|
7
|
+
# Consistency enforced by: tests/consistency/hostCapabilityMatrix.test.js
|
|
8
|
+
version: 1
|
|
9
|
+
hosts:
|
|
10
|
+
claude-code:
|
|
11
|
+
skills: { state: tested, evidence: tests/integration/installPipeline.test.js }
|
|
12
|
+
subagents: { state: tested, evidence: tests/consistency/mappingFingerprint.test.js }
|
|
13
|
+
hooks: { state: tested, evidence: tests/hooks/skillRouterHook.test.js }
|
|
14
|
+
session-start-injection: { state: tested, evidence: tests/hooks/reinjectContextHook.test.js }
|
|
15
|
+
stop-gate: { state: tested, evidence: tests/hooks/stopCoordinator.test.js }
|
|
16
|
+
slash-commands: { state: tested, evidence: tests/integration/artifactReferenceIntegrity.test.js }
|
|
17
|
+
owner-file-injection: { state: tested, evidence: tests/consistency/instructionRender.test.js }
|
|
18
|
+
settings-env: { state: tested, evidence: tests/core/repairBrokenHooks.test.js }
|
|
19
|
+
context-files: { state: tested, evidence: tests/integration/installPipeline.test.js }
|
|
20
|
+
codex:
|
|
21
|
+
skills: { state: observed, note: '.codex/skills mirror ships via install; no dedicated codex-skill test' }
|
|
22
|
+
subagents: { state: unknown }
|
|
23
|
+
hooks: { state: unknown }
|
|
24
|
+
session-start-injection: { state: unknown }
|
|
25
|
+
stop-gate: { state: unknown }
|
|
26
|
+
slash-commands: { state: unknown }
|
|
27
|
+
owner-file-injection: { state: observed, note: 'AGENTS.md rendered for codex; parity asserted only at artifact level' }
|
|
28
|
+
settings-env: { state: tested, evidence: tests/integration/installPipeline.test.js }
|
|
29
|
+
context-files: { state: tested, evidence: tests/integration/installPipeline.test.js }
|
|
30
|
+
opencode:
|
|
31
|
+
skills: { state: observed, note: 'reads .claude/skills via discovery; asserted indirectly by artifact tests' }
|
|
32
|
+
subagents: { state: unknown }
|
|
33
|
+
hooks: { state: unknown }
|
|
34
|
+
session-start-injection: { state: unknown }
|
|
35
|
+
stop-gate: { state: unknown }
|
|
36
|
+
slash-commands: { state: observed, note: 'ukit-* helper entrypoints declared in opencode.json' }
|
|
37
|
+
owner-file-injection: { state: observed, note: 'AGENTS.md loaded at session start; no injection test' }
|
|
38
|
+
settings-env: { state: tested, evidence: tests/integration/installPipeline.test.js }
|
|
39
|
+
context-files: { state: observed, note: 'AGENTS.md asserted by install pipeline; no opencode-specific parse test' }
|
|
40
|
+
omp:
|
|
41
|
+
skills: { state: observed, note: 'omp reads .claude/skills via claude discovery provider' }
|
|
42
|
+
subagents: { state: tested, evidence: tests/consistency/ompAgentParity.test.js }
|
|
43
|
+
hooks: { state: tested, evidence: tests/hooks/ompHookBridge.test.js }
|
|
44
|
+
session-start-injection: { state: tested, evidence: tests/hooks/ompHookBridge.test.js }
|
|
45
|
+
stop-gate: { state: unknown }
|
|
46
|
+
slash-commands: { state: observed, note: 'delegation parentheticals checked by tests/consistency/ompCommandParity.test.js' }
|
|
47
|
+
owner-file-injection: { state: unknown }
|
|
48
|
+
settings-env: { state: observed, note: 'templates/.omp/config.yml modelRoles reviewed by ompAgentParity' }
|
|
49
|
+
context-files: { state: observed, note: 'omp consumes AGENTS.md/CLAUDE.md context layer; no dedicated test' }
|