@aperant/framework 0.8.1 → 0.8.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 +443 -1
- package/agents/apt-planner.md +39 -7
- package/dist/cli/commands/adr.mjs +1 -1
- package/dist/cli/commands/audit-branch-current.d.mts +25 -0
- package/dist/cli/commands/audit-branch-current.d.mts.map +1 -0
- package/dist/cli/commands/audit-branch-current.mjs +252 -0
- package/dist/cli/commands/audit-branch-current.mjs.map +1 -0
- package/dist/cli/commands/audit.d.mts.map +1 -1
- package/dist/cli/commands/audit.mjs +13 -2
- package/dist/cli/commands/audit.mjs.map +1 -1
- package/dist/cli/commands/check-version.d.mts.map +1 -1
- package/dist/cli/commands/check-version.mjs +19 -1
- package/dist/cli/commands/check-version.mjs.map +1 -1
- package/dist/cli/commands/context.mjs +3 -3
- package/dist/cli/commands/context.mjs.map +1 -1
- package/dist/cli/commands/coverage-check.d.mts.map +1 -1
- package/dist/cli/commands/coverage-check.mjs +74 -7
- package/dist/cli/commands/coverage-check.mjs.map +1 -1
- package/dist/cli/commands/detect-runtime.d.mts +6 -0
- package/dist/cli/commands/detect-runtime.d.mts.map +1 -0
- package/dist/cli/commands/detect-runtime.mjs +142 -0
- package/dist/cli/commands/detect-runtime.mjs.map +1 -0
- package/dist/cli/commands/driver-doctor.d.mts +29 -0
- package/dist/cli/commands/driver-doctor.d.mts.map +1 -0
- package/dist/cli/commands/driver-doctor.mjs +291 -0
- package/dist/cli/commands/driver-doctor.mjs.map +1 -0
- package/dist/cli/commands/gate.mjs +14 -0
- package/dist/cli/commands/gate.mjs.map +1 -1
- package/dist/cli/commands/init.d.mts.map +1 -1
- package/dist/cli/commands/init.mjs +9 -6
- package/dist/cli/commands/init.mjs.map +1 -1
- package/dist/cli/commands/install-from-source.d.mts +2 -0
- package/dist/cli/commands/install-from-source.d.mts.map +1 -0
- package/dist/cli/commands/install-from-source.mjs +2 -0
- package/dist/cli/commands/install-from-source.mjs.map +1 -0
- package/dist/cli/commands/modes.mjs +1 -1
- package/dist/cli/commands/route.d.mts.map +1 -1
- package/dist/cli/commands/route.mjs +38 -1
- package/dist/cli/commands/route.mjs.map +1 -1
- package/dist/cli/commands/triage.mjs +1 -1
- package/dist/cli/config/load.d.mts.map +1 -1
- package/dist/cli/config/load.mjs +9 -3
- package/dist/cli/config/load.mjs.map +1 -1
- package/dist/cli/coordination/auto-emit-artifact-ready.mjs +1 -1
- package/dist/cli/coordination/event-schema.d.mts.map +1 -1
- package/dist/cli/coordination/event-schema.mjs +18 -0
- package/dist/cli/coordination/event-schema.mjs.map +1 -1
- package/dist/cli/coverage-check/user-outcomes.d.mts +84 -0
- package/dist/cli/coverage-check/user-outcomes.d.mts.map +1 -0
- package/dist/cli/coverage-check/user-outcomes.mjs +265 -0
- package/dist/cli/coverage-check/user-outcomes.mjs.map +1 -0
- package/dist/cli/dispatch.d.mts.map +1 -1
- package/dist/cli/dispatch.mjs +18 -1
- package/dist/cli/dispatch.mjs.map +1 -1
- package/dist/cli/gate/context.d.mts +1 -0
- package/dist/cli/gate/context.d.mts.map +1 -1
- package/dist/cli/gate/context.mjs +14 -1
- package/dist/cli/gate/context.mjs.map +1 -1
- package/dist/cli/gate/gates/consistency-check.d.mts +1 -0
- package/dist/cli/gate/gates/consistency-check.d.mts.map +1 -1
- package/dist/cli/gate/gates/consistency-check.mjs +1 -0
- package/dist/cli/gate/gates/consistency-check.mjs.map +1 -1
- package/dist/cli/gate/gates/review-clean.d.mts +1 -0
- package/dist/cli/gate/gates/review-clean.d.mts.map +1 -1
- package/dist/cli/gate/gates/review-clean.mjs +1 -0
- package/dist/cli/gate/gates/review-clean.mjs.map +1 -1
- package/dist/cli/gate/gates/verify-approved.d.mts +1 -0
- package/dist/cli/gate/gates/verify-approved.d.mts.map +1 -1
- package/dist/cli/gate/gates/verify-approved.mjs +1 -0
- package/dist/cli/gate/gates/verify-approved.mjs.map +1 -1
- package/dist/cli/gate/registry.d.mts.map +1 -1
- package/dist/cli/gate/registry.mjs +9 -1
- package/dist/cli/gate/registry.mjs.map +1 -1
- package/dist/cli/host/detect.mjs +1 -1
- package/dist/cli/host/detect.mjs.map +1 -1
- package/dist/cli/install/find-workspace-framework-version.d.mts +16 -0
- package/dist/cli/install/find-workspace-framework-version.d.mts.map +1 -0
- package/dist/cli/install/find-workspace-framework-version.mjs +85 -0
- package/dist/cli/install/find-workspace-framework-version.mjs.map +1 -0
- package/dist/cli/install/install-from-source.d.mts +10 -0
- package/dist/cli/install/install-from-source.d.mts.map +1 -0
- package/dist/cli/install/install-from-source.mjs +271 -0
- package/dist/cli/install/install-from-source.mjs.map +1 -0
- package/dist/cli/install/install-kernel.d.mts.map +1 -1
- package/dist/cli/install/install-kernel.mjs +24 -0
- package/dist/cli/install/install-kernel.mjs.map +1 -1
- package/dist/cli/install/legacy-paths.d.mts +33 -11
- package/dist/cli/install/legacy-paths.d.mts.map +1 -1
- package/dist/cli/install/legacy-paths.mjs +163 -39
- package/dist/cli/install/legacy-paths.mjs.map +1 -1
- package/dist/cli/install/runtime-detect.mjs +1 -1
- package/dist/cli/install/runtime-detect.mjs.map +1 -1
- package/dist/cli/install/runtime-migrate.d.mts +34 -14
- package/dist/cli/install/runtime-migrate.d.mts.map +1 -1
- package/dist/cli/install/runtime-migrate.mjs +63 -30
- package/dist/cli/install/runtime-migrate.mjs.map +1 -1
- package/dist/cli/install/transforms/codex.d.mts.map +1 -1
- package/dist/cli/install/transforms/codex.mjs +28 -17
- package/dist/cli/install/transforms/codex.mjs.map +1 -1
- package/dist/cli/skill-author/contract.mjs +2 -2
- package/dist/cli/skill-author/contract.mjs.map +1 -1
- package/dist/cli/verify-proof/audit.d.mts +34 -0
- package/dist/cli/verify-proof/audit.d.mts.map +1 -0
- package/dist/cli/verify-proof/audit.mjs +53 -0
- package/dist/cli/verify-proof/audit.mjs.map +1 -0
- package/dist/cli/verify-proof/exec.d.mts +20 -0
- package/dist/cli/verify-proof/exec.d.mts.map +1 -0
- package/dist/cli/verify-proof/exec.mjs +74 -0
- package/dist/cli/verify-proof/exec.mjs.map +1 -0
- package/dist/cli/verify-proof/idl/index.d.mts +2 -0
- package/dist/cli/verify-proof/idl/index.d.mts.map +1 -0
- package/dist/cli/verify-proof/idl/index.mjs +13 -0
- package/dist/cli/verify-proof/idl/index.mjs.map +1 -0
- package/dist/cli/verify-proof/idl/types.d.ts +10 -0
- package/dist/cli/verify-proof/idl/types.d.ts.map +1 -0
- package/dist/cli/verify-proof/idl/types.js +10 -0
- package/dist/cli/verify-proof/idl/types.js.map +1 -0
- package/dist/cli/verify-proof/manifest-validator.d.mts +19 -0
- package/dist/cli/verify-proof/manifest-validator.d.mts.map +1 -0
- package/dist/cli/verify-proof/manifest-validator.mjs +182 -0
- package/dist/cli/verify-proof/manifest-validator.mjs.map +1 -0
- package/dist/cli/verify-proof/resolver.d.mts +105 -0
- package/dist/cli/verify-proof/resolver.d.mts.map +1 -0
- package/dist/cli/verify-proof/resolver.mjs +320 -0
- package/dist/cli/verify-proof/resolver.mjs.map +1 -0
- package/dist/cli/verify-proof/runtime-detect.d.mts +30 -0
- package/dist/cli/verify-proof/runtime-detect.d.mts.map +1 -0
- package/dist/cli/verify-proof/runtime-detect.mjs +209 -0
- package/dist/cli/verify-proof/runtime-detect.mjs.map +1 -0
- package/dist/cli/verify-proof/trust.d.mts +70 -0
- package/dist/cli/verify-proof/trust.d.mts.map +1 -0
- package/dist/cli/verify-proof/trust.mjs +174 -0
- package/dist/cli/verify-proof/trust.mjs.map +1 -0
- package/dist/driver-sdk/conformance.d.ts +41 -0
- package/dist/driver-sdk/conformance.d.ts.map +1 -0
- package/dist/driver-sdk/conformance.js +123 -0
- package/dist/driver-sdk/conformance.js.map +1 -0
- package/dist/driver-sdk/errors.d.ts +75 -0
- package/dist/driver-sdk/errors.d.ts.map +1 -0
- package/dist/driver-sdk/errors.js +80 -0
- package/dist/driver-sdk/errors.js.map +1 -0
- package/dist/driver-sdk/idl.d.ts +221 -0
- package/dist/driver-sdk/idl.d.ts.map +1 -0
- package/dist/driver-sdk/idl.js +140 -0
- package/dist/driver-sdk/idl.js.map +1 -0
- package/dist/driver-sdk/index.d.ts +28 -0
- package/dist/driver-sdk/index.d.ts.map +1 -0
- package/dist/driver-sdk/index.js +28 -0
- package/dist/driver-sdk/index.js.map +1 -0
- package/dist/driver-sdk/manifest.d.ts +93 -0
- package/dist/driver-sdk/manifest.d.ts.map +1 -0
- package/dist/driver-sdk/manifest.js +12 -0
- package/dist/driver-sdk/manifest.js.map +1 -0
- package/dist/driver-sdk/retry.d.ts +33 -0
- package/dist/driver-sdk/retry.d.ts.map +1 -0
- package/dist/driver-sdk/retry.js +50 -0
- package/dist/driver-sdk/retry.js.map +1 -0
- package/dist/plugin/.claude-plugin/plugin.json +4 -1
- package/dist/plugin/agents/apt-planner.md +39 -7
- package/dist/plugin/skills/apt/SKILL.md +75 -6
- package/dist/plugin/skills/apt-caveman/SKILL.md +64 -0
- package/dist/plugin/skills/apt-debug/SKILL.md +36 -4
- package/dist/plugin/skills/apt-debug/appendices/diagnose-discipline.md +2 -11
- package/dist/plugin/skills/apt-discuss/SKILL.md +4 -4
- package/dist/plugin/skills/apt-discuss/appendices/grill-discipline.md +2 -11
- package/dist/plugin/skills/apt-discuss/appendices/zoom-out-helper.md +0 -8
- package/dist/plugin/skills/apt-execute/SKILL.md +27 -4
- package/dist/plugin/skills/apt-execute/appendices/tdd-mode.md +2 -10
- package/dist/plugin/skills/apt-fan-out/SKILL.md +36 -1
- package/dist/plugin/skills/apt-handoff/SKILL.md +228 -0
- package/dist/plugin/skills/apt-improve/DEEPENING.md +0 -8
- package/dist/plugin/skills/apt-improve/INTERFACE-DESIGN.md +0 -8
- package/dist/plugin/skills/apt-improve/LANGUAGE.md +0 -8
- package/dist/plugin/skills/apt-improve/SKILL.md +4 -4
- package/dist/plugin/skills/apt-plan/SKILL.md +73 -5
- package/dist/plugin/skills/apt-plan/adapters/conductor.md +1 -1
- package/dist/plugin/skills/apt-pr-review/SKILL.md +1 -1
- package/dist/plugin/skills/apt-prototype/LOGIC.md +0 -8
- package/dist/plugin/skills/apt-prototype/SKILL.md +4 -4
- package/dist/plugin/skills/apt-prototype/UI.md +0 -8
- package/dist/plugin/skills/apt-quick/SKILL.md +31 -1
- package/dist/plugin/skills/apt-research/SKILL.md +526 -0
- package/dist/plugin/skills/apt-research/appendices/budget-loop.md +397 -0
- package/dist/plugin/skills/apt-research/appendices/claim-graph-schema.md +206 -0
- package/dist/plugin/skills/apt-research/appendices/domain-tools.md +236 -0
- package/dist/plugin/skills/apt-resume/SKILL.md +54 -31
- package/dist/plugin/skills/apt-run/SKILL.md +114 -16
- package/dist/plugin/skills/apt-setup/SKILL.md +97 -8
- package/dist/plugin/skills/apt-ship/SKILL.md +165 -9
- package/dist/plugin/skills/apt-spar/SKILL.md +84 -23
- package/dist/plugin/skills/apt-triage/AGENT-BRIEF.md +0 -8
- package/dist/plugin/skills/apt-triage/OUT-OF-SCOPE.md +0 -7
- package/dist/plugin/skills/apt-triage/SKILL.md +2 -2
- package/dist/plugin/skills/apt-update/SKILL.md +74 -17
- package/dist/plugin/skills/apt-verify-proof/SKILL.md +87 -1
- package/dist/plugin/skills/apt-zoom-out/SKILL.md +3 -3
- package/dist/schemas/quick-task.d.ts +17 -17
- package/dist/schemas/quick-task.d.ts.map +1 -1
- package/dist/schemas/quick-task.js +2 -2
- package/dist/schemas/quick-task.js.map +1 -1
- package/dist/types/config.d.ts +33 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/state.d.ts +1 -1
- package/dist/types/state.d.ts.map +1 -1
- package/dist/types/task-record.d.ts +1 -1
- package/dist/types/task-record.d.ts.map +1 -1
- package/drivers/.gitkeep +0 -0
- package/drivers/api/README.md +40 -0
- package/drivers/api/driver.mjs +59 -0
- package/drivers/api/manifest.json +26 -0
- package/drivers/browser/README.md +105 -0
- package/drivers/browser/driver.mjs +134 -0
- package/drivers/browser/manifest.json +35 -0
- package/drivers/cli/README.md +44 -0
- package/drivers/cli/driver.mjs +62 -0
- package/drivers/cli/manifest.json +28 -0
- package/drivers/electron/README.md +64 -0
- package/drivers/electron/driver.mjs +87 -0
- package/drivers/electron/manifest.json +37 -0
- package/package.json +138 -133
- package/prompts/planner.md +1 -1
- package/prompts/spec_writer.md +1 -1
- package/skills/apt/SKILL.md +75 -6
- package/skills/apt-caveman/SKILL.md +64 -0
- package/skills/apt-debug/SKILL.md +36 -4
- package/skills/apt-debug/appendices/diagnose-discipline.md +2 -11
- package/skills/apt-discuss/SKILL.md +4 -4
- package/skills/apt-discuss/appendices/grill-discipline.md +2 -11
- package/skills/apt-discuss/appendices/zoom-out-helper.md +0 -8
- package/skills/apt-execute/SKILL.md +27 -4
- package/skills/apt-execute/appendices/tdd-mode.md +2 -10
- package/skills/apt-fan-out/SKILL.md +36 -1
- package/skills/apt-handoff/SKILL.md +228 -0
- package/skills/apt-improve/DEEPENING.md +0 -8
- package/skills/apt-improve/INTERFACE-DESIGN.md +0 -8
- package/skills/apt-improve/LANGUAGE.md +0 -8
- package/skills/apt-improve/SKILL.md +4 -4
- package/skills/apt-plan/SKILL.md +73 -5
- package/skills/apt-plan/adapters/conductor.md +1 -1
- package/skills/apt-planner.md +17 -1
- package/skills/apt-pr-review/SKILL.md +1 -1
- package/skills/apt-prototype/LOGIC.md +0 -8
- package/skills/apt-prototype/SKILL.md +4 -4
- package/skills/apt-prototype/UI.md +0 -8
- package/skills/apt-quick/SKILL.md +31 -1
- package/skills/apt-research/SKILL.md +526 -0
- package/skills/apt-research/appendices/budget-loop.md +397 -0
- package/skills/apt-research/appendices/claim-graph-schema.md +206 -0
- package/skills/apt-research/appendices/domain-tools.md +236 -0
- package/skills/apt-resume/SKILL.md +54 -31
- package/skills/apt-run/SKILL.md +114 -16
- package/skills/apt-setup/SKILL.md +97 -8
- package/skills/apt-ship/SKILL.md +165 -9
- package/skills/apt-spar/SKILL.md +84 -23
- package/skills/apt-triage/AGENT-BRIEF.md +0 -8
- package/skills/apt-triage/OUT-OF-SCOPE.md +0 -7
- package/skills/apt-triage/SKILL.md +2 -2
- package/skills/apt-update/SKILL.md +74 -17
- package/skills/apt-verify-proof/SKILL.md +87 -1
- package/skills/apt-zoom-out/SKILL.md +3 -3
- package/src/cli/commands/adr.mjs +1 -1
- package/src/cli/commands/audit-branch-current.mjs +250 -0
- package/src/cli/commands/audit.mjs +13 -2
- package/src/cli/commands/check-version.mjs +20 -1
- package/src/cli/commands/context.mjs +3 -3
- package/src/cli/commands/coverage-check.mjs +126 -44
- package/src/cli/commands/detect-runtime.mjs +143 -0
- package/src/cli/commands/driver-doctor.mjs +294 -0
- package/src/cli/commands/gate.mjs +15 -0
- package/src/cli/commands/init.mjs +9 -6
- package/src/cli/commands/install-from-source.mjs +1 -0
- package/src/cli/commands/modes.mjs +1 -1
- package/src/cli/commands/route.mjs +42 -1
- package/src/cli/commands/triage.mjs +1 -1
- package/src/cli/config/load.mjs +9 -3
- package/src/cli/coordination/auto-emit-artifact-ready.mjs +1 -1
- package/src/cli/coordination/event-schema.mjs +19 -0
- package/src/cli/coverage-check/user-outcomes.mjs +273 -0
- package/src/cli/dispatch.mjs +17 -1
- package/src/cli/gate/context.mjs +20 -1
- package/src/cli/gate/gates/consistency-check.mjs +1 -0
- package/src/cli/gate/gates/review-clean.mjs +1 -0
- package/src/cli/gate/gates/verify-approved.mjs +1 -0
- package/src/cli/gate/registry.mjs +11 -1
- package/src/cli/host/detect.mjs +1 -1
- package/src/cli/install/find-workspace-framework-version.mjs +88 -0
- package/src/cli/install/install-from-source.mjs +276 -0
- package/src/cli/install/install-kernel.mjs +24 -0
- package/src/cli/install/legacy-paths.mjs +164 -39
- package/src/cli/install/runtime-detect.mjs +1 -1
- package/src/cli/install/runtime-migrate.mjs +63 -30
- package/src/cli/install/transforms/codex.mjs +26 -17
- package/src/cli/skill-author/contract.mjs +2 -2
- package/src/cli/verify-proof/.gitkeep +0 -0
- package/src/cli/verify-proof/audit.mjs +55 -0
- package/src/cli/verify-proof/exec.mjs +74 -0
- package/src/cli/verify-proof/idl/index.mjs +23 -0
- package/src/cli/verify-proof/idl/types.ts +42 -0
- package/src/cli/verify-proof/manifest-schema.json +212 -0
- package/src/cli/verify-proof/manifest-validator.mjs +184 -0
- package/src/cli/verify-proof/resolver.mjs +330 -0
- package/src/cli/verify-proof/runtime-detect.mjs +211 -0
- package/src/cli/verify-proof/trust.mjs +187 -0
- package/templates/adr-format.md +0 -8
- package/templates/aperant-claude-md-appendix.md +1 -1
- package/templates/context-format.md +1 -9
- package/templates/proof-verification.md +51 -8
- package/workflows/verify-proof.md +130 -19
package/CHANGELOG.md
CHANGED
|
@@ -3,7 +3,449 @@
|
|
|
3
3
|
All notable changes to `@aperant/framework` are documented here. See
|
|
4
4
|
[`VERSIONING.md`](VERSIONING.md) for the per-tier contract.
|
|
5
5
|
|
|
6
|
-
##
|
|
6
|
+
## 0.8.6 — 2026-05-24 — Outcome-first verify-proof contract + driver-sdk inline (recovery from 0.8.4 npm 404)
|
|
7
|
+
|
|
8
|
+
> **Migration window.** This release introduces a new `## User Outcomes`
|
|
9
|
+
> section that becomes the verify-proof input contract. Specs WITHOUT
|
|
10
|
+
> the section emit a `coverage-check` **warning** on v0.8.x and a
|
|
11
|
+
> **HARD BLOCK** starting v0.9.0. Refactor-only specs SHOULD use the
|
|
12
|
+
> empty-with-note escape (`_No user-observable changes — pure
|
|
13
|
+
> refactor._`) to declare absence-of-outcomes deliberately. See spec
|
|
14
|
+
> §ID-07 of `verify-proof-monorepo-contract` for the gate table.
|
|
15
|
+
|
|
16
|
+
> **Recovery.** 0.8.4 shipped with `@aperant/driver-sdk: 0.1.0` as a
|
|
17
|
+
> direct dep, but the driver-sdk package was never published — every
|
|
18
|
+
> `npm install @aperant/framework@0.8.4` since 2026-05-22 failed with
|
|
19
|
+
> a 404 on the transitive dep. 0.8.6 inlines the 875-LOC zero-dep SDK
|
|
20
|
+
> into the framework tarball, removing the broken dep. Users on 0.8.4
|
|
21
|
+
> MUST upgrade to 0.8.6 to install successfully.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- **`@aperant/driver-sdk` inlined into framework src** (recovery from
|
|
26
|
+
the 0.8.4 npm 404). The SDK lived at `packages/framework-driver-sdk/`
|
|
27
|
+
with the contract that third-party driver authors would `pnpm add
|
|
28
|
+
@aperant/driver-sdk` and avoid pulling all of framework. The SDK
|
|
29
|
+
was never published; pnpm's `workspace:*` rewrite baked an
|
|
30
|
+
unresolvable `0.1.0` spec into framework's published `package.json`.
|
|
31
|
+
Fix: 875 LOC of zero-runtime-dep SDK moved to
|
|
32
|
+
`packages/framework/src/driver-sdk/`, framework imports rewritten to
|
|
33
|
+
relative paths, the `import-direction.test.ts` invariant repurposed
|
|
34
|
+
from a package boundary to a subdirectory boundary so re-extraction
|
|
35
|
+
stays mechanical if a real third-party driver author ever asks for a
|
|
36
|
+
standalone install. The `@aperant/driver-sdk` npm package remains
|
|
37
|
+
unpublished — no consumers existed to migrate.
|
|
38
|
+
|
|
39
|
+
### Added
|
|
40
|
+
|
|
41
|
+
- **`## User Outcomes` PRD section** — verify-proof's input contract.
|
|
42
|
+
STANDARD/DEEP specs ship a section between `## Solution` and
|
|
43
|
+
`## Implementation Decisions` carrying one `**Epic:**` headline + N
|
|
44
|
+
atomic outcomes tagged by surface (`electron | web | cli | api |
|
|
45
|
+
electron+web`). Authors write the literal `**ON**` token; IDs are
|
|
46
|
+
POSITIONAL and synthesized by the parser (O1, O2, …). Optional
|
|
47
|
+
cross-refs via `*(requires ON N)*`. Empty-with-note refactor escape
|
|
48
|
+
for non-UX tasks. QUICK track is hard-exempt per the Fast Path
|
|
49
|
+
Guarantee (ID-05).
|
|
50
|
+
- **`drivers/browser/manifest.json:transport.skill_id = "agent-browser"`**
|
|
51
|
+
— second transport option alongside `mcp_server_id: "puppeteer"`.
|
|
52
|
+
On Claude Code / OpenCode hosts the workflow runner dispatches via
|
|
53
|
+
`Skill({skill: "agent-browser", args: ...})` (one fewer external
|
|
54
|
+
dep — no Puppeteer MCP install needed); on legacy hosts the MCP
|
|
55
|
+
path is preserved. `chooseTransport({has_skill_tool})` helper.
|
|
56
|
+
- **`resolveDriversForOutcomes(opts)`** — new resolver entrypoint that
|
|
57
|
+
returns one entry per (outcome, surface) pair. For `[electron+web]`
|
|
58
|
+
outcomes emits TWO entries with the same `outcome_id` and different
|
|
59
|
+
drivers. Delegates to existing `resolveDriver()` for scoring.
|
|
60
|
+
- **`verification.monorepo_globs: string[]`** config key (default
|
|
61
|
+
`["apps/*"]`) — `loadRuntimeCapabilities` walks each glob match's
|
|
62
|
+
`package.json` and OR-merges its capabilities with the root.
|
|
63
|
+
Disable the walk entirely with `monorepo_globs: []`.
|
|
64
|
+
- **`transport` field on `verification.json:tests[]`** — `skill | mcp
|
|
65
|
+
| binary | http`. Populated by the workflow runner from the
|
|
66
|
+
dispatcher's directive (Step 7a). Documented in
|
|
67
|
+
`templates/proof-verification.md`.
|
|
68
|
+
- **`surface` field on `verification.json:tests[]`** — `electron | web
|
|
69
|
+
| cli | api`. Drives the per-surface screenshot path and the
|
|
70
|
+
`coverage.by_surface` rollup. Cross-surface outcomes produce TWO
|
|
71
|
+
test entries sharing the same `outcome_id`.
|
|
72
|
+
|
|
73
|
+
### Changed
|
|
74
|
+
|
|
75
|
+
- **`apt-tools detect-runtime`** — now walks `apps/*/package.json` by
|
|
76
|
+
default. Fixes the canonical Aperant monorepo defect (root
|
|
77
|
+
package.json with no Electron dep + `apps/desktop/package.json`
|
|
78
|
+
carrying Electron previously returned `is_electron: false` because
|
|
79
|
+
the detector only read the root). No user-visible config change
|
|
80
|
+
needed; opt out via `verification.monorepo_globs: []`.
|
|
81
|
+
- **`apt-tools coverage-check validate`** — payload gains a
|
|
82
|
+
`user_outcomes` block when the plan is STANDARD/DEEP. Block carries
|
|
83
|
+
`header_present`, `body_kind` (`empty | empty-with-note | outcomes
|
|
84
|
+
| absent`), `outcomes_count`, `validation_warnings?`, and
|
|
85
|
+
`gate_result` (`pass | warn | block`). QUICK plans omit the block
|
|
86
|
+
entirely per Fast Path Guarantee.
|
|
87
|
+
- **`workflows/verify-proof.md` Step 7** — dispatches per outcome via
|
|
88
|
+
`resolveDriversForOutcomes()` instead of a single per-run
|
|
89
|
+
`resolveDriver()` call. Writes screenshots under
|
|
90
|
+
`${PROOF_DIR}/${surface}/screenshots/${outcome-id}.png` (per-surface
|
|
91
|
+
split tree). Step 7a gains the MUST-invoke Skill directive
|
|
92
|
+
(TD-08 grep guard pins the language).
|
|
93
|
+
|
|
94
|
+
### Deprecated
|
|
95
|
+
|
|
96
|
+
- **Specs without `## User Outcomes` (STANDARD/DEEP only).** v0.8.x
|
|
97
|
+
emits a `coverage-check` **warning** with a `migration_deadline`
|
|
98
|
+
string referencing v0.9.0. v0.9.0 will **HARD BLOCK** specs that
|
|
99
|
+
lack the section. Refactor-only specs SHOULD use the
|
|
100
|
+
empty-with-note escape (`_No user-observable changes — pure
|
|
101
|
+
refactor._`, italic underscores + em dash + period required) to
|
|
102
|
+
declare absence-of-outcomes deliberately. QUICK-track plans are
|
|
103
|
+
hard-exempt at every version.
|
|
104
|
+
|
|
105
|
+
### v0.9.0 telegraph (one-minor window)
|
|
106
|
+
|
|
107
|
+
The v0.9.0 cutover lands the hard-block on missing `## User Outcomes`
|
|
108
|
+
in STANDARD/DEEP specs. Adopters should retrofit specs in the v0.8.x
|
|
109
|
+
window OR adopt the empty-with-note escape for refactor specs. No
|
|
110
|
+
silent migration of existing specs is provided — the migration is
|
|
111
|
+
deliberate per author.
|
|
112
|
+
|
|
113
|
+
### Out-of-scope (deferred follow-ups)
|
|
114
|
+
|
|
115
|
+
- **`verify-proof-executable-runner`** — the v1 verify-proof runner is
|
|
116
|
+
the host LLM (Claude Code / Codex / OpenCode / Gemini) following
|
|
117
|
+
`workflows/verify-proof.md` as a prose recipe. The framework does
|
|
118
|
+
NOT ship an executable `apt-tools verify-proof` command in 0.8.6.
|
|
119
|
+
The `transport` field, per-outcome dispatch, and MUST-invoke
|
|
120
|
+
directive are LLM-honored conventions enforced via grep guards on
|
|
121
|
+
workflow text (TD-08) and schema assertions on `verification.json`
|
|
122
|
+
shape (AC23). Follow-up `verify-proof-executable-runner` task is
|
|
123
|
+
deferred per spec §Out of Scope; the triggers that would promote
|
|
124
|
+
Path B → Path A are documented there.
|
|
125
|
+
- **`apt-tools outcomes lint`** — sentence-shape lint for User
|
|
126
|
+
Outcomes (catches squishy outcomes, validates surface tags).
|
|
127
|
+
Deferred to a follow-up framework task.
|
|
128
|
+
|
|
129
|
+
## 0.8.5 — 2026-05-22 — `/apt:verify-proof` driver layer fixes (bundled drivers + hard override precedence)
|
|
130
|
+
|
|
131
|
+
### Fixed
|
|
132
|
+
|
|
133
|
+
- **`drivers/` missing from published tarball.** `packages/framework/package.json:files`
|
|
134
|
+
did not include `drivers/`, so the four bundled IDL drivers (`browser`,
|
|
135
|
+
`electron`, `cli`, `api` — each with `manifest.json` + `driver.mjs` +
|
|
136
|
+
`README.md`) were stripped at `pnpm pack` / `npm publish` time. Downstream
|
|
137
|
+
effect: `apt-tools detect-runtime` returned `discovered_drivers: []` and
|
|
138
|
+
`selected_driver_id: null` for every installed kernel, which made the
|
|
139
|
+
strict `/apt:verify-proof` IDL path unusable (resolver throws
|
|
140
|
+
`unsatisfied_required_capability`). Fix is a one-line `files` entry —
|
|
141
|
+
re-pack now ships 4 manifests + 4 driver modules. Self-host installs
|
|
142
|
+
fix automatically on the next `/apt:update --from-source`; npm-install
|
|
143
|
+
consumers fix on the next published version bump.
|
|
144
|
+
|
|
145
|
+
- **`verification.runtimes[]` override was decorative.** The resolver
|
|
146
|
+
in `packages/framework/src/cli/verify-proof/resolver.mjs` placed
|
|
147
|
+
override-listed drivers first in the candidate list but then sorted
|
|
148
|
+
the list by score, wiping the override order. With a Next.js root
|
|
149
|
+
`package.json` (e.g. a monorepo where Electron lives at `apps/desktop`),
|
|
150
|
+
forcing `verification.runtimes: ["electron"]` still selected `browser`
|
|
151
|
+
because the latter had higher `priority` (100 vs 90). The override
|
|
152
|
+
docstring promised "explicit driverId precedence" but delivered a
|
|
153
|
+
tie-breaker. Fix: override is now **hard precedence** — listed
|
|
154
|
+
drivers are tried in override order, first one satisfying every
|
|
155
|
+
required capability wins regardless of score; non-matching override
|
|
156
|
+
entries are recorded in `fallback_attempts` with reason
|
|
157
|
+
`override-listed but missing required capabilities: ...` and the
|
|
158
|
+
resolver then falls through to the score-based pick on remaining
|
|
159
|
+
drivers. Two test cases in `verify-proof-resolver.test.ts` lock the
|
|
160
|
+
new contract (force-pick + fall-through).
|
|
161
|
+
|
|
162
|
+
## 0.8.4 — 2026-05-22 — `/apt:update` polish + `apt:handoff`, `apt:caveman` skills + `apt:resume` HANDOFF discovery
|
|
163
|
+
|
|
164
|
+
Bundled release: five `/apt:update` fix bundles (converged from a 3-round
|
|
165
|
+
Codex sparring session at `.aperant/spar/apt-update-fixes-20260522-083919.md`,
|
|
166
|
+
resolving 9 reported issues + 2 hidden defects) plus two new skills and one
|
|
167
|
+
extended skill.
|
|
168
|
+
|
|
169
|
+
> **VERSIONING.md note.** New skills normally trigger MINOR per the
|
|
170
|
+
> contract. Operator opted for PATCH here because the surface area is
|
|
171
|
+
> small (2 skills, 1 extension) and the apt:update polish is the load-
|
|
172
|
+
> bearing change. Future MINOR bumps remain reserved for transform /
|
|
173
|
+
> manifest / CLI flag additions.
|
|
174
|
+
|
|
175
|
+
### Added
|
|
176
|
+
|
|
177
|
+
- **`/apt:handoff`** (new skill at `packages/framework/skills/apt-handoff/SKILL.md`).
|
|
178
|
+
Agent-to-agent handoff — compacts the current conversation into a
|
|
179
|
+
`HANDOFF.md` artifact under `.aperant/handoffs/{id}/` (or
|
|
180
|
+
`{task_dir}/handoffs/{id}/` when inside a routed task), indexed via a
|
|
181
|
+
new `.aperant/HANDOFFS_INDEX.md`. Distinct from `/apt:pause` along
|
|
182
|
+
four axes: trigger (agent vs human), audience (different agent vs
|
|
183
|
+
future-self), uncommitted-work handling (does NOT stash), and index
|
|
184
|
+
file. `stage: pause`, `intent: capture`, `task_context: none`.
|
|
185
|
+
- **`/apt:caveman`** (new skill at `packages/framework/skills/apt-caveman/SKILL.md`).
|
|
186
|
+
Ultra-compressed terse output mode — toggles a persistent "smart
|
|
187
|
+
caveman" style that cuts conversational token usage while keeping
|
|
188
|
+
full technical accuracy. `stage: ops`, `intent: configure`,
|
|
189
|
+
`allowed-tools: ""`.
|
|
190
|
+
|
|
191
|
+
### Changed
|
|
192
|
+
|
|
193
|
+
- **`/apt:resume`** now discovers HANDOFF artifacts in addition to
|
|
194
|
+
CONTINUE artifacts. New step `1b` reads `.aperant/HANDOFFS_INDEX.md`;
|
|
195
|
+
step `1d` scans `.aperant/{tasks/*/handoffs,handoffs}/*/HANDOFF.md` as
|
|
196
|
+
fallback. The Present Sessions list tags each row `[pause]` or
|
|
197
|
+
`[handoff]` (handoffs render first — higher urgency). Step 3 splits
|
|
198
|
+
into `3a` (pause: read CONTINUE.md, pop stash) vs `3b` (handoff: read
|
|
199
|
+
Focus, verify external state, do NOT pop stash). Cleanup removes the
|
|
200
|
+
matching index row regardless of type.
|
|
201
|
+
|
|
202
|
+
### Fixed
|
|
203
|
+
|
|
204
|
+
- **Bundle A — Workspace-aware version detection.** New helper
|
|
205
|
+
`findWorkspaceFrameworkVersion(targetDir)` walks up to a sibling
|
|
206
|
+
`packages/framework/package.json` (max 6 frames, mirroring
|
|
207
|
+
`route/drift-detect.mjs:32`). The SessionStart worker cache + the
|
|
208
|
+
`apt-tools check-version --json` envelope now carry an additive
|
|
209
|
+
`framework.workspace_version: string | null` field. When the
|
|
210
|
+
workspace is ahead of the running kernel, `update_available` flips
|
|
211
|
+
true regardless of npm cache state — the workspace is the source of
|
|
212
|
+
truth on self-host. `--from-source` flag preserved as explicit
|
|
213
|
+
override per ID-03. Resolves issues 1, 7, 9.
|
|
214
|
+
- **Bundle B — Idempotent kernel install.** `installKernel` short-
|
|
215
|
+
circuits when the kernel package.json already reports the target
|
|
216
|
+
version AND the kernel binary exists. Returns the same
|
|
217
|
+
`status: 'installed'` envelope with `reason: 'already at target
|
|
218
|
+
version'` + `durationMs: 0` so the three downstream consumers
|
|
219
|
+
(init.mjs:1441, init.mjs:1735, SKILL.md Scenario D) keep their
|
|
220
|
+
existing branching. No new enum value (D-02). Resolves issues 5, 6.
|
|
221
|
+
- **Bundle C — SKILL.md doc gaps.** Adds the `pnpm install --filter
|
|
222
|
+
@aperant/framework... --frozen-lockfile=false` precondition before
|
|
223
|
+
the `pnpm pack` recipe (AC6); adds a hard warning against
|
|
224
|
+
substituting `npm pack` — names the `workspace:*` literal +
|
|
225
|
+
`EUNSUPPORTEDPROTOCOL` keyword (AC7); adds a `Migrated:` line slot
|
|
226
|
+
to all three Scenario A/B/C templates, conditional on
|
|
227
|
+
`legacy_cleanup?.ran === true && rmdirs.some(p => p.includes('.codex'))`
|
|
228
|
+
(AC8). Resolves issues 2, 4, 8.
|
|
229
|
+
- **Bundle D — Workspace-dep chain.** New CLI subcommand
|
|
230
|
+
`apt-tools install-from-source <project-dir>` walks workspace
|
|
231
|
+
`dependencies` + `peerDependencies` for `workspace:*` entries
|
|
232
|
+
(matching by package `name`, not directory name —
|
|
233
|
+
`@aperant/driver-sdk` lives at `packages/framework-driver-sdk/`),
|
|
234
|
+
pnpm-packs each, then invokes a single `npm install --prefix
|
|
235
|
+
.aperant/deps <tarball-list>...` with the existing kernel-install
|
|
236
|
+
flag set (`--no-save`, `--no-package-lock`, `--no-audit`,
|
|
237
|
+
`--no-fund`). Handles the same-PR unpublished-pair case
|
|
238
|
+
(`framework@X` + `driver-sdk@Y` both at `workspace:*`, both
|
|
239
|
+
unpublished) without `EUNSUPPORTEDPROTOCOL`. SKILL.md §1.7
|
|
240
|
+
simplified to a single apt-tools invocation; the manual recipe
|
|
241
|
+
preserved as a debugging-aid footnote. Resolves issue 3.
|
|
242
|
+
- **Bundle E — Init comment inversion + Scenario A null-latest.**
|
|
243
|
+
Fixed `init.mjs:1253-1268` comment + stderr direction (LEGACY =
|
|
244
|
+
`.codex/`, CURRENT = `.agents/skills/<folder>/SKILL.md`; was
|
|
245
|
+
reversed; the v0.8.2 inversion is documented in
|
|
246
|
+
`runtime-migrate.mjs:7-12`). Scenario A now requires
|
|
247
|
+
`latest_version != null` to avoid false "version bump" chips when
|
|
248
|
+
npm-latest is unknown (cache stale, not published, network down).
|
|
249
|
+
New Scenario E ("no version info available") branch handles that
|
|
250
|
+
case explicitly — refreshes runtime files for safety, tells the
|
|
251
|
+
user the bump is deferred. Resolves 2 hidden defects.
|
|
252
|
+
|
|
253
|
+
### Schema status
|
|
254
|
+
|
|
255
|
+
Envelope changes are strictly additive — the new
|
|
256
|
+
`framework.workspace_version` field is nullable, existing callers
|
|
257
|
+
ignore unknown fields. **No `schema_version` bump** (cache stays at
|
|
258
|
+
`1`, locked by `update-chips.mjs:97-98` + the
|
|
259
|
+
`check-version-cache-merge.test.ts:137-148` schema-2 rejection
|
|
260
|
+
regression test).
|
|
261
|
+
|
|
262
|
+
### Decision source
|
|
263
|
+
|
|
264
|
+
Codex sparring session 2026-05-22 (3 rounds, CONVERGED).
|
|
265
|
+
|
|
266
|
+
### Tests
|
|
267
|
+
|
|
268
|
+
- **New:** `find-workspace-framework-version.test.ts`,
|
|
269
|
+
`install-kernel-idempotent.test.ts`,
|
|
270
|
+
`apt-update-skill-doc-gaps.test.ts`, `install-from-source.test.ts`,
|
|
271
|
+
`init-legacy-cleanup-direction.test.ts` (5 files / 23 new cases).
|
|
272
|
+
- **Augmented:** `check-version-cache-merge.test.ts` (+2 cases for
|
|
273
|
+
the workspace_version envelope field).
|
|
274
|
+
- **Regression-locked:** `apt-update-from-source-skill-structure.test.ts`,
|
|
275
|
+
`route-source-drift-detection.test.ts`, `legacy-cleanup-codex.test.ts`,
|
|
276
|
+
`check-version-cache-merge.test.ts` (existing schema_version=2
|
|
277
|
+
rejection at `:137-148`). All still pass.
|
|
278
|
+
|
|
279
|
+
## 0.8.3 — 2026-05-21 — FRAMEWORK-RFC-001 — `/apt:spar` pipeline integration with install-time consent
|
|
280
|
+
|
|
281
|
+
Minor patch release. Flips `/apt:spar` from manual-only (SPAR-07 v1) to
|
|
282
|
+
pipeline-integrated under explicit install-time consent. Adds a per-device
|
|
283
|
+
opt-in question to `/apt:setup` Batch 2 Pipeline; wires `/apt:run` and the
|
|
284
|
+
`/apt` router to honor it with track-aware gates (QUICK rejects, STANDARD
|
|
285
|
+
= `plan` gate, DEEP = `plan,execute` gates); updates SPAR-07 wording.
|
|
286
|
+
Per-invocation `--spar-gates` flag remains as the manual override path;
|
|
287
|
+
rounds always defer to the skill default to avoid reintroducing
|
|
288
|
+
FRAMEWORK-BUG-038.
|
|
289
|
+
|
|
290
|
+
### What
|
|
291
|
+
|
|
292
|
+
- **`SparConfig` schema delta** — three per-device fields land in
|
|
293
|
+
`.aperant/config.local.json` per AUDIT-001: `spar.enabled: boolean`,
|
|
294
|
+
`spar.partner: 'codex' | 'claude' | 'gemini' | null`, `spar.hint?: boolean`.
|
|
295
|
+
Added to `packages/framework/src/types/config.ts` as
|
|
296
|
+
`AperantConfig.spar?: SparConfig`. No migration path needed — spar lands
|
|
297
|
+
in `config.local.json` from day one with no shared-config legacy.
|
|
298
|
+
|
|
299
|
+
- **`apt-setup` Sparring Auto-Fire (Batch 2)** — 3-phase question block
|
|
300
|
+
inserted after PR Review Auto-Suggest:
|
|
301
|
+
- Phase 1 (Yes/No): master switch.
|
|
302
|
+
- Phase 2 (partner picker, only if Yes): reads
|
|
303
|
+
`host.partner_transports.{codex,claude,gemini}` from
|
|
304
|
+
`apt-tools host-detect` to filter by availability, AND excludes
|
|
305
|
+
`host.cli` (Open Q1 same-host filter). Graceful skip with
|
|
306
|
+
`spar.enabled: true, spar.partner: null` when zero partners detected.
|
|
307
|
+
- Phase 3 (hint sub-picker, only if No): opt-in to per-stage reminder
|
|
308
|
+
`[apt] {stage} complete. /apt:spar available before next stage.`
|
|
309
|
+
All three fields route through `writeLocalConfigField` per AUDIT-001.
|
|
310
|
+
|
|
311
|
+
- **`apt-run` flag + gate handlers** —
|
|
312
|
+
- `--spar-gates <plan|execute|plan,execute>` flag (per-invocation
|
|
313
|
+
override of merged-config consent). QUICK hard-rejects with verbatim
|
|
314
|
+
`[apt:run] --spar-gates ignored for QUICK track (Fast Path Guarantee)`.
|
|
315
|
+
- §3b "Stage 1.5 — Spar Gate (plan)": resolves effective gates, composes
|
|
316
|
+
topic frame from spec.md §Scope (task description fallback per
|
|
317
|
+
Open Q4), dispatches `/apt:spar --timeout-ms 120000 [--with <partner>]`
|
|
318
|
+
with NO `--rounds` flag (FRAMEWORK-BUG-038 regression guard).
|
|
319
|
+
- §4b "Stage 2.5 — Spar Gate (execute)": same logic, gate name
|
|
320
|
+
`"execute"`, topic frame from `build-progress.json`.
|
|
321
|
+
- Pipeline-mode `--timeout-ms 120000` (2-min Bash-rung fast-fail) is
|
|
322
|
+
asymmetric with manual mode (5min/15min defaults). Worst-case DEEP
|
|
323
|
+
wall budget: 2 gates × 3 rounds × 2 min = 12 min (vs ~90 min before
|
|
324
|
+
this clamp under MCP-rung partner degradation).
|
|
325
|
+
- §5 Verify spawn context: verifier reads Layer 2 spar findings
|
|
326
|
+
(`.aperant/spar/<slug>-<ts>.md`) before scoring.
|
|
327
|
+
- Per-stage `spar.hint` nudge at each of plan/execute/verify/review
|
|
328
|
+
Output: anchors (4 conditional prints, gated on
|
|
329
|
+
`spar.hint === true && spar.enabled === false`).
|
|
330
|
+
|
|
331
|
+
- **`apt` router envelope contract (load-bearing AC11)** — `route.mjs`
|
|
332
|
+
emits two deterministic consent fields:
|
|
333
|
+
- `envelope.spar_inject_gates` (flag-override path): pre-computed gate
|
|
334
|
+
string `"plan"` (STANDARD) or `"plan,execute"` (DEEP) when consent on
|
|
335
|
+
AND user did NOT pass explicit `--spar-gates`. Absent for QUICK/DEBUG.
|
|
336
|
+
- `envelope.spar_consent` (host-LLM path): block
|
|
337
|
+
`{ enabled, partner, user_passed_explicit_gates }` when consent on.
|
|
338
|
+
Host model composes `--spar-gates` from spar_consent + chosen track.
|
|
339
|
+
Both fields ABSENT when consent off — envelope byte-equivalent to
|
|
340
|
+
pre-RFC shape for users who never opted in. `apt/SKILL.md` MODE: classify
|
|
341
|
+
Step 4 reads ONLY the envelope (never re-reads merged config from
|
|
342
|
+
prompt-space) — structural test grep-locks this invariant.
|
|
343
|
+
|
|
344
|
+
- **`apt-plan` + `apt-execute` `--spar` flags** — end-of-process dispatch
|
|
345
|
+
to `/apt:spar` against local artifacts (spec.md / build-progress.json).
|
|
346
|
+
Same `--timeout-ms 120000` + no-rounds discipline. Per-skill manual
|
|
347
|
+
surface for users who don't use `/apt:run` end-to-end.
|
|
348
|
+
|
|
349
|
+
- **`apt-spar/SKILL.md` SPAR-07 wording** — updated from v1
|
|
350
|
+
"manually invoked only" to v2 "honors install-time consent". §1-§9
|
|
351
|
+
process body is byte-equivalent to pre-edit baseline (sha256
|
|
352
|
+
9c2852ce…7da7b3 preserved by `apt-spar-pipeline-manual-path-preserved.test.ts`
|
|
353
|
+
hash guard). Manual `/apt:spar` invocation path UNCHANGED.
|
|
354
|
+
|
|
355
|
+
### Why
|
|
356
|
+
|
|
357
|
+
Founder usage data confirmed that cross-provider sparring surfaces
|
|
358
|
+
blind-spot defects that single-provider review misses. SPAR-07's v1
|
|
359
|
+
escape hatch was always deferred-pending-data; the data is in. Pipeline
|
|
360
|
+
integration removes the per-task `--spar-gates` flag drudgery while
|
|
361
|
+
preserving QUICK Fast Path Guarantee + manual override surfaces.
|
|
362
|
+
|
|
363
|
+
### Compatibility
|
|
364
|
+
|
|
365
|
+
- Backward-compatible. Users who never opt in to `spar.enabled: true`
|
|
366
|
+
see identical behavior to 0.8.2 — envelope shape byte-equivalent,
|
|
367
|
+
apt-run pipeline unchanged.
|
|
368
|
+
- Manual `/apt:spar` invocation path BYTE-EQUIVALENT (process body
|
|
369
|
+
hash-locked).
|
|
370
|
+
- `--spar-gates` flag is opt-in per-invocation. QUICK hard-rejects.
|
|
371
|
+
- Migration: no path needed. Spar lands in `config.local.json` from day
|
|
372
|
+
one; no shared-config legacy.
|
|
373
|
+
|
|
374
|
+
### Out of scope (follow-up RFC-001-b candidates)
|
|
375
|
+
|
|
376
|
+
- Verify-stage spar gate (deferred — verify already iterates fix-and-retry).
|
|
377
|
+
- Pre-ship spar gate (likely redundant with `/apt:pr-review`).
|
|
378
|
+
- Multi-partner concurrent spar (use `/apt:roundtable` for 10-agent).
|
|
379
|
+
- Re-plan-on-spar-cede behavioral feedback loop.
|
|
380
|
+
- `--mcp-timeout-ms` per-invocation flag on `apt-spar` (Open Q5 —
|
|
381
|
+
MCP-rung pipeline tightening). Today MCP rung is config-only at
|
|
382
|
+
`apt-spar.mcp_timeout_ms`; pipeline mode accepts the asymmetry.
|
|
383
|
+
|
|
384
|
+
### Version
|
|
385
|
+
|
|
386
|
+
- `packages/framework/package.json`: 0.8.2 → 0.8.3
|
|
387
|
+
|
|
388
|
+
### Commits
|
|
389
|
+
|
|
390
|
+
- `4d67ca1d` feat(framework): add SparConfig schema for RFC-001 pipeline consent
|
|
391
|
+
- `e301b776` feat(framework): apt-setup Sparring Auto-Fire prompt (RFC-001 install-time consent)
|
|
392
|
+
- `20dea366` feat(framework): update SPAR-07 wording to v2 install-time consent contract
|
|
393
|
+
- `3f9ef384` feat(framework): apt-run --spar-gates flag parsing + QUICK hard-reject
|
|
394
|
+
- `be06429a` feat(framework): apt-run §3b + §4b spar-gate handlers
|
|
395
|
+
- `36c7702d` feat(framework): emit spar_inject_gates + spar_consent envelope fields
|
|
396
|
+
- `d803f8c5` feat(framework): apt router consent-driven --spar-gates auto-inject
|
|
397
|
+
- `726ae3f5` feat(framework): apt-plan + apt-execute --spar per-skill flag
|
|
398
|
+
- `e796580e` feat(framework): apt-run spar.hint nudge at stage success-ends
|
|
399
|
+
|
|
400
|
+
## 0.8.2 — 2026-05-21 — Codex skill-discovery regression fix
|
|
401
|
+
|
|
402
|
+
Codex skill-discovery regression fix — install now writes to the
|
|
403
|
+
documented `.agents/skills/<folder>/SKILL.md` surface.
|
|
404
|
+
|
|
405
|
+
### Fixed
|
|
406
|
+
|
|
407
|
+
- Codex `installRoot` re-targeted from `.codex` to `.agents` so SKILL.md
|
|
408
|
+
lands at `<targetDir>/.agents/skills/<folder>/SKILL.md` per
|
|
409
|
+
https://developers.openai.com/codex/skills. The previous v0.7/v0.8
|
|
410
|
+
`.codex/agents/` + `.codex/commands/` topology was a dead surface
|
|
411
|
+
(Codex CLI 0.132.0 doesn't discover skills there) and a fresh
|
|
412
|
+
`apt-tools init . --codex` reported 95 files installed while
|
|
413
|
+
`codex debug prompt-input` listed zero apt-* skills.
|
|
414
|
+
- Codex frontmatter strip switched from a 2-key blacklist
|
|
415
|
+
(`['tools', 'color']`) to an allowed_properties whitelist
|
|
416
|
+
(`KEEP = ['name', 'description']`), matching
|
|
417
|
+
`~/.codex/skills/.system/skill-creator/scripts/quick_validate.py:40`
|
|
418
|
+
and the working third-party skill examples. Drift-proof: any new
|
|
419
|
+
framework frontmatter key is dropped from Codex output without
|
|
420
|
+
breaking the validator.
|
|
421
|
+
- Codex transform now emits a single output (`skills/<folder>/SKILL.md`)
|
|
422
|
+
per canonical skill. The previous two-output emission
|
|
423
|
+
(`agents/<folder>.md` + `commands/<folder>.md`) is dropped along with
|
|
424
|
+
the `fileType === 'agent'` branch (markdown agents are not a Codex
|
|
425
|
+
surface; Codex custom-agents are TOML under `.codex/agents/`).
|
|
426
|
+
- `runLegacyCleanup` now GCs the v0.7/v0.8 `.codex/agents/apt-*.md` +
|
|
427
|
+
`.codex/commands/apt-*.md` + `.codex/apt-file-manifest.json` misdirect
|
|
428
|
+
on the next `apt-tools init . --codex`. `.codex/config.toml` and any
|
|
429
|
+
user-added `.codex/` content is preserved.
|
|
430
|
+
|
|
431
|
+
### Changed
|
|
432
|
+
|
|
433
|
+
- `getTrustedSkillSources` now skips the Codex install root in the
|
|
434
|
+
per-cli filter (`cli !== 'codex'` guard). Keeps
|
|
435
|
+
`.aperant/logs/route-dropped.jsonl` clean for router invocations on
|
|
436
|
+
Codex hosts — Codex's stripped frontmatter would otherwise fail
|
|
437
|
+
`SkillFrontmatterSchema`. Canonical + kernel roots still serve
|
|
438
|
+
routing.
|
|
439
|
+
- `LEGACY_INSTALL_PATHS` schema gains a `honor_manifest?: boolean`
|
|
440
|
+
field (default `true`). When `false`, a present
|
|
441
|
+
`apt-file-manifest.json` at the legacy root does NOT trigger the
|
|
442
|
+
managed-no-op — used for known-dead surfaces like the v0.7/v0.8
|
|
443
|
+
codex misdirect. Existing legacy entries are unaffected (default true
|
|
444
|
+
preserves the managed-install safety).
|
|
445
|
+
|
|
446
|
+
### Version
|
|
447
|
+
|
|
448
|
+
- `packages/framework/package.json`: 0.8.1 → 0.8.2
|
|
7
449
|
|
|
8
450
|
## 0.8.1 — 2026-05-20 — Pi runtime + idempotent re-init repair
|
|
9
451
|
|
package/agents/apt-planner.md
CHANGED
|
@@ -32,7 +32,8 @@ Before planning, discover project context:
|
|
|
32
32
|
<environment>
|
|
33
33
|
- **Working directory:** The project root
|
|
34
34
|
- **apt-tools:** Always invoke as `node packages/framework/bin/apt-tools.mjs`
|
|
35
|
-
- **Task directory:** Provided in the spawn prompt as `task_dir`. ALL artifacts (spec.md, implementation_plan.json) are written here, NOT to project root.
|
|
35
|
+
- **Task directory:** Provided in the spawn prompt as `task_dir`. It MUST be an absolute path under the main repo's `.aperant/tasks/{task-id}/`. ALL artifacts (spec.md, implementation_plan.json) are written here, NOT to project root and NOT to a worktree-local `.aperant/tasks/` directory.
|
|
36
|
+
- **Worktree path:** If provided, use it only for code investigation/editing context. Do not derive artifact paths from it.
|
|
36
37
|
- **Config:** `.aperant/config.json` — project preferences
|
|
37
38
|
- **State:** `.aperant/state.json` — execution state
|
|
38
39
|
</environment>
|
|
@@ -43,7 +44,7 @@ Before planning, discover project context:
|
|
|
43
44
|
|
|
44
45
|
1. Read `CLAUDE.md` and `AGENTS.md` if they exist — extract conventions, stack, constraints
|
|
45
46
|
2. Run `node packages/framework/bin/apt-tools.mjs state .` to understand current project state
|
|
46
|
-
3. Parse the task description and task_dir from the spawn prompt
|
|
47
|
+
3. Parse the task description and task_dir from the spawn prompt. If task_dir is relative, resolve the real main repo path first instead of writing under the current worktree.
|
|
47
48
|
|
|
48
49
|
## 2. Assess Complexity
|
|
49
50
|
|
|
@@ -211,7 +212,7 @@ If unable to enumerate (network unavailable, action docs unclear), flag it expli
|
|
|
211
212
|
|
|
212
213
|
## 4. Write Specification
|
|
213
214
|
|
|
214
|
-
The spec.md content format **branches on track** (
|
|
215
|
+
The spec.md content format **branches on track** (ID-05,
|
|
215
216
|
Fast Path Guarantee). QUICK-routed tasks keep the existing 4-section
|
|
216
217
|
shape; STANDARD/DEEP/COMPLEX tasks get a PRD-shaped artifact that
|
|
217
218
|
survives the task as a second-consumer document.
|
|
@@ -239,6 +240,11 @@ survives the task as a second-consumer document.
|
|
|
239
240
|
|
|
240
241
|
### 4.B. STANDARD / DEEP / COMPLEX — PRD-shaped spec.md
|
|
241
242
|
|
|
243
|
+
**Three orthogonal user-facing sections — keep them distinct.** User
|
|
244
|
+
Stories (motivation prose), User Outcomes (verify-proof input contract),
|
|
245
|
+
and Acceptance Criteria (code-level invariants) serve distinct
|
|
246
|
+
purposes. Do NOT collapse them — STANDARD/DEEP specs carry all three.
|
|
247
|
+
|
|
242
248
|
```markdown
|
|
243
249
|
# Spec: {task title}
|
|
244
250
|
|
|
@@ -256,6 +262,22 @@ survives the task as a second-consumer document.
|
|
|
256
262
|
{One **US-NN (persona).** story per user-value slice. Stories map 1:1
|
|
257
263
|
onto subtasks in implementation_plan.json.}
|
|
258
264
|
|
|
265
|
+
## User Outcomes
|
|
266
|
+
{Verify-proof input contract. One bolded `**Epic:**` headline + N
|
|
267
|
+
atomic outcomes. Authors write the LITERAL string `**ON**` — IDs are
|
|
268
|
+
POSITIONAL and synthesized by the parser (first row becomes O1, second
|
|
269
|
+
O2, ...). Closed surface set: `electron | web | cli | api | electron+web`.
|
|
270
|
+
Optional cross-refs via `*(requires ON N)*`. Refactor-only specs MAY
|
|
271
|
+
use the empty-with-note escape (verbatim string,
|
|
272
|
+
italic underscores + em dash + period required):}
|
|
273
|
+
|
|
274
|
+
`_No user-observable changes — pure refactor._`
|
|
275
|
+
|
|
276
|
+
**Epic:** {one-sentence user-facing capability headline}
|
|
277
|
+
|
|
278
|
+
- **ON** [surface]: {user does X; system shows/does Y}
|
|
279
|
+
- **ON** [surface]: {user does X; system shows/does Y} *(requires ON 1)*
|
|
280
|
+
|
|
259
281
|
## Implementation Decisions
|
|
260
282
|
{Load-bearing principles carried into every subtask. Format:
|
|
261
283
|
"### ID-NN: {title}" + rationale + practical consequence.}
|
|
@@ -278,9 +300,19 @@ reference these IDs via the per-subtask `acceptance_criteria` field.}
|
|
|
278
300
|
```
|
|
279
301
|
|
|
280
302
|
**PRD section ordering is load-bearing.** `apt-tools coverage-check
|
|
281
|
-
validate` greps `## Acceptance Criteria
|
|
282
|
-
greps `## Solution` and `## User Stories`.
|
|
283
|
-
sections breaks downstream tooling and the
|
|
303
|
+
validate` greps `## Acceptance Criteria` AND `## User Outcomes`;
|
|
304
|
+
`apt-tools consistency check` greps `## Solution` and `## User Stories`.
|
|
305
|
+
Renaming or reordering these sections breaks downstream tooling and the
|
|
306
|
+
C15 consistency rules.
|
|
307
|
+
|
|
308
|
+
**`## User Outcomes` synthesis directive.** Outcomes are
|
|
309
|
+
user-observable (a user does X; the system shows/does Y); Acceptance
|
|
310
|
+
Criteria are code-level invariants (a function returns X; a config key
|
|
311
|
+
exists). Do NOT collapse them — they parse through different gates and
|
|
312
|
+
serve different consumers. STANDARD/DEEP specs carry both sections in
|
|
313
|
+
parallel. IDs are POSITIONAL: the parser counts outcome rows in
|
|
314
|
+
document order and synthesizes `O1`, `O2`, ... — authors MUST write
|
|
315
|
+
the literal `**ON**` token, never `**O1**`/`**O2**`.
|
|
284
316
|
|
|
285
317
|
**Do NOT interview the user.** The PRD is synthesized from the task
|
|
286
318
|
description + codebase investigation + AGENTS.md, not from a clarifying
|
|
@@ -344,7 +376,7 @@ fix it now, not later.
|
|
|
344
376
|
|
|
345
377
|
## 5. Create Implementation Plan
|
|
346
378
|
|
|
347
|
-
Subtask schema branches on track
|
|
379
|
+
Subtask schema branches on track.
|
|
348
380
|
|
|
349
381
|
### 5.A. QUICK track / SIMPLE complexity — legacy flat subtask schema
|
|
350
382
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {string} projectDir
|
|
3
|
+
* @param {string[]} extraArgs
|
|
4
|
+
*/
|
|
5
|
+
export function auditBranchCurrent(projectDir: string, extraArgs?: string[]): import("../util/result.mjs").CommandResult;
|
|
6
|
+
export { parseConflictPaths as __parseConflictPathsForTests };
|
|
7
|
+
/**
|
|
8
|
+
* Parse `git merge-tree --write-tree --no-messages HEAD origin/<base>` output
|
|
9
|
+
* for conflict file paths. Modern (git ≥ 2.38) merge-tree emits, on conflict:
|
|
10
|
+
*
|
|
11
|
+
* <tree-OID>
|
|
12
|
+
* <conflict report lines, each "<mode> <stage> <oid>\t<path>" for stage > 0>
|
|
13
|
+
* (NUL separator)
|
|
14
|
+
* <textual conflict messages>
|
|
15
|
+
*
|
|
16
|
+
* Older variants emit a `+<<<<<<< ... +======= ... +>>>>>>>` diff per file.
|
|
17
|
+
* For correctness we use the stable form: extract file paths from the conflict
|
|
18
|
+
* report. The report includes the SAME path multiple times (once per non-zero
|
|
19
|
+
* stage), so we de-dupe.
|
|
20
|
+
*
|
|
21
|
+
* @param {string} stdout
|
|
22
|
+
* @returns {string[]}
|
|
23
|
+
*/
|
|
24
|
+
declare function parseConflictPaths(stdout: string): string[];
|
|
25
|
+
//# sourceMappingURL=audit-branch-current.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-branch-current.d.mts","sourceRoot":"","sources":["../../../src/cli/commands/audit-branch-current.mjs"],"names":[],"mappings":"AAmIA;;;GAGG;AACH,+CAHW,MAAM,cACN,MAAM,EAAE,8CAgHlB;;AAtKD;;;;;;;;;;;;;;;;GAgBG;AACH,4CAHW,MAAM,GACJ,MAAM,EAAE,CAsBpB"}
|