@jaimevalasek/aioson 1.9.1 → 1.9.3
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 +18 -0
- package/package.json +1 -1
- package/src/commands/update.js +2 -0
- package/src/gateway-pointer-merge.js +3 -1
- package/src/parser.js +1 -0
- package/src/updater.js +7 -3
- package/template/.aioson/agents/manifests/pm.manifest.json +2 -1
- package/template/.aioson/agents/orchestrator.md +4 -3
- package/template/.aioson/agents/pm.md +58 -6
- package/template/.aioson/skills/process/aioson-spec-driven/references/artifact-map.md +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -33,6 +33,24 @@ All notable changes to this project will be documented in this file.
|
|
|
33
33
|
- Safe canonical English agent sources restored after i18n decoupling.
|
|
34
34
|
- Accidentally tracked local directories removed from git tracking.
|
|
35
35
|
|
|
36
|
+
## [1.9.3] - 2026-05-19
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
- **`@pm` agent prompt in template** now correctly declares ownership of `implementation-plan-{slug}.md` for MEDIUM features (AC-SDLC-15), completing the SDLC migration started in v1.9.0 (commit `981a8fd`). Projects on 1.9.0/1/2 hit a deadlock at Gate C when running MEDIUM features via the standard chain: `/architect` routed users to `/pm`, but the legacy template prompt instructed `/pm` to NOT silently create the artifact. The workspace prompt had been updated in `981a8fd` but the template, alignment test, and a docs file were never propagated.
|
|
40
|
+
- **`tests/agent-runtime-alignment.test.js`** updated to assert the new canonical tokens (`## MEDIUM implementation plan (mandatory output for MEDIUM)`, `For MEDIUM features, @pm MUST produce implementation-plan-{slug}.md`, `## Non-MEDIUM handoff reality`, gate-approve command). The previous assertions were guarding the pre-`981a8fd` contract.
|
|
41
|
+
- **`template/.aioson/agents/manifests/pm.manifest.json`** `capabilities[0].outputs[]` now declares `.aioson/context/implementation-plan-{slug}.md` as a canonical produce of `@pm`. Test alignment also asserts this. Source manifest synced for parity.
|
|
42
|
+
- **`template/.aioson/skills/process/aioson-spec-driven/references/artifact-map.md`** ownership table corrected: `implementation-plan-{slug}.md` written by `@pm` for MEDIUM (AC-SDLC-15) instead of `@dev`, and read by `@dev, @deyvin, @orchestrator`. Also corrected the chain description (line 14).
|
|
43
|
+
- **`template/.aioson/agents/orchestrator.md`** propagated from workspace — uses feature-scoped artifact naming (`requirements-{slug}.md`, `spec-{slug}.md`, `implementation-plan-{slug}.md`, `ui-spec-{slug}.md`) matching the post-`981a8fd` contract. Previously template still used legacy generic names.
|
|
44
|
+
|
|
45
|
+
### Notes
|
|
46
|
+
- **Rollback:** `npm install @jaimevalasek/aioson@1.9.2` (or pin in your project's `package.json`) restores the previous behavior. Use only as last resort — the previous state had `@pm` deadlock at Gate C for MEDIUM features.
|
|
47
|
+
- **Affected:** any project installed from 1.9.0/1/2 running MEDIUM features through the standard chain (`/product → /analyst → /architect → /pm`).
|
|
48
|
+
- **How to verify the fix in your project:** after `aioson update`, run a MEDIUM feature through the chain. `/pm` should produce `implementation-plan-{slug}.md` without refusing. `aioson workflow:status` should advance through Gate C.
|
|
49
|
+
- **Follow-ups intentionally NOT included in this hotfix** (will be in a separate MEDIUM PRD, `prd-workflow-handoff-integrity.md`):
|
|
50
|
+
- `briefing.md` / `discover.md` template drift (one-line addition about `done/MANIFEST.md` awareness — benign but not tied to a documented plan).
|
|
51
|
+
- F1 (stale `dev-state.md` cleanup), F2 (workflow pointer auto-emission), F3 (analyst routing checks), T5 (CI guard for semantic drift), T6 (smoke test pre-publish).
|
|
52
|
+
- **Audit trail for this hotfix:** see PR description, briefing `.aioson/briefings/workflow-handoff-integrity-1-9-2/briefings.md`, PRD `.aioson/context/prd-workflow-hotfix-1-9-3.md`.
|
|
53
|
+
|
|
36
54
|
## [1.7.3] - 2026-04-13
|
|
37
55
|
### Fixed
|
|
38
56
|
- `@dev` pt-BR locale pack realigned with the canonical prompt flow, restoring the proper cold-start fallback when `dev-state.md` is already `done` and another feature is still `in_progress` in `features.md`.
|
package/package.json
CHANGED
package/src/commands/update.js
CHANGED
|
@@ -10,12 +10,14 @@ async function runUpdate({ args, options, logger, t }) {
|
|
|
10
10
|
const targetDir = path.resolve(process.cwd(), args[0] || '.');
|
|
11
11
|
const dryRun = Boolean(options['dry-run']);
|
|
12
12
|
const all = Boolean(options.all);
|
|
13
|
+
const selective = Boolean(options.selective);
|
|
13
14
|
const requestedLanguage = options.lang || options.language;
|
|
14
15
|
|
|
15
16
|
const detection = await detectFramework(targetDir);
|
|
16
17
|
const result = await updateInstallation(targetDir, {
|
|
17
18
|
dryRun,
|
|
18
19
|
all,
|
|
20
|
+
selective,
|
|
19
21
|
frameworkDetection: detection.framework
|
|
20
22
|
});
|
|
21
23
|
|
|
@@ -14,6 +14,7 @@ const { exists, copyFileWithDir, toRelativeSafe } = require('./utils');
|
|
|
14
14
|
|
|
15
15
|
const MARKER_BEGIN = '<!-- AIOSON:BEGIN -->';
|
|
16
16
|
const MARKER_END = '<!-- AIOSON:END -->';
|
|
17
|
+
const BLOCK_NOTICE = '> Managed by AIOSON — edits inside this block will be overwritten on `aioson update`. Put project-specific rules above or below this block.';
|
|
17
18
|
|
|
18
19
|
const GATEWAY_POINTER_FILES = new Set([
|
|
19
20
|
'CLAUDE.md',
|
|
@@ -28,7 +29,7 @@ function isGatewayPointerPath(rel) {
|
|
|
28
29
|
|
|
29
30
|
function buildBlock(templateContent) {
|
|
30
31
|
const body = templateContent.endsWith('\n') ? templateContent : `${templateContent}\n`;
|
|
31
|
-
return `${MARKER_BEGIN}\n${body}${MARKER_END}\n`;
|
|
32
|
+
return `${MARKER_BEGIN}\n${BLOCK_NOTICE}\n\n${body}${MARKER_END}\n`;
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
function findBlockRange(content) {
|
|
@@ -93,6 +94,7 @@ async function mergeGatewayPointer({ templatePath, targetPath, backupRoot, targe
|
|
|
93
94
|
module.exports = {
|
|
94
95
|
MARKER_BEGIN,
|
|
95
96
|
MARKER_END,
|
|
97
|
+
BLOCK_NOTICE,
|
|
96
98
|
GATEWAY_POINTER_FILES,
|
|
97
99
|
isGatewayPointerPath,
|
|
98
100
|
buildBlock,
|
package/src/parser.js
CHANGED
|
@@ -30,6 +30,7 @@ function parseArgv(argv) {
|
|
|
30
30
|
'help', 'version', 'no-launch', 'attach', 'tmux',
|
|
31
31
|
'allow-warnings', 'install-hook', 'uninstall-hook', 'remove-hook',
|
|
32
32
|
'agent-safe',
|
|
33
|
+
'selective',
|
|
33
34
|
'status', 'suggest', 'apply',
|
|
34
35
|
// `--resume` alone means "resume last"; `--resume=<id>` carries a value
|
|
35
36
|
// and is handled by the `=` branch above. Without this entry, `--resume`
|
package/src/updater.js
CHANGED
|
@@ -16,8 +16,12 @@ async function updateInstallation(targetDir, options = {}) {
|
|
|
16
16
|
|
|
17
17
|
const savedProfile = await readInstallProfile(targetDir);
|
|
18
18
|
|
|
19
|
-
// Default:
|
|
20
|
-
//
|
|
19
|
+
// Default: sync everything from the template, including files added by the
|
|
20
|
+
// release that aren't yet in the target. Pre-1.9.2 this defaulted to
|
|
21
|
+
// selective and silently dropped new agents/slash commands between versions.
|
|
22
|
+
// `--selective` restores the legacy conservative mode; `--all` is accepted
|
|
23
|
+
// as a backwards-compat no-op since "all" is now the default.
|
|
24
|
+
const selective = Boolean(options.selective) && !options.all;
|
|
21
25
|
const result = await installTemplate(targetDir, {
|
|
22
26
|
overwrite: true,
|
|
23
27
|
dryRun: Boolean(options.dryRun),
|
|
@@ -25,7 +29,7 @@ async function updateInstallation(targetDir, options = {}) {
|
|
|
25
29
|
backupOnOverwrite: true,
|
|
26
30
|
frameworkDetection: options.frameworkDetection || null,
|
|
27
31
|
installProfile: savedProfile,
|
|
28
|
-
selectiveUpdate:
|
|
32
|
+
selectiveUpdate: selective
|
|
29
33
|
});
|
|
30
34
|
|
|
31
35
|
// Post-install migrations. Best-effort: a migration failure must not break
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
],
|
|
16
16
|
"outputs": [
|
|
17
17
|
{ "type": "artifact", "path_pattern": ".aioson/context/prd.md" },
|
|
18
|
-
{ "type": "artifact", "path_pattern": ".aioson/context/prd-{slug}.md" }
|
|
18
|
+
{ "type": "artifact", "path_pattern": ".aioson/context/prd-{slug}.md" },
|
|
19
|
+
{ "type": "artifact", "path_pattern": ".aioson/context/implementation-plan-{slug}.md" }
|
|
19
20
|
]
|
|
20
21
|
}
|
|
21
22
|
],
|
|
@@ -8,11 +8,12 @@ Orchestrate parallel execution only for MEDIUM projects. Never activate for MICR
|
|
|
8
8
|
|
|
9
9
|
## Required input
|
|
10
10
|
- `.aioson/context/project.context.md`
|
|
11
|
-
- `.aioson/context/
|
|
11
|
+
- `.aioson/context/requirements-{slug}.md` — read the full body, not only frontmatter (Gate A artifact; defines what each lane must implement)
|
|
12
|
+
- `.aioson/context/spec-{slug}.md` — read the full body (living feature memory; has gate status, decisions, and lane context)
|
|
12
13
|
- `.aioson/context/architecture.md`
|
|
13
14
|
- `.aioson/context/prd.md` or `prd-{slug}.md`
|
|
14
|
-
- `.aioson/context/
|
|
15
|
-
- `.aioson/context/
|
|
15
|
+
- `.aioson/context/implementation-plan-{slug}.md` when present (Gate C; defines execution phases for lane assignment)
|
|
16
|
+
- `.aioson/context/ui-spec-{slug}.md` when present
|
|
16
17
|
- `.aioson/context/parallel/` when resuming an existing orchestration session
|
|
17
18
|
|
|
18
19
|
## Skills and docs on demand
|
|
@@ -26,8 +26,9 @@ Loaded rules, design docs, and design governance override the default convention
|
|
|
26
26
|
Maximum 2 pages. If it exceeds that, you are doing more than necessary. Cut ruthlessly.
|
|
27
27
|
|
|
28
28
|
## When to use
|
|
29
|
-
- **MEDIUM** projects: required, runs after `@architect` and `@ux-ui`.
|
|
30
|
-
- **
|
|
29
|
+
- **MEDIUM** projects: required, runs after `@architect` and `@ux-ui`. `@pm` is the canonical owner of the initial `implementation-plan-{slug}.md`.
|
|
30
|
+
- **SMALL** projects: optional — activate if user explicitly asks for delivery planning.
|
|
31
|
+
- **MICRO** projects: skip — `@dev` reads context and architecture directly. Do not produce an implementation plan for MICRO.
|
|
31
32
|
|
|
32
33
|
## Required input
|
|
33
34
|
- `.aioson/context/project.context.md`
|
|
@@ -68,11 +69,62 @@ For existing codebases:
|
|
|
68
69
|
- `discovery.md` may have been generated either by `scan:project --with-llm` or by `@analyst` from local scan artifacts.
|
|
69
70
|
- If `discovery.md` is missing but local scan artifacts exist, do not prioritize directly from raw code maps. Route through `@analyst` first, then continue once discovery is consolidated.
|
|
70
71
|
|
|
71
|
-
##
|
|
72
|
+
## MEDIUM implementation plan (mandatory output for MEDIUM)
|
|
72
73
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
For MEDIUM features, `@pm` MUST produce `implementation-plan-{slug}.md` in `.aioson/context/`. This is Gate C.
|
|
75
|
+
|
|
76
|
+
Structure:
|
|
77
|
+
```markdown
|
|
78
|
+
---
|
|
79
|
+
feature: {slug}
|
|
80
|
+
status: approved
|
|
81
|
+
created_by: pm
|
|
82
|
+
created_at: {ISO date}
|
|
83
|
+
classification: MEDIUM
|
|
84
|
+
gate: C
|
|
85
|
+
gate_status: approved
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
# Implementation Plan — {Feature Name}
|
|
89
|
+
|
|
90
|
+
## Gate C Summary
|
|
91
|
+
[Why Gate C is approved — prerequisites satisfied]
|
|
92
|
+
|
|
93
|
+
## Required Context Package
|
|
94
|
+
[Ordered list of files @dev must read]
|
|
95
|
+
|
|
96
|
+
## Pre-Taken Decisions
|
|
97
|
+
[Decisions already made — @dev does not re-discuss these]
|
|
98
|
+
|
|
99
|
+
## Execution Sequence
|
|
100
|
+
| Phase | Scope | Primary files | Done criteria |
|
|
101
|
+
|---|---|---|---|
|
|
102
|
+
| 1 | ... | ... | ... |
|
|
103
|
+
|
|
104
|
+
## Checkpoints
|
|
105
|
+
[After each phase, what @dev must update]
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
After writing the plan, always close Gate C:
|
|
109
|
+
```
|
|
110
|
+
aioson gate:approve . --feature={slug} --gate=C
|
|
111
|
+
```
|
|
112
|
+
Or manually set `gate_plan: approved` in `spec-{slug}.md`.
|
|
113
|
+
|
|
114
|
+
**Handoff:**
|
|
115
|
+
```
|
|
116
|
+
Implementation plan written: .aioson/context/implementation-plan-{slug}.md
|
|
117
|
+
Gate C: approved
|
|
118
|
+
Next agent: @orchestrator (MEDIUM) or @dev (SMALL, user confirmed)
|
|
119
|
+
Action: /orchestrator or /dev
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Non-MEDIUM handoff reality
|
|
123
|
+
|
|
124
|
+
For non-MEDIUM projects or when the user activates `@pm` for enrichment only:
|
|
125
|
+
- Enrich the existing PRD in place.
|
|
126
|
+
- Do not produce `implementation-plan-{slug}.md` unless explicitly requested.
|
|
127
|
+
- If the feature is MEDIUM and missing a plan, inform the user and offer to produce it.
|
|
76
128
|
|
|
77
129
|
## Output contract
|
|
78
130
|
Update the same PRD file you read (`prd.md` or `prd-{slug}.md`) in place. Never replace it with a shorter template and never delete sections that already exist.
|
|
@@ -11,7 +11,7 @@ prd*.md
|
|
|
11
11
|
→ spec-{slug}.md (feature memory — @analyst seeds, @dev fills)
|
|
12
12
|
→ architecture.md (tech decisions — @architect)
|
|
13
13
|
→ design-doc*.md (scope-specific decisions — @architect)
|
|
14
|
-
→ implementation-plan-{slug}.md (execution sequence — @
|
|
14
|
+
→ implementation-plan-{slug}.md (execution sequence — @pm for MEDIUM, AC-SDLC-15)
|
|
15
15
|
→ spec-{slug}.md (updated) (living state during execution — @dev)
|
|
16
16
|
```
|
|
17
17
|
|
|
@@ -28,7 +28,7 @@ prd*.md
|
|
|
28
28
|
| `spec.md` | @dev | @dev | @dev, @deyvin |
|
|
29
29
|
| `architecture.md` | @architect | — | @dev, @ux-ui |
|
|
30
30
|
| `design-doc*.md` | @architect | — | @dev, @ux-ui |
|
|
31
|
-
| `implementation-plan-{slug}.md` | @
|
|
31
|
+
| `implementation-plan-{slug}.md` | @pm (MEDIUM, AC-SDLC-15) | — | @dev, @deyvin, @orchestrator |
|
|
32
32
|
|
|
33
33
|
## Naming conventions
|
|
34
34
|
|