@rasensio/aidlc-content 1.65.0 → 1.67.0
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/agents/aidlc-reviewer.md +46 -0
- package/capabilities/codex.yaml +10 -0
- package/dist/agents.d.ts +12 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +48 -0
- package/dist/agents.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +15 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/roadmap.md +16 -0
- package/docs/skills-and-platforms.md +29 -7
- package/package.json +2 -1
- package/resources/rules/task-agents.md +6 -6
- package/skills/04-roadmap.md +1 -1
- package/skills/80-review.md +13 -2
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aidlc-reviewer
|
|
3
|
+
description: Reviews AIDLC lifecycle artifacts and task diffs from a fresh context and cannot change files. Use for aidlc-review and for the per-task check in .aidlc/resources/rules/task-agents.md.
|
|
4
|
+
commands:
|
|
5
|
+
- git diff
|
|
6
|
+
- git log
|
|
7
|
+
- aidlc compliance list
|
|
8
|
+
- aidlc compliance check
|
|
9
|
+
---
|
|
10
|
+
# AIDLC reviewer
|
|
11
|
+
|
|
12
|
+
You review work you did not write. You start without the author's conversation, so everything you
|
|
13
|
+
know comes from the files you read and the message that started you. That is the point: judge what
|
|
14
|
+
is on disk, not what anyone meant.
|
|
15
|
+
|
|
16
|
+
## What you cannot do
|
|
17
|
+
|
|
18
|
+
You cannot change files. You have no edit or write tool, and your shell runs only `git diff`,
|
|
19
|
+
`git log`, `aidlc compliance list` and `aidlc compliance check`. Give them literal arguments — a
|
|
20
|
+
commit id, a path, a flag. Pipes, redirects, `;`, `&&`, `$` and backticks are refused, and so is
|
|
21
|
+
every other command. Read and search files with your read and search tools.
|
|
22
|
+
|
|
23
|
+
If you are asked to change a file, do not try another way. Say that you cannot, and carry on with
|
|
24
|
+
the review.
|
|
25
|
+
|
|
26
|
+
## What you deliver
|
|
27
|
+
|
|
28
|
+
Your reply is the deliverable. Nothing you do is saved unless it is in your reply.
|
|
29
|
+
|
|
30
|
+
- **An artifact review** — you were started from the `aidlc-review` skill, or asked to review
|
|
31
|
+
`requirements.md`, `design.md`, `tasks.md` or another lifecycle artifact. Follow
|
|
32
|
+
`.aidlc/skills/aidlc-review.md`. Reply with each findings file it calls for, in full, each under a
|
|
33
|
+
heading naming its path in the instance directory, each in one block fenced with four backticks
|
|
34
|
+
so a code fence inside a finding cannot close it. Write
|
|
35
|
+
`reviewer: aidlc-reviewer` in each file's frontmatter. End with this line, exactly:
|
|
36
|
+
|
|
37
|
+
Write each file above unchanged, then follow **Completion** in `.aidlc/skills/aidlc-review.md`.
|
|
38
|
+
|
|
39
|
+
- **A per-task check** — you were given a task line, the criteria it cites, a diff and a list of
|
|
40
|
+
changed test files, as `.aidlc/resources/rules/task-agents.md` describes. Judge the diff against
|
|
41
|
+
each cited criterion: met, or not and why. Every listed file is flagged; it fails the task unless
|
|
42
|
+
the task's own text calls for that change. Reply `PASS` or `REJECT`, the reasons, and each flagged
|
|
43
|
+
file with a verdict.
|
|
44
|
+
|
|
45
|
+
If the message that started you names no instance or artifact, say so and stop. Do not guess which
|
|
46
|
+
one was meant.
|
package/capabilities/codex.yaml
CHANGED
|
@@ -10,7 +10,17 @@ questions:
|
|
|
10
10
|
Either way the question file is written first and its path named in one line,
|
|
11
11
|
because a sandboxed turn can end before an answer arrives and the file is what
|
|
12
12
|
survives it.
|
|
13
|
+
# Order is load-bearing: the Codex adapter writes every entry covering a phase,
|
|
14
|
+
# in this order, above the skill body, and the task-agents rule reads the line at
|
|
15
|
+
# the top of the skill file (native-reviewer-agent/AC-14).
|
|
13
16
|
capabilities:
|
|
17
|
+
subagents:
|
|
18
|
+
phases: [implementation]
|
|
19
|
+
activation: >-
|
|
20
|
+
Sub-agents are available on this platform: spawn_agent starts an agent
|
|
21
|
+
with a fresh context of its own and wait_agent collects its reply. When a
|
|
22
|
+
tasks.md is being implemented, one agent per task may be offered, as
|
|
23
|
+
.aidlc/resources/rules/task-agents.md describes.
|
|
14
24
|
code-generation:
|
|
15
25
|
phases: [implementation, testing]
|
|
16
26
|
activation: >-
|
package/dist/agents.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Agent } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Load every agent definition (native-reviewer-agent/AC-1).
|
|
4
|
+
*
|
|
5
|
+
* Shape-checking stops at what the file says. Whether a name or a command is
|
|
6
|
+
* safe to turn into a path or a guard is the CLI's call, in
|
|
7
|
+
* `compile/agents.ts`, because that is where it becomes one.
|
|
8
|
+
*
|
|
9
|
+
* @returns Agents sorted by filename. A file without frontmatter is skipped.
|
|
10
|
+
*/
|
|
11
|
+
export declare function loadAgents(): Agent[];
|
|
12
|
+
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAexC;;;;;;;;GAQG;AACH,wBAAgB,UAAU,IAAI,KAAK,EAAE,CAqBpC"}
|
package/dist/agents.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
import { resolve, dirname } from 'node:path';
|
|
3
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
4
|
+
import { parse as parseYaml } from 'yaml';
|
|
5
|
+
const CONTENT_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
6
|
+
const AGENTS_DIR = resolve(CONTENT_ROOT, 'agents');
|
|
7
|
+
/**
|
|
8
|
+
* Filenames an agent may have. The name becomes a path segment in every project
|
|
9
|
+
* the CLI writes to, so anything else in the directory is ignored rather than
|
|
10
|
+
* trusted — the same rule `loadRules` applies.
|
|
11
|
+
*/
|
|
12
|
+
const AGENT_FILE = /^([a-z0-9-]+)\.md$/;
|
|
13
|
+
/** Frontmatter, then the body. */
|
|
14
|
+
const FRONTMATTER = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/;
|
|
15
|
+
/**
|
|
16
|
+
* Load every agent definition (native-reviewer-agent/AC-1).
|
|
17
|
+
*
|
|
18
|
+
* Shape-checking stops at what the file says. Whether a name or a command is
|
|
19
|
+
* safe to turn into a path or a guard is the CLI's call, in
|
|
20
|
+
* `compile/agents.ts`, because that is where it becomes one.
|
|
21
|
+
*
|
|
22
|
+
* @returns Agents sorted by filename. A file without frontmatter is skipped.
|
|
23
|
+
*/
|
|
24
|
+
export function loadAgents() {
|
|
25
|
+
if (!existsSync(AGENTS_DIR))
|
|
26
|
+
return [];
|
|
27
|
+
const agents = [];
|
|
28
|
+
for (const id of readdirSync(AGENTS_DIR)
|
|
29
|
+
.map((name) => AGENT_FILE.exec(name)?.[1])
|
|
30
|
+
.filter((name) => name !== undefined)
|
|
31
|
+
.sort()) {
|
|
32
|
+
const raw = readFileSync(resolve(AGENTS_DIR, `${id}.md`), 'utf8');
|
|
33
|
+
const match = FRONTMATTER.exec(raw);
|
|
34
|
+
if (!match)
|
|
35
|
+
continue;
|
|
36
|
+
const meta = (parseYaml(match[1]) ?? {});
|
|
37
|
+
agents.push({
|
|
38
|
+
name: typeof meta['name'] === 'string' ? meta['name'] : id,
|
|
39
|
+
description: typeof meta['description'] === 'string' ? meta['description'] : '',
|
|
40
|
+
commands: Array.isArray(meta['commands'])
|
|
41
|
+
? meta['commands'].filter((c) => typeof c === 'string')
|
|
42
|
+
: [],
|
|
43
|
+
instructions: match[2],
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return agents;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAG1C,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5E,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AAEnD;;;;GAIG;AACH,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAExC,kCAAkC;AAClC,MAAM,WAAW,GAAG,oCAAoC,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,UAAU,CAAC;SACrC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACzC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC;SACpD,IAAI,EAAE,EAAE,CAAC;QACV,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YAC1D,WAAW,EAAE,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;YAC/E,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACvC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;gBACpE,CAAC,CAAC,EAAE;YACN,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;SACvB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,9 +5,10 @@ export { loadGlossary, getGlossaryTerm } from './glossary.js';
|
|
|
5
5
|
export { loadCapabilities, getCapabilityMap } from './capabilities.js';
|
|
6
6
|
export { loadPhases, getPhase } from './phases.js';
|
|
7
7
|
export { loadRules } from './rules.js';
|
|
8
|
+
export { loadAgents } from './agents.js';
|
|
8
9
|
export { loadBoardWorkflow, BOARD_WORKFLOW_PATH } from './recipes.js';
|
|
9
10
|
export { loadTutorials, getTutorial, getSeries, parseTutorialSource } from './tutorials.js';
|
|
10
11
|
export { loadHowTos, getHowTo, parseHowToSource, HOWTO_SECTIONS } from './howto.js';
|
|
11
12
|
export { DOCS_DIR, loadDocTopics, findDocTopic, readDocPage } from './explain.js';
|
|
12
|
-
export type { Skill, WorkflowTemplate, GuidanceLayer, GlossaryTerm, CapabilityMap, QuestionRendering, PhaseDefinition, Rule, CodeSample, ContentReference, TutorialStep, Tutorial, WidgetKind, WidgetReference, HowTo, DocTopic } from './types.js';
|
|
13
|
+
export type { Skill, WorkflowTemplate, GuidanceLayer, GlossaryTerm, CapabilityMap, QuestionRendering, PhaseDefinition, Rule, Agent, CodeSample, ContentReference, TutorialStep, Tutorial, WidgetKind, WidgetReference, HowTo, DocTopic } from './types.js';
|
|
13
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAClF,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAClF,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,7 @@ export { loadGlossary, getGlossaryTerm } from './glossary.js';
|
|
|
5
5
|
export { loadCapabilities, getCapabilityMap } from './capabilities.js';
|
|
6
6
|
export { loadPhases, getPhase } from './phases.js';
|
|
7
7
|
export { loadRules } from './rules.js';
|
|
8
|
+
export { loadAgents } from './agents.js';
|
|
8
9
|
export { loadBoardWorkflow, BOARD_WORKFLOW_PATH } from './recipes.js';
|
|
9
10
|
export { loadTutorials, getTutorial, getSeries, parseTutorialSource } from './tutorials.js';
|
|
10
11
|
export { loadHowTos, getHowTo, parseHowToSource, HOWTO_SECTIONS } from './howto.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -29,6 +29,21 @@ export interface Rule {
|
|
|
29
29
|
/** The whole file, H1 included. */
|
|
30
30
|
body: string;
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* One agent definition, written by each adapter in its harness's own format
|
|
34
|
+
* (native-reviewer-agent/AC-1). The single source of the agent's instructions, so
|
|
35
|
+
* the Claude Code and Codex copies cannot drift.
|
|
36
|
+
*/
|
|
37
|
+
export interface Agent {
|
|
38
|
+
/** Filename without `.md`; also the agent's name on every harness. */
|
|
39
|
+
name: string;
|
|
40
|
+
/** One line; what a harness matches a request against. */
|
|
41
|
+
description: string;
|
|
42
|
+
/** The shell commands the agent may run, each a command prefix such as `git diff`. */
|
|
43
|
+
commands: string[];
|
|
44
|
+
/** The body: the agent's instructions, its system prompt on every harness. */
|
|
45
|
+
instructions: string;
|
|
46
|
+
}
|
|
32
47
|
/**
|
|
33
48
|
* One canonical vocabulary definition.
|
|
34
49
|
*
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,IAAI;IACnB,oFAAoF;IACpF,EAAE,EAAE,MAAM,CAAC;IACX,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,KAAK;IACpB,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8EAA8E;IAC9E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;;OAQG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,sEAAsE;IACtE,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wEAAwE;AACxE,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,CAAC;AAEpE;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,kFAAkF;IAClF,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,sGAAsG;IACtG,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB"}
|
package/docs/roadmap.md
CHANGED
|
@@ -95,6 +95,22 @@ works the backlog may ask it what is next, but promoting stays a person's decisi
|
|
|
95
95
|
that picks has no way to write. `priority` is an ordinary extension field (a rank, 1 first) that a
|
|
96
96
|
project declares in `roadmap.item_fields`.
|
|
97
97
|
|
|
98
|
+
**Seeing the roadmap** is `aidlc roadmap view`: one self-contained HTML page, opened in the browser.
|
|
99
|
+
The kanban board has a column per status — backlog in `roadmap next` order with ranks and ready items
|
|
100
|
+
marked, the latest 20 done items with the rest behind a control, the reason on each hold card — and
|
|
101
|
+
each card links to its item file, its instance folder and retrospective, and its pull requests on
|
|
102
|
+
GitHub when the branch and `origin` are known. Clicking a card opens its executive summary and its
|
|
103
|
+
dependencies. Below the board, a zoomable map lays out the `depends_on` chains: each item under its
|
|
104
|
+
first dependency, dashed links to the rest, an unknown id drawn as a red dashed node (a typo there
|
|
105
|
+
silently blocks `roadmap next`), blocked items marked, and items with no dependency hidden behind a
|
|
106
|
+
toggle. The page is written to `<git-common-dir>/aidlc/roadmap.html` — outside every working tree, so
|
|
107
|
+
it is never committed and every worktree shares one copy — or wherever `--out` says; `--no-open` only
|
|
108
|
+
writes it. Nothing rebuilds it on a move: until 2026-10-06 every move rewrote two committed Mermaid
|
|
109
|
+
graphs, so every promotion left two shared generated files modified in whichever checkout ran it.
|
|
110
|
+
`aidlc doctor` deletes those files where they are still the generated ones, and `aidlc roadmap graph`
|
|
111
|
+
is now an alias of `view`. All item text is escaped and the page's Content-Security-Policy allows only
|
|
112
|
+
its own script, because titles here routinely carry backticks, quotes and `<`.
|
|
113
|
+
|
|
98
114
|
**Ranking the backlog** is `aidlc roadmap rank <item> <n>`: it puts a `backlog/` item at rank `n` and
|
|
99
115
|
renumbers every ranked backlog item 1…k in their existing order, so ranks stay unique and gap-free —
|
|
100
116
|
hand-typed ranks drift, because an item leaving the backlog leaves a hole and two items typed at one
|
|
@@ -68,15 +68,37 @@ subsystem of this repo. These pages are organised by **topic** for that reason.
|
|
|
68
68
|
Claude Code's `subagents` entry, for the implementation phase, is a fact rather than a mode: it tells
|
|
69
69
|
the agent sub-agents exist, which is the condition for offering one agent per task. It sits in the map
|
|
70
70
|
rather than on the implementation skill because the map reaches every implementation-phase entry —
|
|
71
|
-
including `aidlc-continue`, the route an unattended run takes into implementation.
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
including `aidlc-continue`, the route an unattended run takes into implementation. Codex's `subagents`
|
|
72
|
+
entry says the same in Codex's terms (`spawn_agent`, `wait_agent`); Codex sub-agents are on by default.
|
|
73
|
+
Until then a Codex skill file carried no activation line at all, so the rule's condition could never
|
|
74
|
+
hold there — the Codex adapter now writes its phase's lines above the body, as Copilot does. Add
|
|
75
|
+
another platform only once it is confirmed to have sub-agents; a skill naming a tool the platform lacks
|
|
76
|
+
is worse than not offering the mode.
|
|
77
|
+
|
|
78
|
+
**The reviewer agent** is the one place AIDLC asks a harness to enforce something rather than a prompt
|
|
79
|
+
to request it. One definition, `packages/content/agents/aidlc-reviewer.md`, is written as
|
|
80
|
+
`.claude/agents/aidlc-reviewer.md` for Claude Code and `.codex/agents/aidlc-reviewer.toml` for Codex.
|
|
81
|
+
The adversarial review and the per-task check run in it, and it cannot change files. On Claude Code the
|
|
82
|
+
tool list and the guard enforce it: the agent has `Read`, `Grep`, `Glob` and `Bash`, and a
|
|
83
|
+
`PreToolUse` hook runs `.claude/hooks/aidlc-reviewer-guard.mjs` before every shell command, allowing
|
|
84
|
+
only `git diff`, `git log`, `aidlc compliance list` and `aidlc compliance check` with literal
|
|
85
|
+
arguments, and blocking whenever the guard cannot run. A hook rather than the `tools` list, because
|
|
86
|
+
`tools` takes names only — `Bash(git diff *)` there removes Bash outright. The review skill's shim
|
|
87
|
+
carries `context: fork` and `agent: aidlc-reviewer`, so it starts without the author's conversation.
|
|
88
|
+
On Codex the read-only sandbox does, and the review skill's first line tells the session to spawn the
|
|
89
|
+
agent; whether a child keeps `read-only` under a workspace-write parent is what the opt-in live test
|
|
90
|
+
(`AIDLC_LIVE_HARNESS=1`) measures. Codex loads `.codex/` only in a trusted project, and `AGENTS.md` says
|
|
91
|
+
what happens without it: a fresh sub-agent told to edit nothing, read-only by request only. Because the
|
|
92
|
+
reviewer cannot write, it replies with its findings files and the session that started it writes them
|
|
93
|
+
unchanged. Claude Code reads `.claude/agents/` at session start, so an `update` that adds the agent
|
|
94
|
+
takes effect in the next session.
|
|
74
95
|
|
|
75
96
|
Those files also carry a **top-level `questions:` key**, outside the phase-keyed `capabilities:` map, and
|
|
76
|
-
the reason it sits outside is not cosmetic.
|
|
77
|
-
per phase, and three platforms already occupy `requirements` and `design` — the two
|
|
78
|
-
actually get asked in. A second entry for those phases would silently lose to the
|
|
79
|
-
rendering could not live there at all.
|
|
97
|
+
the reason it sits outside is not cosmetic. The shared capability resolution returns exactly one
|
|
98
|
+
activation string per phase, and three platforms already occupy `requirements` and `design` — the two
|
|
99
|
+
phases questions actually get asked in. A second entry for those phases would silently lose to the
|
|
100
|
+
first, so question rendering could not live there at all. (Codex's adapter has its own resolver, which
|
|
101
|
+
writes every entry covering a phase; that is how its two implementation entries both arrive.)
|
|
80
102
|
|
|
81
103
|
Every question opens with **what it is**: the thing being decided, in plain words, on one concrete
|
|
82
104
|
example. The emitted rendering file states this once, under `## Every platform`, and every directive
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rasensio/aidlc-content",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.67.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"tutorials/",
|
|
23
23
|
"howto/",
|
|
24
24
|
"resources/",
|
|
25
|
+
"agents/",
|
|
25
26
|
"docs/",
|
|
26
27
|
"glossary.yaml"
|
|
27
28
|
],
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# The task-agents rule
|
|
2
2
|
|
|
3
|
-
This file is the only statement of the rule. The implementation skill points here
|
|
3
|
+
This file is the only statement of the rule. The implementation skill points here, so a session that runs its tasks itself carries none of this.
|
|
4
4
|
|
|
5
|
-
**One agent per task** hands each task in `tasks.md` to a fresh agent, then has a second fresh agent review it.
|
|
5
|
+
**One agent per task** hands each task in `tasks.md` to a fresh agent, then has a second fresh agent review it. The agent that wrote the code does not decide it is done. It doubles the agents, so it is off unless chosen.
|
|
6
6
|
|
|
7
7
|
## When it is offered
|
|
8
8
|
|
|
9
|
-
Only for an instance with a task-bearing `tasks.md`, and only where the platform's entry for the skill says sub-agents are available —
|
|
9
|
+
Only for an instance with a task-bearing `tasks.md`, and only where the platform's entry for the skill says sub-agents are available — a line at the top of the loaded skill file. Without it, every task runs in the session.
|
|
10
10
|
|
|
11
11
|
## Choosing, once per instance
|
|
12
12
|
|
|
@@ -27,7 +27,7 @@ Take open tasks in number order. For each one:
|
|
|
27
27
|
- do not edit `requirements.md` or `tasks.md`;
|
|
28
28
|
- do not commit and do not tick the checkbox;
|
|
29
29
|
- reply with the files it changed.
|
|
30
|
-
3. **Review, in a second fresh agent that edits nothing.** First run `git add --intent-to-add .`, so files
|
|
30
|
+
3. **Review, in a second fresh agent that edits nothing.** Use `aidlc-reviewer`, which cannot edit files (Claude Code: `subagent_type`; Codex: `spawn_agent`); where it is not loaded, tell a fresh agent to edit nothing. First run `git add --intent-to-add .`, so new files show in the diff unstaged. Then give the reviewer the same task line and criteria text, the output of `git diff $BASE`, and the output of this command, run by you:
|
|
31
31
|
|
|
32
32
|
```
|
|
33
33
|
git diff --name-status --diff-filter=MDR $BASE -- '*test*' '*spec*' .aidlc/state/<instance>/requirements.md .aidlc/state/<instance>/tasks.md
|
|
@@ -42,7 +42,7 @@ Take open tasks in number order. For each one:
|
|
|
42
42
|
|
|
43
43
|
## Waves
|
|
44
44
|
|
|
45
|
-
Adjacent open tasks carrying the same `(wave: <n>)` may be handed out at once, each to its own implementing agent, in this one checkout — never in separate worktrees. `BASE` is where the wave starts. Each task still gets its own reviewer, told which files its implementer reported,
|
|
45
|
+
Adjacent open tasks carrying the same `(wave: <n>)` may be handed out at once, each to its own implementing agent, in this one checkout — never in separate worktrees. `BASE` is where the wave starts. Each task still gets its own reviewer, told which files its implementer reported, to judge within the shared diff; run the listing command once and give every reviewer its output. Commit task by task as each passes, staging only the files its implementer reported. A task failing twice holds up no other: it is finished in the session afterwards.
|
|
46
46
|
|
|
47
47
|
## The record
|
|
48
48
|
|
|
@@ -50,6 +50,6 @@ Add a `## Task reviews` section to `code-complete.md`, one line per task:
|
|
|
50
50
|
|
|
51
51
|
```
|
|
52
52
|
- T4: PASS — attempts 1 — flagged: none
|
|
53
|
-
- T5: REJECT → PASS — attempts 2 — flagged:
|
|
53
|
+
- T5: REJECT → PASS — attempts 2 — flagged: test/parser.test.ts (task asks to update it)
|
|
54
54
|
- T6: finished in session — attempts 2 — flagged: none
|
|
55
55
|
```
|
package/skills/04-roadmap.md
CHANGED
|
@@ -145,7 +145,7 @@ For a `hold/` item, show whether it is **parked or declined**, with its reason,
|
|
|
145
145
|
|
|
146
146
|
**`aidlc roadmap next`** is the deterministic answer to "what next?": the `backlog/` item with the lowest `priority` among those whose `depends_on` are all `done`, unranked items last, ties by file name (`--explain` shows the order and what was skipped and why; `--json` for scripts). It is read-only and never promotes — promoting stays a person's decision. `priority` is an ordinary extension field a project declares in `roadmap.item_fields`; a rank, where 1 is first. Where it is declared, `--explain` also lists every unranked backlog item, so one sitting last is visible rather than silently last. **`aidlc roadmap rank <item> <n>`** is the one way to change a rank: it puts the item at `n` and renumbers every ranked backlog item 1…k, so ranks stay unique and gap-free.
|
|
147
147
|
|
|
148
|
-
**
|
|
148
|
+
**Seeing the roadmap.** When someone asks to see the roadmap or its dependencies, run **`aidlc roadmap view`** rather than drawing a graph. It writes one self-contained HTML page — a kanban board of every item by status, and a zoomable map of the `depends_on` chains with blocked items and unknown ids marked — and opens it in the browser (`--no-open` only writes it; `--out <path>` writes it elsewhere). The page lives in the git common dir, outside every working tree, so it is never committed and nothing rebuilds it on a move; run the command again for a fresh one. `aidlc roadmap graph` is the same command.
|
|
149
149
|
|
|
150
150
|
The frontmatter-only rule holds for browsing, which is a list and must stay cheap enough to run over the whole roadmap. **Triage** below is the one flow allowed into the body, and only as far as the executive summary.
|
|
151
151
|
|
package/skills/80-review.md
CHANGED
|
@@ -4,6 +4,7 @@ description: Performs adversarial review of lifecycle artifacts — examining fo
|
|
|
4
4
|
phase: requirements
|
|
5
5
|
trigger: Activated when a review is requested for any artifact or phase
|
|
6
6
|
priority: 60
|
|
7
|
+
agent: aidlc-reviewer
|
|
7
8
|
---
|
|
8
9
|
# Adversarial Review
|
|
9
10
|
|
|
@@ -15,7 +16,7 @@ Provide a structured, critical review of a lifecycle artifact from fresh context
|
|
|
15
16
|
|
|
16
17
|
## Important
|
|
17
18
|
|
|
18
|
-
You MUST perform this review with fresh eyes.
|
|
19
|
+
You MUST perform this review with fresh eyes. Where the platform has the `aidlc-reviewer` agent, the review runs in it: on Claude Code this skill starts it, with none of the author's conversation, and on Codex the skill's first line says how to start it. That agent cannot change files. Elsewhere, if you authored the artifact being reviewed, delegate to a separate session or subagent. Self-review defeats the purpose.
|
|
19
20
|
|
|
20
21
|
## Entry Criteria
|
|
21
22
|
|
|
@@ -79,6 +80,16 @@ The split is also the better review. Reviewing `design.md` and `tasks.md` into o
|
|
|
79
80
|
Do not write a cleared line for a control you did not actually examine. An
|
|
80
81
|
unchecked control reported as covered is the one outcome worse than no check at all.
|
|
81
82
|
|
|
83
|
+
## Running as the reviewer agent
|
|
84
|
+
|
|
85
|
+
The `aidlc-reviewer` agent cannot write files, so steps 6 and 7 change shape. When you cannot write:
|
|
86
|
+
|
|
87
|
+
1. Do everything up to writing the files.
|
|
88
|
+
2. Reply with each findings file in full — `<artifact>.review.md` and, when a pack is installed, `<artifact>.compliance.md` — each under a heading naming its path in the instance namespace, each in one block fenced with four backticks. Write `reviewer: aidlc-reviewer` in each file's frontmatter.
|
|
89
|
+
3. End with this line: "Write each file above unchanged, then follow **Completion** in `.aidlc/skills/aidlc-review.md`."
|
|
90
|
+
|
|
91
|
+
The session that started the review writes each file byte for byte, changing nothing in it, then follows **Completion**. A findings file its author has edited is no longer a review.
|
|
92
|
+
|
|
82
93
|
{{guidance:secure-defaults}}
|
|
83
94
|
|
|
84
95
|
## Findings Format
|
|
@@ -87,7 +98,7 @@ The split is also the better review. Reviewing `design.md` and `tasks.md` into o
|
|
|
87
98
|
---
|
|
88
99
|
artifact: <filename>
|
|
89
100
|
reviewed_at: <ISO 8601 UTC>
|
|
90
|
-
reviewer: <session-id>
|
|
101
|
+
reviewer: <session-id, or aidlc-reviewer>
|
|
91
102
|
---
|
|
92
103
|
|
|
93
104
|
## Finding 1
|