@rasensio/aidlc-content 1.41.0 → 1.43.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/package.json +1 -1
- package/resources/rules/question-protocol.md +2 -0
- package/resources/rules/unattended.md +60 -0
- package/skills/00-overview.md +1 -1
- package/skills/03-entry-point.md +4 -2
- package/skills/04-roadmap.md +4 -3
- package/skills/20-requirements.md +2 -2
- package/skills/30-design.md +1 -1
- package/skills/40-implementation.md +3 -1
- package/skills/50-testing.md +4 -0
- package/skills/60-deployment.md +2 -0
package/package.json
CHANGED
|
@@ -38,4 +38,6 @@ Each question in the file ends with an `[Answer]:` tag — blank while open, car
|
|
|
38
38
|
|
|
39
39
|
With no interactive terminal, write the file, say where it is, and end the turn. Never assume an answer.
|
|
40
40
|
|
|
41
|
+
**Unattended (`AIDLC_UNATTENDED=1`)** is the one exception, and it is not an assumption: take the recommended option, write it into `[Answer]:` followed by `(unattended default)`, and log it — or, when the recommended option falls in a hard-stop class, stop. Both per `.aidlc/resources/rules/unattended.md`.
|
|
42
|
+
|
|
41
43
|
**At most five questions stand open at once.** At the limit, answering — or accepting the stated defaults — comes before asking another. The cap counts open questions, not questions asked: a long negotiation is fine, an accumulating pile is not.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# The unattended rule
|
|
2
|
+
|
|
3
|
+
This file is the only statement of the rule. Skills point here instead of restating it, so there is no second copy to drift.
|
|
4
|
+
|
|
5
|
+
Unattended mode is on exactly when the environment variable `AIDLC_UNATTENDED` is `1` (`printenv AIDLC_UNATTENDED`). Otherwise every skill behaves as written. Nobody answers in this mode, so every place a skill would stop for a person has one outcome:
|
|
6
|
+
|
|
7
|
+
- **Default and log** — take the named default, log it, carry on.
|
|
8
|
+
- **Hard stop** — log it, park the item, release the claim, end the session.
|
|
9
|
+
- **Release boundary** — the normal end of an unattended run. Not a hard stop, and the item is not parked.
|
|
10
|
+
|
|
11
|
+
A situation no entry below covers is a hard stop. Guessing is what this mode exists to prevent.
|
|
12
|
+
|
|
13
|
+
## The log
|
|
14
|
+
|
|
15
|
+
Append one entry per default or hard stop to `.aidlc/state/<instance>/unattended-stops.md`: a `## <n>. <title> — <slug>` heading, then **Source:** (skill and section, or rule), **Instruction:** (the exact text), **Decided:** (the default, or "hard stop"), **Why:** (why it is safe, or which hard-stop class). A Question Protocol answer also carries `(unattended default)` in its `[Answer]:` — how a reviewer finds every choice nobody made.
|
|
16
|
+
|
|
17
|
+
## Hard stop
|
|
18
|
+
|
|
19
|
+
Always a hard stop:
|
|
20
|
+
|
|
21
|
+
1. Crossing a prohibition in `.aidlc/context/constitution.md`.
|
|
22
|
+
2. Deleting or overwriting data this session did not create.
|
|
23
|
+
3. Changing authentication, secrets, permissions or CI tokens, or handling real credentials.
|
|
24
|
+
4. Growing scope beyond the roadmap item's "What success looks like".
|
|
25
|
+
|
|
26
|
+
To stop:
|
|
27
|
+
|
|
28
|
+
1. Append the log entry.
|
|
29
|
+
2. Run `aidlc roadmap park <instance> --reason "<slug>: <one line>"`.
|
|
30
|
+
3. Run `aidlc release <instance>`.
|
|
31
|
+
4. End the session. Commit nothing more; try no other route to the same outcome.
|
|
32
|
+
|
|
33
|
+
## The release boundary
|
|
34
|
+
|
|
35
|
+
When testing completes, write the deployment record's release plan and end the session. Do not push, open a pull request, merge or release: whatever runs the agent owns those, and two actors on one release lane is how two releases collided on 2026-10-01.
|
|
36
|
+
|
|
37
|
+
## Every known stop
|
|
38
|
+
|
|
39
|
+
Each bullet begins with its one outcome; a condition after it is part of the rule.
|
|
40
|
+
|
|
41
|
+
- `entry-menu` — **default and log**: route to what the prompt names.
|
|
42
|
+
- `instance-name-taken` — **hard stop**: another session's work or an abandoned start, indistinguishable from here.
|
|
43
|
+
- `template-choice` — **default and log**: what the item or prompt names, else `defaults:` in `.aidlc/config.yaml`.
|
|
44
|
+
- `worktree-hand-off` — **default and log**: when the prompt says to continue, continue in the worktree.
|
|
45
|
+
- `roadmap-move-uncommitted` — **default and log**: leave it uncommitted; the caller commits.
|
|
46
|
+
- `roadmap-item-unlinked` — **default and log**: use `aidlc start --roadmap-item`; never move the item by hand.
|
|
47
|
+
- `requirements-input` — **default and log**: read `roadmap-item.md`; with neither it nor an ideation artifact, hard stop.
|
|
48
|
+
- `open-question` — **default and log**: the recommended option, marked `(unattended default)`; if it is a hard-stop class, hard stop — never another option.
|
|
49
|
+
- `requirements-confirmation` — **default and log**: hard stop if the requirements exceed the roadmap item.
|
|
50
|
+
- `design-confirmation` — **default and log**: the same scope test.
|
|
51
|
+
- `phase-end-turn` — **default and log**: continue into the next phase.
|
|
52
|
+
- `fresh-session` — **default and log**: continue; the runner decides where sessions start.
|
|
53
|
+
- `own-change-revert` — **default and log**: reverting this session's own change, after keeping a copy.
|
|
54
|
+
- `generated-output-discard` — **hard stop**: discarding output this session did not write.
|
|
55
|
+
- `sensitive-operation` — **hard stop**: deletions, infrastructure, permissions, credentials — except `own-change-revert`.
|
|
56
|
+
- `shared-state-prune` — **default and log**: it removes only entries whose worktree is gone and branch merged or deleted, and names each; log the names.
|
|
57
|
+
- `commit-incrementally` — **default and log**: on the instance branch only; never `main`, never push.
|
|
58
|
+
- `testing-security` — **hard stop**: production-like environments, real credentials, destructive operations.
|
|
59
|
+
- `platform-unknown` — **default and log**: carry on; the runner sets `AIDLC_AGENT`.
|
|
60
|
+
- `release-boundary` — **release boundary**: completing testing.
|
package/skills/00-overview.md
CHANGED
|
@@ -90,7 +90,7 @@ On each lifecycle event — `on-instance-start`, `on-phase-enter`, `on-phase-exi
|
|
|
90
90
|
|
|
91
91
|
## Question Protocol
|
|
92
92
|
|
|
93
|
-
When to ask the user something, how the question is written, and where it is recorded. The rule is in `.aidlc/resources/rules/question-protocol.md`.
|
|
93
|
+
When to ask the user something, how the question is written, and where it is recorded. The rule is in `.aidlc/resources/rules/question-protocol.md`. With nobody there: `.aidlc/resources/rules/unattended.md`.
|
|
94
94
|
|
|
95
95
|
## Ending a Phase or a Review
|
|
96
96
|
|
package/skills/03-entry-point.md
CHANGED
|
@@ -8,11 +8,13 @@ native_mode_hint:
|
|
|
8
8
|
claude-code: >-
|
|
9
9
|
This skill is an interactive entry point, not a phase artifact. Do not
|
|
10
10
|
enter plan mode. Read lifecycle state, present the menu, and wait for
|
|
11
|
-
the user's choice before doing any work
|
|
11
|
+
the user's choice before doing any work — unless their message already
|
|
12
|
+
says what they want; then route to it directly.
|
|
12
13
|
copilot: >-
|
|
13
14
|
This skill is an interactive entry point, not a phase artifact. Stay in the
|
|
14
15
|
default agent — do not switch to plan mode. Read lifecycle state, present the
|
|
15
|
-
menu, and wait for the user's choice before doing any work
|
|
16
|
+
menu, and wait for the user's choice before doing any work — unless their
|
|
17
|
+
message already says what they want; then route to it directly.
|
|
16
18
|
---
|
|
17
19
|
# AIDLC Entry Point
|
|
18
20
|
|
package/skills/04-roadmap.md
CHANGED
|
@@ -143,6 +143,8 @@ List each status directory, reading **only frontmatter and the containing direct
|
|
|
143
143
|
|
|
144
144
|
For a `hold/` item, show whether it is **parked or declined**, with its reason, from the last `history` entry — that entry is in the frontmatter, so this costs nothing extra. An item with no reason recorded is reported as `hold — reason not recorded`, never guessed at: parked and declined are opposite answers, and a wrong one either revives work somebody killed or buries work somebody agreed to.
|
|
145
145
|
|
|
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.
|
|
147
|
+
|
|
146
148
|
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.
|
|
147
149
|
|
|
148
150
|
A filename appearing in two status directories is an error: report it rather than guessing which one is current.
|
|
@@ -176,9 +178,8 @@ When the user asks for a worktree ("create a new worktree for roadmap `<file>`")
|
|
|
176
178
|
|
|
177
179
|
1. **Find the item** by file name, `id`, or title, in `backlog/` or `inbox/`. Asking for a worktree counts as choosing to skip triage. When more than one item matches, list them and ask which one.
|
|
178
180
|
2. **Instance name**: the item's file name without its date prefix and extension (the item filed as `20260929-say-what-to-do-next` becomes `say-what-to-do-next`). Template and scope come from the config defaults, unless the item or the user names them.
|
|
179
|
-
3. **Create the instance with** `aidlc start <template> --name <name> --scope <scope> --worktree --non-interactive
|
|
180
|
-
4. **
|
|
181
|
-
5. **Hand off. Do not start the phase in this session.** The work belongs to the new session. End with the exact command that opens it:
|
|
181
|
+
3. **Create the instance with** `aidlc start <template> --name <name> --scope <scope> --worktree --non-interactive --roadmap-item <item-file>`. Take the worktree path from the `Worktree:` line it prints. That one command creates the branch and the worktree, fires `on-instance-start`, sets the item's `promoted_to`, moves it to `in-progress/` in the primary checkout, and copies it into the instance as `roadmap-item.md` — which is the seeding step 5 above asks for. Do none of it by hand: a hand-made move is the step that got skipped. The move is left uncommitted in the primary checkout; committing it is yours.
|
|
182
|
+
4. **Hand off. Do not start the phase in this session** — unless the user's own message asks you to continue here, in which case `cd` into the worktree and follow **aidlc-continue** there. Otherwise the work belongs to the new session. End with the exact command that opens it:
|
|
182
183
|
```
|
|
183
184
|
cd <worktree> && claude "/aidlc-continue <name>"
|
|
184
185
|
```
|
|
@@ -39,7 +39,7 @@ See **The context rule** (`.aidlc/resources/rules/context.md`).
|
|
|
39
39
|
|
|
40
40
|
> {{glossary:artifact}}
|
|
41
41
|
|
|
42
|
-
1. **Gather requirements.** If a Full scope, read the ideation phase's artifact for context (`idea.md` for the feature templates, `research-question.md` for `spike`; `phase-ideation.yaml` names it).
|
|
42
|
+
1. **Gather requirements.** If a Full scope, read the ideation phase's artifact for context (`idea.md` for the feature templates, `research-question.md` for `spike`; `phase-ideation.yaml` names it). At Standard scope, read the roadmap item the instance was promoted from (`roadmap-item.md` in its state directory). Ask the user to describe the desired behaviour only when there is neither. Unattended (`AIDLC_UNATTENDED=1`): no artifact and no item is a hard stop, per `.aidlc/resources/rules/unattended.md`. Read the always-read guidance layers from `.aidlc/guidance/index.yaml` — see **The always-read rule** (`.aidlc/resources/rules/always-read.md`) for which layers those are and when to reach for the full `lessons.md`. Read `.aidlc/context/constitution.md` when it exists and apply the constitution rule in `.aidlc/resources/rules/constitution.md`.
|
|
43
43
|
2. **Write user stories.** Use the format: "As a [role], I want [capability], so that [benefit]."
|
|
44
44
|
3. **Define acceptance criteria.** Each criterion must be:
|
|
45
45
|
- Specific and unambiguous
|
|
@@ -78,7 +78,7 @@ When the instance uses the `bugfix` template, this phase produces `reproduction.
|
|
|
78
78
|
|
|
79
79
|
- `requirements.md` exists with at least one user story and corresponding acceptance criteria
|
|
80
80
|
- Each acceptance criterion is testable (has an observable pass/fail condition)
|
|
81
|
-
- The user has confirmed the requirements are complete for the chosen scope
|
|
81
|
+
- The user has confirmed the requirements are complete for the chosen scope. Unattended (`AIDLC_UNATTENDED=1`): log the confirmation as a default, or hard-stop when the requirements reach beyond the roadmap item, per `.aidlc/resources/rules/unattended.md`.
|
|
82
82
|
|
|
83
83
|
## Guidance
|
|
84
84
|
|
package/skills/30-design.md
CHANGED
|
@@ -66,7 +66,7 @@ transcript. See **The context rule** (`.aidlc/resources/rules/context.md`).
|
|
|
66
66
|
- Every knowledge-graph symbol the design builds on was checked against the source
|
|
67
67
|
- The design addresses all acceptance criteria from `requirements.md`
|
|
68
68
|
- For templates requiring it: `tasks.md` exists and every active acceptance criterion is claimed by at least one task, or the gap is deliberate
|
|
69
|
-
- The user has confirmed the design direction
|
|
69
|
+
- The user has confirmed the design direction. Unattended (`AIDLC_UNATTENDED=1`): log the confirmation as a default, or hard-stop when the design reaches beyond the roadmap item, per `.aidlc/resources/rules/unattended.md`.
|
|
70
70
|
|
|
71
71
|
## Guidance
|
|
72
72
|
|
|
@@ -44,7 +44,7 @@ Then the source files that task touches. See **The context rule** (`.aidlc/resou
|
|
|
44
44
|
2. **Load guidance.** Read the always-read guidance layers from `.aidlc/guidance/index.yaml` — see **The always-read rule** (`.aidlc/resources/rules/always-read.md`) for which layers those are and when to reach for the full `lessons.md`. Apply their rules during implementation.
|
|
45
45
|
3. **Execute the task breakdown.** When the instance has a `tasks.md` (produced in Design for full/quick-feature scope), read it and execute tasks in order: complete a task, then mark its checkbox `[x]` as part of the same work unit — never batch checkbox updates for later. A task that should not be done is deferred in place (`- [>] T<n>: <title> (deferred YYYY-MM-DD: <reason>)`) with a dated reason, never skipped silently or deleted; the implementation→testing gate blocks on open tasks. For bugfix scope, create the optional `tasks.md` at implementation start when the fix spans more than one commit-sized unit. For Micro scope, reference the task description and acceptance criteria directly — no task file.
|
|
46
46
|
4. **Write code.** Follow the design interfaces. Match existing code style (naming, formatting, error handling patterns).
|
|
47
|
-
5. **Handle sensitive operations.** Before executing any of the following, describe the action and wait for explicit user confirmation:
|
|
47
|
+
5. **Handle sensitive operations.** Before executing any of the following, describe the action and wait for explicit user confirmation (unattended, `AIDLC_UNATTENDED=1`: each is a hard stop except reverting this session's own changes, per `.aidlc/resources/rules/unattended.md`):
|
|
48
48
|
- File deletions or destructive operations
|
|
49
49
|
- Infrastructure changes (provisioning, configuration)
|
|
50
50
|
- Permission or access control modifications
|
|
@@ -70,6 +70,8 @@ Then the source files that task touches. See **The context rule** (`.aidlc/resou
|
|
|
70
70
|
|
|
71
71
|
## Security Confirmation
|
|
72
72
|
|
|
73
|
+
Unattended (`AIDLC_UNATTENDED=1`): nobody can confirm, so everything this section asks to confirm is a hard stop, per `.aidlc/resources/rules/unattended.md`.
|
|
74
|
+
|
|
73
75
|
Before proceeding with any sensitive operation during implementation:
|
|
74
76
|
1. Describe what the operation does and what it affects
|
|
75
77
|
2. State whether it is reversible
|
package/skills/50-testing.md
CHANGED
|
@@ -91,6 +91,8 @@ testing phase and record newly introduced advisories as findings.
|
|
|
91
91
|
|
|
92
92
|
## Security Confirmation
|
|
93
93
|
|
|
94
|
+
Unattended (`AIDLC_UNATTENDED=1`): nobody can confirm, so everything this section asks to confirm is a hard stop, per `.aidlc/resources/rules/unattended.md`.
|
|
95
|
+
|
|
94
96
|
If testing requires:
|
|
95
97
|
- Access to production-like environments
|
|
96
98
|
- Use of real credentials or sensitive data
|
|
@@ -102,6 +104,8 @@ You MUST describe the action, confirm it targets a safe environment, and wait fo
|
|
|
102
104
|
|
|
103
105
|
When exit criteria are met, update `phase-testing.yaml` status to `complete` and append a transition record to `transitions.log`.
|
|
104
106
|
|
|
107
|
+
Unattended (`AIDLC_UNATTENDED=1`): this is the release boundary. Write the deployment record's release plan and end the session — no push, pull request, merge or release — per `.aidlc/resources/rules/unattended.md`.
|
|
108
|
+
|
|
105
109
|
Then end the turn as **The next-steps rule** (`.aidlc/resources/rules/next-steps.md`) says.
|
|
106
110
|
|
|
107
111
|
**Changing a completed phase's artifact.** Do it only through an amendment — append an
|
package/skills/60-deployment.md
CHANGED
|
@@ -82,6 +82,8 @@ deployment checklist.
|
|
|
82
82
|
|
|
83
83
|
## Security Confirmation
|
|
84
84
|
|
|
85
|
+
Unattended (`AIDLC_UNATTENDED=1`): nobody can confirm, so everything this section asks to confirm is a hard stop, per `.aidlc/resources/rules/unattended.md`.
|
|
86
|
+
|
|
85
87
|
Deployment is inherently sensitive. You MUST:
|
|
86
88
|
1. Confirm the target environment with the user (production vs. staging vs. dev)
|
|
87
89
|
2. Present the full list of changes being deployed
|