@ngockhoale/ukit 2.6.4 → 2.6.6
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 +73 -0
- package/bin/ukit +30 -10
- package/manifests/documentation.yaml +605 -0
- package/package.json +2 -2
- package/src/core/memory/store.js +10 -3
- package/src/core/runtimeConfig.js +2 -0
- package/templates/.claude/hooks/auto-prune-bash.sh +33 -0
- package/templates/.claude/hooks/completion-gate.sh +20 -1
- package/templates/.claude/hooks/context-hardcap-gate.sh +7 -0
- package/templates/.claude/hooks/handoff-resume.sh +14 -1
- package/templates/.claude/hooks/skill-router.sh +180 -27
- package/templates/.claude/hooks/task-watchdog.sh +30 -5
- package/templates/.claude/hooks/vision-router.sh +14 -0
- package/templates/.claude/ukit/index/post-edit-verify.mjs +33 -1
- package/templates/.claude/ukit/index/stale-spec-check.mjs +32 -1
- package/templates/.claude/ukit/runtime/compact-threshold.mjs +16 -8
- package/templates/.claude/ukit/runtime/execution-ledger.mjs +19 -1
- package/templates/.claude/ukit/runtime/hook-telemetry.mjs +17 -1
- package/templates/.claude/ukit/runtime/output-compression.mjs +58 -8
- package/templates/.claude/ukit/runtime/reinject-context.mjs +37 -5
- package/templates/.claude/ukit/runtime/stop-coordinator.mjs +5 -1
- package/templates/.codex/README.md +1 -1
- package/templates/ukit/README.md +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,79 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to UKit are documented here.
|
|
4
4
|
|
|
5
|
+
## 2.6.6 - 2026-09-19
|
|
6
|
+
|
|
7
|
+
Documentation-hardening release — first slice of the
|
|
8
|
+
DOCUMENTATION_IMPROVEMENT_ROADMAP (cycle C24, DOC-001..006). No runtime
|
|
9
|
+
behavior changes: new manifest, new test lanes, doc cleanup, and a shipped
|
|
10
|
+
registry the remaining roadmap items build on.
|
|
11
|
+
|
|
12
|
+
- **DOC-001 — documentation ownership/source registry**: new
|
|
13
|
+
`manifests/documentation.yaml` classifies every active/template/adapter
|
|
14
|
+
documentation surface (owner, source_of_truth, merge_strategy, budget);
|
|
15
|
+
`tests/consistency/docRegistry.test.js` enforces schema, coverage,
|
|
16
|
+
manifest-skip consistency, and `error`-level budgets.
|
|
17
|
+
- **DOC-002 — cross-agent benchmark corpus**: spec + fixtures at
|
|
18
|
+
`tests/fixtures/doc-benchmark/` (corpus index, 4 host files, 9+ task files);
|
|
19
|
+
`tests/benchmarks/docBenchmarkCorpus.test.js` validates structure and
|
|
20
|
+
registry cross-references. Host execution deferred — every host recorded
|
|
21
|
+
`untested` (roadmap-permitted).
|
|
22
|
+
- **DOC-003 — artifact reference-integrity checks**:
|
|
23
|
+
`tests/integration/artifactReferenceIntegrity.test.js` fails when a shipped
|
|
24
|
+
instruction/skill doc references an internal command/file that does not
|
|
25
|
+
resolve into the `npm pack` artifact (or the declared runtime-generated
|
|
26
|
+
allowlist); wired into `yarn test:artifact`.
|
|
27
|
+
- **DOC-004 — owner-file preservation lifecycle tests**:
|
|
28
|
+
`tests/integration/ownerPreservation.test.js` proves install/update/uninstall
|
|
29
|
+
preserve exact bytes and symlink posture of every registry
|
|
30
|
+
`merge_strategy: skip` file, including BOM/CRLF and absent-seed cases.
|
|
31
|
+
- **DOC-005 — STATUS.md live snapshot**: `docs/STATUS.md` shrunk to a ≤150-line
|
|
32
|
+
live snapshot; historical body preserved verbatim at
|
|
33
|
+
`docs/archive/status/STATUS-2026-09-19.md` with two-way links; registry
|
|
34
|
+
budget for STATUS.md flipped to `error`.
|
|
35
|
+
- **DOC-006 — adapter stale-version cleanup**: zero stale `vX.Y.Z` literals on
|
|
36
|
+
adapter doc surfaces (`templates/.codex/README.md`, `.codex/README.md`,
|
|
37
|
+
`templates/ukit/README.md`, `.ukit/README.md`); Codex-specific mechanics
|
|
38
|
+
retained; `tests/consistency/staleVersionProse.test.js` enforces.
|
|
39
|
+
|
|
40
|
+
## 2.6.5 - 2026-09-19
|
|
41
|
+
|
|
42
|
+
Stability release — third full audit pass on the 2.6.4 base (cycle C23). 15
|
|
43
|
+
confirmed hang / freeze / silent-idle / silent-hook defects fixed with root
|
|
44
|
+
causes (full register: `docs/AI_HANDOFF/BUGS-2.6.5.md`). Headline: the
|
|
45
|
+
cycle-lockout mechanism observed live — stall-breaker streak erased on every
|
|
46
|
+
Stop (BUG-C23-08) — is fixed, plus every blocking/degrading hook exit now
|
|
47
|
+
announces on stdout per the §8 contract.
|
|
48
|
+
|
|
49
|
+
- **Handoff stall-breaker streak erased every Stop (BUG-C23-08)**: the
|
|
50
|
+
stop-coordinator dedupe write dropped the `handoff` streak slot, so a wedged
|
|
51
|
+
RUN.md blocked forever; the merge now preserves the slot.
|
|
52
|
+
- **Silent non-zero hook failures (BUG-C23-01, -03, -07)**: stderr-only crash
|
|
53
|
+
reasons in `output-compression`/`reinject-context`/`post-edit-verify`/
|
|
54
|
+
`stale-spec-check` + safe-patch exit-2 blocks + skill-router/vision-router/
|
|
55
|
+
task-watchdog crash paths now emit a stdout `systemMessage` before exit —
|
|
56
|
+
stderr reaches the model, not reliably the user.
|
|
57
|
+
- **Lost/silent deadline emissions (BUG-C23-02, -04)**: compact-threshold's
|
|
58
|
+
same-tick `stdout.write` + `process.exit(0)` discarded the announce on pipes
|
|
59
|
+
(now `writeSync(1)`); deadline-expiry `exit 0` in four called `.mjs` modules
|
|
60
|
+
and `handoff-resume.sh` now announces the abandoned work.
|
|
61
|
+
- **Fail-open/crash-posture defects (BUG-C23-05, -06)**: context-hardcap-gate's
|
|
62
|
+
internal-error catch now announces its fail-open degrade on stdout;
|
|
63
|
+
completion-gate's stop-coordinator spawn is deadline-bounded with forced
|
|
64
|
+
kill routed to the crash-streak path.
|
|
65
|
+
- **Silent data loss + hot-path waste (BUG-C23-09, -10, -13, -15)**:
|
|
66
|
+
compact-threshold double capacity read collapsed to one; sweep failures
|
|
67
|
+
announce (bounded) instead of `.catch(() => {})` swallow; unguarded `main()`
|
|
68
|
+
no longer runs on `import()`; route-audit merges stage to an append-only
|
|
69
|
+
sidecar with a locked + exit fold instead of silently dropping entries.
|
|
70
|
+
- **Unbounded growth + unbounded stalls (BUG-C23-11, -12, -14)**: memory
|
|
71
|
+
project archives capped; `permission-audit.log` rotates inside the prune
|
|
72
|
+
pass; `bin/ukit` runCli got an overall deadline watchdog.
|
|
73
|
+
|
|
74
|
+
Regression gate: 138 files / 2360 tests green, liveness 120/120, §8 sweep
|
|
75
|
+
clean, template↔installed parity byte-identical, async-caller census clean,
|
|
76
|
+
all 25 C22 verdicts re-confirmed.
|
|
77
|
+
|
|
5
78
|
## 2.6.4 - 2026-09-19
|
|
6
79
|
|
|
7
80
|
Stability release — second full audit pass on the 2.6.3 base (cycle C22). 25
|
package/bin/ukit
CHANGED
|
@@ -11,17 +11,37 @@ async function readPackageVersion(packageRoot) {
|
|
|
11
11
|
return packageJson.version;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
const DEFAULT_CLI_DEADLINE_MS = 120_000;
|
|
15
|
+
|
|
16
|
+
function resolveCliDeadlineMs() {
|
|
17
|
+
const raw = Number(process.env.UKIT_CLI_DEADLINE_MS);
|
|
18
|
+
return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_CLI_DEADLINE_MS;
|
|
19
|
+
}
|
|
20
|
+
|
|
14
21
|
async function main() {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
// Overall wall-clock watchdog: individual fs/readline awaits inside runCli are
|
|
23
|
+
// unbounded, so a wedged .ukit/external mount would park the CLI forever.
|
|
24
|
+
const deadlineMs = resolveCliDeadlineMs();
|
|
25
|
+
const watchdog = setTimeout(() => {
|
|
26
|
+
console.error(`[UKit] timed out after ${deadlineMs}ms — likely wedged filesystem; retry`);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}, deadlineMs);
|
|
29
|
+
watchdog.unref();
|
|
30
|
+
|
|
31
|
+
try {
|
|
32
|
+
const currentFile = fileURLToPath(import.meta.url);
|
|
33
|
+
const packageRoot = path.resolve(path.dirname(currentFile), '..');
|
|
34
|
+
const packageVersion = await readPackageVersion(packageRoot);
|
|
35
|
+
|
|
36
|
+
await runCli({
|
|
37
|
+
argv: process.argv.slice(2),
|
|
38
|
+
packageRoot,
|
|
39
|
+
projectRoot: process.cwd(),
|
|
40
|
+
packageVersion,
|
|
41
|
+
});
|
|
42
|
+
} finally {
|
|
43
|
+
clearTimeout(watchdog);
|
|
44
|
+
}
|
|
25
45
|
}
|
|
26
46
|
|
|
27
47
|
main().catch((error) => {
|