@next-friday/create-app 7.0.0 → 8.0.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 +3 -2
- package/templates/base/.agents/rules/constitution-changes.md +1 -1
- package/templates/base/.agents/skills/brand-policy/SKILL.md +9 -3
- package/templates/base/.agents/skills/compliance-policy/SKILL.md +16 -3
- package/templates/base/.agents/skills/sdlc/SKILL.md +6 -5
- package/templates/base/.agents/skills/sdlc/playbooks/design.md +37 -0
- package/templates/base/.agents/skills/sdlc/playbooks/plan.md +5 -3
- package/templates/base/.agents/skills/sdlc/playbooks/question.md +2 -0
- package/templates/base/.agents/skills/security-policy/SKILL.md +32 -3
- package/templates/base/.agents/skills/ux-policy/SKILL.md +12 -3
- package/templates/base/.claude/skills/brand-policy/SKILL.md +9 -3
- package/templates/base/.claude/skills/compliance-policy/SKILL.md +16 -3
- package/templates/base/.claude/skills/sdlc/SKILL.md +6 -5
- package/templates/base/.claude/skills/sdlc/playbooks/design.md +37 -0
- package/templates/base/.claude/skills/sdlc/playbooks/plan.md +5 -3
- package/templates/base/.claude/skills/sdlc/playbooks/question.md +2 -0
- package/templates/base/.claude/skills/security-policy/SKILL.md +32 -3
- package/templates/base/.claude/skills/ux-policy/SKILL.md +12 -3
- package/templates/base/.cursor/skills/brand-policy/SKILL.md +9 -3
- package/templates/base/.cursor/skills/compliance-policy/SKILL.md +16 -3
- package/templates/base/.cursor/skills/sdlc/SKILL.md +6 -5
- package/templates/base/.cursor/skills/sdlc/playbooks/design.md +37 -0
- package/templates/base/.cursor/skills/sdlc/playbooks/plan.md +5 -3
- package/templates/base/.cursor/skills/sdlc/playbooks/question.md +2 -0
- package/templates/base/.cursor/skills/security-policy/SKILL.md +32 -3
- package/templates/base/.cursor/skills/ux-policy/SKILL.md +12 -3
- package/templates/base/SETUP.md +4 -4
- package/templates/base/intent/README.md +1 -1
- package/templates/base/scripts/check-human-gates.ts +383 -0
- package/templates/nestjs/.agents/rules.json +1 -1
- package/templates/nestjs/.claude/rules/constitution-changes.md +1 -1
- package/templates/nestjs/.cursor/rules/constitution-changes.mdc +2 -2
- package/templates/nestjs/.github/workflows/ci.yml +2 -0
- package/templates/nestjs/package.json +2 -1
- package/templates/nextjs/.agents/rules.json +1 -1
- package/templates/nextjs/.claude/rules/constitution-changes.md +1 -1
- package/templates/nextjs/.cursor/rules/constitution-changes.mdc +2 -2
- package/templates/nextjs/.github/workflows/ci.yml +2 -0
- package/templates/nextjs/package.json +2 -1
- package/templates/nodejs/.agents/rules.json +1 -1
- package/templates/nodejs/.claude/rules/constitution-changes.md +1 -1
- package/templates/nodejs/.cursor/rules/constitution-changes.mdc +2 -2
- package/templates/nodejs/.github/workflows/ci.yml +2 -0
- package/templates/nodejs/package.json +2 -1
- package/templates/payload/.agents/rules.json +1 -1
- package/templates/payload/.claude/rules/constitution-changes.md +1 -1
- package/templates/payload/.cursor/rules/constitution-changes.mdc +2 -2
- package/templates/payload/.github/workflows/ci.yml +2 -0
- package/templates/payload/package.json +2 -1
- package/templates/turborepo/.agents/rules.json +1 -1
- package/templates/turborepo/.claude/rules/constitution-changes.md +1 -1
- package/templates/turborepo/.cursor/rules/constitution-changes.mdc +2 -2
- package/templates/turborepo/.github/workflows/ci.yml +2 -0
- package/templates/turborepo/package.json +2 -1
- package/templates/base/.agents/skills/write-spec/SKILL.md +0 -12
- package/templates/base/.claude/skills/write-spec/SKILL.md +0 -12
- package/templates/base/.cursor/skills/write-spec/SKILL.md +0 -12
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@next-friday/create-app",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "8.0.0",
|
|
4
4
|
"description": "Create a Next Friday project from a template.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"create",
|
|
@@ -74,6 +74,7 @@
|
|
|
74
74
|
"format": "prettier --write --cache .",
|
|
75
75
|
"format:check": "prettier --check --cache . && editorconfig-checker",
|
|
76
76
|
"gates:check": "node scripts/check-agent-gates.ts",
|
|
77
|
+
"human-gates:check": "node scripts/check-human-gates.ts",
|
|
77
78
|
"knip": "knip",
|
|
78
79
|
"lint": "eslint . --fix --cache --max-warnings=0 --no-inline-config",
|
|
79
80
|
"lint:check": "eslint . --cache --max-warnings=0 --no-inline-config",
|
|
@@ -86,6 +87,6 @@
|
|
|
86
87
|
"test:coverage": "vitest run --coverage",
|
|
87
88
|
"test:watch": "vitest",
|
|
88
89
|
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
89
|
-
"verify": "pnpm suppressions:check && pnpm rules:check && pnpm gates:check && pnpm lint:check && pnpm format:check && pnpm sort-package-json:check && pnpm typecheck && pnpm test:coverage && pnpm knip && pnpm build && pnpm check:publint"
|
|
90
|
+
"verify": "pnpm suppressions:check && pnpm rules:check && pnpm gates:check && pnpm human-gates:check && pnpm lint:check && pnpm format:check && pnpm sort-package-json:check && pnpm typecheck && pnpm test:coverage && pnpm knip && pnpm build && pnpm check:publint"
|
|
90
91
|
}
|
|
91
92
|
}
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
|
|
3
3
|
The constitution is the set of files that agent settings deny to agents: rules, hooks, lint, format, and commit configuration, and the agent settings themselves. It is company policy.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
The constitution changes in a pull request like any other change, and a code owner approves it in review. Agent settings stop an agent from editing these files. When a task needs a constitution change, write the exact new text and the files it goes in on the pull request; a person commits it to that branch.
|
|
@@ -5,8 +5,14 @@ description: Apply the organization's brand policy. Use whenever writing or revi
|
|
|
5
5
|
|
|
6
6
|
# Brand policy
|
|
7
7
|
|
|
8
|
-
Owner:
|
|
8
|
+
Owner: the code owner of this folder in `.github/CODEOWNERS`.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
This is the default; the owner adds the brand's names, colours, typefaces, and tone of voice by editing this file.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
1. A change with no user-visible text, colour, typeface, logo, or message meets this policy; say "Does not apply" and why.
|
|
15
|
+
2. The organization's name, product names, colours, typefaces, and logo files each have one declared source in the project. The spec names that source for every brand value the change shows. When the source does not exist yet, creating it is a requirement of the spec.
|
|
16
|
+
3. No code, style, email, or message the user sees holds a brand value as a literal; each reads it from that source. Project metadata such as `package.json`, `README.md`, and `LICENSE` is outside this rule.
|
|
17
|
+
4. Text the user reads uses one name for one thing and the same words for the same action on every screen, and shows no internal identifier or stack trace.
|
|
18
|
+
5. A brand value this file does not give, such as an exact colour or a tone of voice, is an area of concern. Never invent one.
|
|
@@ -5,8 +5,21 @@ description: Apply the organization's compliance policy. Use whenever writing or
|
|
|
5
5
|
|
|
6
6
|
# Compliance policy
|
|
7
7
|
|
|
8
|
-
Owner:
|
|
8
|
+
Owner: the code owner of this folder in `.github/CODEOWNERS`.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Standard: the eight basic principles of the [OECD Guidelines Governing the Protection of Privacy and Transborder Flows of Personal Data](https://legalinstruments.oecd.org/en/instruments/OECD-LEGAL-0188) (adopted 1980, revised 2013), paragraphs 7 to 14. This is the default and names no country's law; the owner adds the laws and contracts that bind the organization by editing this file. The points below summarize those paragraphs; the standard's text governs.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
1. A change that collects, stores, shows, sends, or deletes no data about a person meets this policy; say "Does not apply" and why.
|
|
15
|
+
2. For any other change, the spec lists each kind of personal data the change touches and answers the eight points below for it. Each answer becomes a requirement.
|
|
16
|
+
1. **Collection limitation:** what is collected, by what lawful and fair means, and how the person knows or consents.
|
|
17
|
+
2. **Data quality:** why each field is relevant to the purpose, and how it is kept accurate and up to date.
|
|
18
|
+
3. **Purpose specification:** the purpose, stated no later than the moment of collection.
|
|
19
|
+
4. **Use limitation:** who else receives the data. A use that is incompatible with the stated purpose needs the person's consent or the authority of law.
|
|
20
|
+
5. **Security safeguards:** how the data is protected against loss and against unauthorised access, destruction, use, modification, or disclosure. The security policy gives the rules.
|
|
21
|
+
6. **Openness:** where a person can read what data is held, its main purposes, and who controls it.
|
|
22
|
+
7. **Individual participation:** how a person learns whether data about them is held, gets it within a reasonable time and at no excessive charge, is given reasons when a request is denied, and challenges it; when the challenge succeeds, the data is erased, rectified, completed, or amended.
|
|
23
|
+
8. **Accountability:** who in the organization answers for these points.
|
|
24
|
+
3. A point the spec cannot answer from the files is an area of concern. Never guess a legal basis.
|
|
25
|
+
4. Whether a specific law applies is a decision for the owner; raise it as an area of concern.
|
|
@@ -10,11 +10,12 @@ Do these steps in order.
|
|
|
10
10
|
|
|
11
11
|
1. **Match the request** to the first row that fits, and read that row's file before you act.
|
|
12
12
|
|
|
13
|
-
| The request | What to do
|
|
14
|
-
| :------------------------------------------------------------------------------- |
|
|
15
|
-
| A question, or a request to explain or check without changing things | Follow [`playbooks/question.md`](playbooks/question.md).
|
|
16
|
-
| An idea, a problem, a ticket, or an incident, whether asked for or only reported | Follow [`playbooks/plan.md`](playbooks/plan.md).
|
|
17
|
-
| A
|
|
13
|
+
| The request | What to do |
|
|
14
|
+
| :------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
15
|
+
| A question, or a request to explain or check without changing things | Follow [`playbooks/question.md`](playbooks/question.md). |
|
|
16
|
+
| An idea, a problem, a ticket, or an incident, whether asked for or only reported | Follow [`playbooks/plan.md`](playbooks/plan.md). |
|
|
17
|
+
| A spec for an intent | Follow [`playbooks/design.md`](playbooks/design.md). |
|
|
18
|
+
| A later step: a build, a review, a deploy, or an incident fix | Say "This step has no playbook in `/sdlc` yet" and name the step. Name `babysit-pr` for a pull request you opened. Answer what you can as `playbooks/question.md` says, and stop. |
|
|
18
19
|
|
|
19
20
|
When a request both asks a question and reports a problem, use `question` and offer `plan` in one line.
|
|
20
21
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Design phase: write `spec.md`
|
|
2
|
+
|
|
3
|
+
This playbook turns a merged intent into the requirements and design spec. A person or a job can start it; the steps are the same.
|
|
4
|
+
|
|
5
|
+
1. Find the intent: the `intent/<change>/intent.md` the request names. It must be on the default branch and have no `spec.md` beside it. In each case below, say only that, in two or three lines, and stop: write no file and add no review of the intent.
|
|
6
|
+
- The request names no intent, or the file does not exist on any branch: list each `intent/*/intent.md` on the default branch that has no `spec.md`, or say that there is none.
|
|
7
|
+
- The file exists only on another branch: say that the intent is not merged yet, and name that branch.
|
|
8
|
+
- `spec.md` already exists: say so and name the file.
|
|
9
|
+
2. Read the four policies, every time, before you write: `.agents/skills/brand-policy/SKILL.md`, `.agents/skills/security-policy/SKILL.md`, `.agents/skills/compliance-policy/SKILL.md`, and `.agents/skills/ux-policy/SKILL.md`. Then read the code and the docs the change touches.
|
|
10
|
+
3. Write `intent/<change>/spec.md` from the template below, in the language of the files already in `intent/`. Use exactly the template's headings.
|
|
11
|
+
- **Requirements:** numbered; each one states a result a test or a reader can check.
|
|
12
|
+
- **Design:** how the change fits the existing code: the files that change, and what each one does afterwards.
|
|
13
|
+
- **Policies:** one line for each of the four policies: the rules of that policy the change must meet, each as a requirement number, or "Does not apply" and why.
|
|
14
|
+
- **Areas of concern:** a policy rule the change cannot meet, two policies that contradict, or a decision the files do not settle. Give each one a number, the policy it comes from, and that policy's owner from `.github/CODEOWNERS`. When `.github/CODEOWNERS` names no owner for a policy's folder, write "no owner in `.github/CODEOWNERS`" in place of the owner, and add one area of concern that says so. Write "None" only when there are none.
|
|
15
|
+
- **Open questions:** each open question from `intent.md`, answered with its evidence or carried forward. Write "None" only when the intent has none.
|
|
16
|
+
4. Commit `spec.md` on a new branch, push it, and open a pull request ready for review, as `AGENTS.md` says for branches and pull requests. Put the areas of concern first in the pull request's description, under the template's first heading. When you cannot open a pull request from this session, say so and give the pushed branch's name.
|
|
17
|
+
5. **Gate: the product owner reviews the spec.** The product owner resolves each area of concern with its policy owner, accepts the spec by setting `Status: accepted.` and merging the pull request, or rejects it by closing it; you do neither. Report the pull request's URL, keep it green as `AGENTS.md` says, and wait.
|
|
18
|
+
|
|
19
|
+
**Next:** `AGENTS.md`; an engineer; when the product owner has merged the spec's pull request, the engineer starts the build in plan mode with `intent.md` and `spec.md`.
|
|
20
|
+
|
|
21
|
+
## Template
|
|
22
|
+
|
|
23
|
+
```markdown
|
|
24
|
+
# Spec: <title>
|
|
25
|
+
|
|
26
|
+
From `intent/<change>/intent.md`. Status: draft.
|
|
27
|
+
|
|
28
|
+
## Requirements
|
|
29
|
+
|
|
30
|
+
## Design
|
|
31
|
+
|
|
32
|
+
## Policies
|
|
33
|
+
|
|
34
|
+
## Areas of concern
|
|
35
|
+
|
|
36
|
+
## Open questions
|
|
37
|
+
```
|
|
@@ -7,10 +7,12 @@ This playbook writes the intent. The build plan, `intent/<change>/plan.md`, come
|
|
|
7
7
|
3. Interview until the originator has said four things: the problem (who, how often, and a number with its source), the outcome as the user would see it, the constraints, and what is out of scope.
|
|
8
8
|
- **When all four are already said, go to step 4 in the same turn.**
|
|
9
9
|
- **When one is missing, ask and stop.** Write no draft in that turn. Ask in rounds: each round holds only questions that do not depend on another question in the same round, each asks one thing, numbered, each with a concrete answer you recommend, worded so "yes" accepts it. A recommended answer is a fact or a choice, such as "Recommended: only the checkout page", never an instruction to the person. When you have no answer to recommend, write "No recommendation" and ask plainly. Wait for the answers, and build the next round on them.
|
|
10
|
-
4. Write `intent/<change>/intent.md` from the template below, where `<change>` is a short kebab-case name. Write the file in the language of the files already in `intent/`. Use exactly the template's five headings; what is out of scope goes under **Proposed outcome**. Anything else that is unknown, unverified, or not yet decided goes under **Open questions**; write "None" only when nothing is, and never list what the originator already answered. Show the whole draft, and name the file only as `intent/<change>/intent.md`.
|
|
11
|
-
5. **Gate: the originator corrects the draft.** Ask whether it matches what they meant, and revise until they say yes. Commit nothing, push nothing, and open no pull request before that yes.
|
|
10
|
+
4. Write `intent/<change>/intent.md` from the template below, where `<change>` is a short kebab-case name. Write the file in the language of the files already in `intent/`. Use exactly the template's five headings; what is out of scope goes under **Proposed outcome**. Anything else that is unknown, unverified, or not yet decided goes under **Open questions**; write "None" only when nothing is, and never list what the originator already answered. Show the whole draft, and name the file only as `intent/<change>/intent.md`. In plan mode you cannot write the file: show the draft as the plan, and write the file once it is approved.
|
|
11
|
+
5. **Gate: the originator corrects the draft.** Ask whether it matches what they meant, and revise until they say yes. Commit nothing, push nothing, and open no pull request before that yes. In plan mode, the originator approving the plan is that yes.
|
|
12
12
|
6. Commit `intent.md` on a new branch, push it, and open a pull request ready for review, as `AGENTS.md` says for branches and pull requests.
|
|
13
|
-
7. **Gate: the product owner accepts or rejects the intent.** The product owner
|
|
13
|
+
7. **Gate: the product owner accepts or rejects the intent.** The product owner accepts by setting `Status: accepted.` and merging the pull request, or rejects by closing it; you do neither. Report the pull request's URL, keep it green as `AGENTS.md` says, and wait.
|
|
14
|
+
|
|
15
|
+
**Next:** `.agents/skills/sdlc/playbooks/design.md`; an agent; when the product owner has merged the intent's pull request and a person or a job asks for the spec.
|
|
14
16
|
|
|
15
17
|
## Template
|
|
16
18
|
|
|
@@ -4,3 +4,5 @@
|
|
|
4
4
|
2. Answer, citing `path:line` or command output for each claim, as the **Write replies a person can check** convention in `AGENTS.md` says.
|
|
5
5
|
3. Write no file, make no commit, push nothing, and post nothing to GitHub or another service.
|
|
6
6
|
4. When the answer shows work worth doing, offer it in one line, such as "Send `/sdlc write an intent for this` to start the change", and stop.
|
|
7
|
+
|
|
8
|
+
**Next:** none; the person; when they send a new message.
|
|
@@ -5,8 +5,37 @@ description: Apply the organization's security policy. Use whenever writing or r
|
|
|
5
5
|
|
|
6
6
|
# Security policy
|
|
7
7
|
|
|
8
|
-
Owner:
|
|
8
|
+
Owner: the code owner of this folder in `.github/CODEOWNERS`.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Standard: [OWASP Application Security Verification Standard 5.0.0](https://github.com/OWASP/ASVS/tree/v5.0.0/5.0/en), Level 1. This is the default; the owner replaces or tightens it by editing this file.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
1. Find the chapters the change touches in the table below. A change that touches none meets this policy; say "Does not apply" and why.
|
|
15
|
+
2. For each chapter it touches, open that chapter's file in the standard and list every Level 1 requirement that applies to the change. Cite each as `v5.0.0-<chapter>.<section>.<requirement>`, for example `v5.0.0-8.2.1`.
|
|
16
|
+
3. Each cited requirement becomes a requirement of the spec, and a test or a review step of the plan.
|
|
17
|
+
4. When you cannot open the standard, name the chapters, cite no requirement number from memory, and report that as an area of concern.
|
|
18
|
+
5. A Level 1 requirement the change cannot meet is an area of concern. Never drop it silently.
|
|
19
|
+
6. Secrets stay out of the repository, logs, and error messages; `.env.example` holds names only.
|
|
20
|
+
|
|
21
|
+
## Chapters
|
|
22
|
+
|
|
23
|
+
| Chapter | Covers | Level 1 requirements |
|
|
24
|
+
| :------ | :---------------------------------- | :------------------- |
|
|
25
|
+
| V1 | Encoding and Sanitization | 8 |
|
|
26
|
+
| V2 | Validation and Business Logic | 4 |
|
|
27
|
+
| V3 | Web Frontend Security | 8 |
|
|
28
|
+
| V4 | API and Web Service | 2 |
|
|
29
|
+
| V5 | File Handling | 4 |
|
|
30
|
+
| V6 | Authentication | 13 |
|
|
31
|
+
| V7 | Session Management | 6 |
|
|
32
|
+
| V8 | Authorization | 4 |
|
|
33
|
+
| V9 | Self-contained Tokens | 4 |
|
|
34
|
+
| V10 | OAuth and OIDC | 5 |
|
|
35
|
+
| V11 | Cryptography | 3 |
|
|
36
|
+
| V12 | Secure Communication | 3 |
|
|
37
|
+
| V13 | Configuration | 1 |
|
|
38
|
+
| V14 | Data Protection | 2 |
|
|
39
|
+
| V15 | Secure Coding and Architecture | 3 |
|
|
40
|
+
| V16 | Security Logging and Error Handling | 0 |
|
|
41
|
+
| V17 | WebRTC | 0 |
|
|
@@ -5,8 +5,17 @@ description: Apply the organization's UX policy. Use whenever writing or reviewi
|
|
|
5
5
|
|
|
6
6
|
# UX policy
|
|
7
7
|
|
|
8
|
-
Owner:
|
|
8
|
+
Owner: the code owner of this folder in `.github/CODEOWNERS`.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Standard: [Web Content Accessibility Guidelines (WCAG) 2.2](https://www.w3.org/TR/WCAG22/), Level AA: the page satisfies all the Level A and Level AA success criteria. This is the default; the owner replaces or tightens it by editing this file.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
1. A change with no user interface meets this policy; say "Does not apply" and why.
|
|
15
|
+
2. For a change with a user interface, the spec lists the success criteria the change touches, by number and name, and each becomes a requirement.
|
|
16
|
+
3. Every interactive element works with the keyboard alone, shows where the focus is, and has a name a screen reader announces.
|
|
17
|
+
4. Text and meaningful graphics meet the contrast minimum, and no information is carried by colour alone.
|
|
18
|
+
5. Every form field has a visible label, and every error says in text which field is wrong and how to fix it.
|
|
19
|
+
6. Check the criteria that WCAG 2.2 added at Level A and AA: 2.4.11 Focus Not Obscured (Minimum), 2.5.7 Dragging Movements, 2.5.8 Target Size (Minimum), 3.2.6 Consistent Help, 3.3.7 Redundant Entry, and 3.3.8 Accessible Authentication (Minimum).
|
|
20
|
+
7. Every state the user can reach is designed: loading, empty, error, and success.
|
|
21
|
+
8. A criterion the change cannot meet is an area of concern. Never drop it silently.
|
|
@@ -5,8 +5,14 @@ description: Apply the organization's brand policy. Use whenever writing or revi
|
|
|
5
5
|
|
|
6
6
|
# Brand policy
|
|
7
7
|
|
|
8
|
-
Owner:
|
|
8
|
+
Owner: the code owner of this folder in `.github/CODEOWNERS`.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
This is the default; the owner adds the brand's names, colours, typefaces, and tone of voice by editing this file.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
1. A change with no user-visible text, colour, typeface, logo, or message meets this policy; say "Does not apply" and why.
|
|
15
|
+
2. The organization's name, product names, colours, typefaces, and logo files each have one declared source in the project. The spec names that source for every brand value the change shows. When the source does not exist yet, creating it is a requirement of the spec.
|
|
16
|
+
3. No code, style, email, or message the user sees holds a brand value as a literal; each reads it from that source. Project metadata such as `package.json`, `README.md`, and `LICENSE` is outside this rule.
|
|
17
|
+
4. Text the user reads uses one name for one thing and the same words for the same action on every screen, and shows no internal identifier or stack trace.
|
|
18
|
+
5. A brand value this file does not give, such as an exact colour or a tone of voice, is an area of concern. Never invent one.
|
|
@@ -5,8 +5,21 @@ description: Apply the organization's compliance policy. Use whenever writing or
|
|
|
5
5
|
|
|
6
6
|
# Compliance policy
|
|
7
7
|
|
|
8
|
-
Owner:
|
|
8
|
+
Owner: the code owner of this folder in `.github/CODEOWNERS`.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Standard: the eight basic principles of the [OECD Guidelines Governing the Protection of Privacy and Transborder Flows of Personal Data](https://legalinstruments.oecd.org/en/instruments/OECD-LEGAL-0188) (adopted 1980, revised 2013), paragraphs 7 to 14. This is the default and names no country's law; the owner adds the laws and contracts that bind the organization by editing this file. The points below summarize those paragraphs; the standard's text governs.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
1. A change that collects, stores, shows, sends, or deletes no data about a person meets this policy; say "Does not apply" and why.
|
|
15
|
+
2. For any other change, the spec lists each kind of personal data the change touches and answers the eight points below for it. Each answer becomes a requirement.
|
|
16
|
+
1. **Collection limitation:** what is collected, by what lawful and fair means, and how the person knows or consents.
|
|
17
|
+
2. **Data quality:** why each field is relevant to the purpose, and how it is kept accurate and up to date.
|
|
18
|
+
3. **Purpose specification:** the purpose, stated no later than the moment of collection.
|
|
19
|
+
4. **Use limitation:** who else receives the data. A use that is incompatible with the stated purpose needs the person's consent or the authority of law.
|
|
20
|
+
5. **Security safeguards:** how the data is protected against loss and against unauthorised access, destruction, use, modification, or disclosure. The security policy gives the rules.
|
|
21
|
+
6. **Openness:** where a person can read what data is held, its main purposes, and who controls it.
|
|
22
|
+
7. **Individual participation:** how a person learns whether data about them is held, gets it within a reasonable time and at no excessive charge, is given reasons when a request is denied, and challenges it; when the challenge succeeds, the data is erased, rectified, completed, or amended.
|
|
23
|
+
8. **Accountability:** who in the organization answers for these points.
|
|
24
|
+
3. A point the spec cannot answer from the files is an area of concern. Never guess a legal basis.
|
|
25
|
+
4. Whether a specific law applies is a decision for the owner; raise it as an area of concern.
|
|
@@ -10,11 +10,12 @@ Do these steps in order.
|
|
|
10
10
|
|
|
11
11
|
1. **Match the request** to the first row that fits, and read that row's file before you act.
|
|
12
12
|
|
|
13
|
-
| The request | What to do
|
|
14
|
-
| :------------------------------------------------------------------------------- |
|
|
15
|
-
| A question, or a request to explain or check without changing things | Follow [`playbooks/question.md`](playbooks/question.md).
|
|
16
|
-
| An idea, a problem, a ticket, or an incident, whether asked for or only reported | Follow [`playbooks/plan.md`](playbooks/plan.md).
|
|
17
|
-
| A
|
|
13
|
+
| The request | What to do |
|
|
14
|
+
| :------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
15
|
+
| A question, or a request to explain or check without changing things | Follow [`playbooks/question.md`](playbooks/question.md). |
|
|
16
|
+
| An idea, a problem, a ticket, or an incident, whether asked for or only reported | Follow [`playbooks/plan.md`](playbooks/plan.md). |
|
|
17
|
+
| A spec for an intent | Follow [`playbooks/design.md`](playbooks/design.md). |
|
|
18
|
+
| A later step: a build, a review, a deploy, or an incident fix | Say "This step has no playbook in `/sdlc` yet" and name the step. Name `babysit-pr` for a pull request you opened. Answer what you can as `playbooks/question.md` says, and stop. |
|
|
18
19
|
|
|
19
20
|
When a request both asks a question and reports a problem, use `question` and offer `plan` in one line.
|
|
20
21
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Design phase: write `spec.md`
|
|
2
|
+
|
|
3
|
+
This playbook turns a merged intent into the requirements and design spec. A person or a job can start it; the steps are the same.
|
|
4
|
+
|
|
5
|
+
1. Find the intent: the `intent/<change>/intent.md` the request names. It must be on the default branch and have no `spec.md` beside it. In each case below, say only that, in two or three lines, and stop: write no file and add no review of the intent.
|
|
6
|
+
- The request names no intent, or the file does not exist on any branch: list each `intent/*/intent.md` on the default branch that has no `spec.md`, or say that there is none.
|
|
7
|
+
- The file exists only on another branch: say that the intent is not merged yet, and name that branch.
|
|
8
|
+
- `spec.md` already exists: say so and name the file.
|
|
9
|
+
2. Read the four policies, every time, before you write: `.agents/skills/brand-policy/SKILL.md`, `.agents/skills/security-policy/SKILL.md`, `.agents/skills/compliance-policy/SKILL.md`, and `.agents/skills/ux-policy/SKILL.md`. Then read the code and the docs the change touches.
|
|
10
|
+
3. Write `intent/<change>/spec.md` from the template below, in the language of the files already in `intent/`. Use exactly the template's headings.
|
|
11
|
+
- **Requirements:** numbered; each one states a result a test or a reader can check.
|
|
12
|
+
- **Design:** how the change fits the existing code: the files that change, and what each one does afterwards.
|
|
13
|
+
- **Policies:** one line for each of the four policies: the rules of that policy the change must meet, each as a requirement number, or "Does not apply" and why.
|
|
14
|
+
- **Areas of concern:** a policy rule the change cannot meet, two policies that contradict, or a decision the files do not settle. Give each one a number, the policy it comes from, and that policy's owner from `.github/CODEOWNERS`. When `.github/CODEOWNERS` names no owner for a policy's folder, write "no owner in `.github/CODEOWNERS`" in place of the owner, and add one area of concern that says so. Write "None" only when there are none.
|
|
15
|
+
- **Open questions:** each open question from `intent.md`, answered with its evidence or carried forward. Write "None" only when the intent has none.
|
|
16
|
+
4. Commit `spec.md` on a new branch, push it, and open a pull request ready for review, as `AGENTS.md` says for branches and pull requests. Put the areas of concern first in the pull request's description, under the template's first heading. When you cannot open a pull request from this session, say so and give the pushed branch's name.
|
|
17
|
+
5. **Gate: the product owner reviews the spec.** The product owner resolves each area of concern with its policy owner, accepts the spec by setting `Status: accepted.` and merging the pull request, or rejects it by closing it; you do neither. Report the pull request's URL, keep it green as `AGENTS.md` says, and wait.
|
|
18
|
+
|
|
19
|
+
**Next:** `AGENTS.md`; an engineer; when the product owner has merged the spec's pull request, the engineer starts the build in plan mode with `intent.md` and `spec.md`.
|
|
20
|
+
|
|
21
|
+
## Template
|
|
22
|
+
|
|
23
|
+
```markdown
|
|
24
|
+
# Spec: <title>
|
|
25
|
+
|
|
26
|
+
From `intent/<change>/intent.md`. Status: draft.
|
|
27
|
+
|
|
28
|
+
## Requirements
|
|
29
|
+
|
|
30
|
+
## Design
|
|
31
|
+
|
|
32
|
+
## Policies
|
|
33
|
+
|
|
34
|
+
## Areas of concern
|
|
35
|
+
|
|
36
|
+
## Open questions
|
|
37
|
+
```
|
|
@@ -7,10 +7,12 @@ This playbook writes the intent. The build plan, `intent/<change>/plan.md`, come
|
|
|
7
7
|
3. Interview until the originator has said four things: the problem (who, how often, and a number with its source), the outcome as the user would see it, the constraints, and what is out of scope.
|
|
8
8
|
- **When all four are already said, go to step 4 in the same turn.**
|
|
9
9
|
- **When one is missing, ask and stop.** Write no draft in that turn. Ask in rounds: each round holds only questions that do not depend on another question in the same round, each asks one thing, numbered, each with a concrete answer you recommend, worded so "yes" accepts it. A recommended answer is a fact or a choice, such as "Recommended: only the checkout page", never an instruction to the person. When you have no answer to recommend, write "No recommendation" and ask plainly. Wait for the answers, and build the next round on them.
|
|
10
|
-
4. Write `intent/<change>/intent.md` from the template below, where `<change>` is a short kebab-case name. Write the file in the language of the files already in `intent/`. Use exactly the template's five headings; what is out of scope goes under **Proposed outcome**. Anything else that is unknown, unverified, or not yet decided goes under **Open questions**; write "None" only when nothing is, and never list what the originator already answered. Show the whole draft, and name the file only as `intent/<change>/intent.md`.
|
|
11
|
-
5. **Gate: the originator corrects the draft.** Ask whether it matches what they meant, and revise until they say yes. Commit nothing, push nothing, and open no pull request before that yes.
|
|
10
|
+
4. Write `intent/<change>/intent.md` from the template below, where `<change>` is a short kebab-case name. Write the file in the language of the files already in `intent/`. Use exactly the template's five headings; what is out of scope goes under **Proposed outcome**. Anything else that is unknown, unverified, or not yet decided goes under **Open questions**; write "None" only when nothing is, and never list what the originator already answered. Show the whole draft, and name the file only as `intent/<change>/intent.md`. In plan mode you cannot write the file: show the draft as the plan, and write the file once it is approved.
|
|
11
|
+
5. **Gate: the originator corrects the draft.** Ask whether it matches what they meant, and revise until they say yes. Commit nothing, push nothing, and open no pull request before that yes. In plan mode, the originator approving the plan is that yes.
|
|
12
12
|
6. Commit `intent.md` on a new branch, push it, and open a pull request ready for review, as `AGENTS.md` says for branches and pull requests.
|
|
13
|
-
7. **Gate: the product owner accepts or rejects the intent.** The product owner
|
|
13
|
+
7. **Gate: the product owner accepts or rejects the intent.** The product owner accepts by setting `Status: accepted.` and merging the pull request, or rejects by closing it; you do neither. Report the pull request's URL, keep it green as `AGENTS.md` says, and wait.
|
|
14
|
+
|
|
15
|
+
**Next:** `.agents/skills/sdlc/playbooks/design.md`; an agent; when the product owner has merged the intent's pull request and a person or a job asks for the spec.
|
|
14
16
|
|
|
15
17
|
## Template
|
|
16
18
|
|
|
@@ -4,3 +4,5 @@
|
|
|
4
4
|
2. Answer, citing `path:line` or command output for each claim, as the **Write replies a person can check** convention in `AGENTS.md` says.
|
|
5
5
|
3. Write no file, make no commit, push nothing, and post nothing to GitHub or another service.
|
|
6
6
|
4. When the answer shows work worth doing, offer it in one line, such as "Send `/sdlc write an intent for this` to start the change", and stop.
|
|
7
|
+
|
|
8
|
+
**Next:** none; the person; when they send a new message.
|
|
@@ -5,8 +5,37 @@ description: Apply the organization's security policy. Use whenever writing or r
|
|
|
5
5
|
|
|
6
6
|
# Security policy
|
|
7
7
|
|
|
8
|
-
Owner:
|
|
8
|
+
Owner: the code owner of this folder in `.github/CODEOWNERS`.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Standard: [OWASP Application Security Verification Standard 5.0.0](https://github.com/OWASP/ASVS/tree/v5.0.0/5.0/en), Level 1. This is the default; the owner replaces or tightens it by editing this file.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
1. Find the chapters the change touches in the table below. A change that touches none meets this policy; say "Does not apply" and why.
|
|
15
|
+
2. For each chapter it touches, open that chapter's file in the standard and list every Level 1 requirement that applies to the change. Cite each as `v5.0.0-<chapter>.<section>.<requirement>`, for example `v5.0.0-8.2.1`.
|
|
16
|
+
3. Each cited requirement becomes a requirement of the spec, and a test or a review step of the plan.
|
|
17
|
+
4. When you cannot open the standard, name the chapters, cite no requirement number from memory, and report that as an area of concern.
|
|
18
|
+
5. A Level 1 requirement the change cannot meet is an area of concern. Never drop it silently.
|
|
19
|
+
6. Secrets stay out of the repository, logs, and error messages; `.env.example` holds names only.
|
|
20
|
+
|
|
21
|
+
## Chapters
|
|
22
|
+
|
|
23
|
+
| Chapter | Covers | Level 1 requirements |
|
|
24
|
+
| :------ | :---------------------------------- | :------------------- |
|
|
25
|
+
| V1 | Encoding and Sanitization | 8 |
|
|
26
|
+
| V2 | Validation and Business Logic | 4 |
|
|
27
|
+
| V3 | Web Frontend Security | 8 |
|
|
28
|
+
| V4 | API and Web Service | 2 |
|
|
29
|
+
| V5 | File Handling | 4 |
|
|
30
|
+
| V6 | Authentication | 13 |
|
|
31
|
+
| V7 | Session Management | 6 |
|
|
32
|
+
| V8 | Authorization | 4 |
|
|
33
|
+
| V9 | Self-contained Tokens | 4 |
|
|
34
|
+
| V10 | OAuth and OIDC | 5 |
|
|
35
|
+
| V11 | Cryptography | 3 |
|
|
36
|
+
| V12 | Secure Communication | 3 |
|
|
37
|
+
| V13 | Configuration | 1 |
|
|
38
|
+
| V14 | Data Protection | 2 |
|
|
39
|
+
| V15 | Secure Coding and Architecture | 3 |
|
|
40
|
+
| V16 | Security Logging and Error Handling | 0 |
|
|
41
|
+
| V17 | WebRTC | 0 |
|
|
@@ -5,8 +5,17 @@ description: Apply the organization's UX policy. Use whenever writing or reviewi
|
|
|
5
5
|
|
|
6
6
|
# UX policy
|
|
7
7
|
|
|
8
|
-
Owner:
|
|
8
|
+
Owner: the code owner of this folder in `.github/CODEOWNERS`.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Standard: [Web Content Accessibility Guidelines (WCAG) 2.2](https://www.w3.org/TR/WCAG22/), Level AA: the page satisfies all the Level A and Level AA success criteria. This is the default; the owner replaces or tightens it by editing this file.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
1. A change with no user interface meets this policy; say "Does not apply" and why.
|
|
15
|
+
2. For a change with a user interface, the spec lists the success criteria the change touches, by number and name, and each becomes a requirement.
|
|
16
|
+
3. Every interactive element works with the keyboard alone, shows where the focus is, and has a name a screen reader announces.
|
|
17
|
+
4. Text and meaningful graphics meet the contrast minimum, and no information is carried by colour alone.
|
|
18
|
+
5. Every form field has a visible label, and every error says in text which field is wrong and how to fix it.
|
|
19
|
+
6. Check the criteria that WCAG 2.2 added at Level A and AA: 2.4.11 Focus Not Obscured (Minimum), 2.5.7 Dragging Movements, 2.5.8 Target Size (Minimum), 3.2.6 Consistent Help, 3.3.7 Redundant Entry, and 3.3.8 Accessible Authentication (Minimum).
|
|
20
|
+
7. Every state the user can reach is designed: loading, empty, error, and success.
|
|
21
|
+
8. A criterion the change cannot meet is an area of concern. Never drop it silently.
|
|
@@ -5,8 +5,14 @@ description: Apply the organization's brand policy. Use whenever writing or revi
|
|
|
5
5
|
|
|
6
6
|
# Brand policy
|
|
7
7
|
|
|
8
|
-
Owner:
|
|
8
|
+
Owner: the code owner of this folder in `.github/CODEOWNERS`.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
This is the default; the owner adds the brand's names, colours, typefaces, and tone of voice by editing this file.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
1. A change with no user-visible text, colour, typeface, logo, or message meets this policy; say "Does not apply" and why.
|
|
15
|
+
2. The organization's name, product names, colours, typefaces, and logo files each have one declared source in the project. The spec names that source for every brand value the change shows. When the source does not exist yet, creating it is a requirement of the spec.
|
|
16
|
+
3. No code, style, email, or message the user sees holds a brand value as a literal; each reads it from that source. Project metadata such as `package.json`, `README.md`, and `LICENSE` is outside this rule.
|
|
17
|
+
4. Text the user reads uses one name for one thing and the same words for the same action on every screen, and shows no internal identifier or stack trace.
|
|
18
|
+
5. A brand value this file does not give, such as an exact colour or a tone of voice, is an area of concern. Never invent one.
|
|
@@ -5,8 +5,21 @@ description: Apply the organization's compliance policy. Use whenever writing or
|
|
|
5
5
|
|
|
6
6
|
# Compliance policy
|
|
7
7
|
|
|
8
|
-
Owner:
|
|
8
|
+
Owner: the code owner of this folder in `.github/CODEOWNERS`.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Standard: the eight basic principles of the [OECD Guidelines Governing the Protection of Privacy and Transborder Flows of Personal Data](https://legalinstruments.oecd.org/en/instruments/OECD-LEGAL-0188) (adopted 1980, revised 2013), paragraphs 7 to 14. This is the default and names no country's law; the owner adds the laws and contracts that bind the organization by editing this file. The points below summarize those paragraphs; the standard's text governs.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
1. A change that collects, stores, shows, sends, or deletes no data about a person meets this policy; say "Does not apply" and why.
|
|
15
|
+
2. For any other change, the spec lists each kind of personal data the change touches and answers the eight points below for it. Each answer becomes a requirement.
|
|
16
|
+
1. **Collection limitation:** what is collected, by what lawful and fair means, and how the person knows or consents.
|
|
17
|
+
2. **Data quality:** why each field is relevant to the purpose, and how it is kept accurate and up to date.
|
|
18
|
+
3. **Purpose specification:** the purpose, stated no later than the moment of collection.
|
|
19
|
+
4. **Use limitation:** who else receives the data. A use that is incompatible with the stated purpose needs the person's consent or the authority of law.
|
|
20
|
+
5. **Security safeguards:** how the data is protected against loss and against unauthorised access, destruction, use, modification, or disclosure. The security policy gives the rules.
|
|
21
|
+
6. **Openness:** where a person can read what data is held, its main purposes, and who controls it.
|
|
22
|
+
7. **Individual participation:** how a person learns whether data about them is held, gets it within a reasonable time and at no excessive charge, is given reasons when a request is denied, and challenges it; when the challenge succeeds, the data is erased, rectified, completed, or amended.
|
|
23
|
+
8. **Accountability:** who in the organization answers for these points.
|
|
24
|
+
3. A point the spec cannot answer from the files is an area of concern. Never guess a legal basis.
|
|
25
|
+
4. Whether a specific law applies is a decision for the owner; raise it as an area of concern.
|
|
@@ -10,11 +10,12 @@ Do these steps in order.
|
|
|
10
10
|
|
|
11
11
|
1. **Match the request** to the first row that fits, and read that row's file before you act.
|
|
12
12
|
|
|
13
|
-
| The request | What to do
|
|
14
|
-
| :------------------------------------------------------------------------------- |
|
|
15
|
-
| A question, or a request to explain or check without changing things | Follow [`playbooks/question.md`](playbooks/question.md).
|
|
16
|
-
| An idea, a problem, a ticket, or an incident, whether asked for or only reported | Follow [`playbooks/plan.md`](playbooks/plan.md).
|
|
17
|
-
| A
|
|
13
|
+
| The request | What to do |
|
|
14
|
+
| :------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
15
|
+
| A question, or a request to explain or check without changing things | Follow [`playbooks/question.md`](playbooks/question.md). |
|
|
16
|
+
| An idea, a problem, a ticket, or an incident, whether asked for or only reported | Follow [`playbooks/plan.md`](playbooks/plan.md). |
|
|
17
|
+
| A spec for an intent | Follow [`playbooks/design.md`](playbooks/design.md). |
|
|
18
|
+
| A later step: a build, a review, a deploy, or an incident fix | Say "This step has no playbook in `/sdlc` yet" and name the step. Name `babysit-pr` for a pull request you opened. Answer what you can as `playbooks/question.md` says, and stop. |
|
|
18
19
|
|
|
19
20
|
When a request both asks a question and reports a problem, use `question` and offer `plan` in one line.
|
|
20
21
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Design phase: write `spec.md`
|
|
2
|
+
|
|
3
|
+
This playbook turns a merged intent into the requirements and design spec. A person or a job can start it; the steps are the same.
|
|
4
|
+
|
|
5
|
+
1. Find the intent: the `intent/<change>/intent.md` the request names. It must be on the default branch and have no `spec.md` beside it. In each case below, say only that, in two or three lines, and stop: write no file and add no review of the intent.
|
|
6
|
+
- The request names no intent, or the file does not exist on any branch: list each `intent/*/intent.md` on the default branch that has no `spec.md`, or say that there is none.
|
|
7
|
+
- The file exists only on another branch: say that the intent is not merged yet, and name that branch.
|
|
8
|
+
- `spec.md` already exists: say so and name the file.
|
|
9
|
+
2. Read the four policies, every time, before you write: `.agents/skills/brand-policy/SKILL.md`, `.agents/skills/security-policy/SKILL.md`, `.agents/skills/compliance-policy/SKILL.md`, and `.agents/skills/ux-policy/SKILL.md`. Then read the code and the docs the change touches.
|
|
10
|
+
3. Write `intent/<change>/spec.md` from the template below, in the language of the files already in `intent/`. Use exactly the template's headings.
|
|
11
|
+
- **Requirements:** numbered; each one states a result a test or a reader can check.
|
|
12
|
+
- **Design:** how the change fits the existing code: the files that change, and what each one does afterwards.
|
|
13
|
+
- **Policies:** one line for each of the four policies: the rules of that policy the change must meet, each as a requirement number, or "Does not apply" and why.
|
|
14
|
+
- **Areas of concern:** a policy rule the change cannot meet, two policies that contradict, or a decision the files do not settle. Give each one a number, the policy it comes from, and that policy's owner from `.github/CODEOWNERS`. When `.github/CODEOWNERS` names no owner for a policy's folder, write "no owner in `.github/CODEOWNERS`" in place of the owner, and add one area of concern that says so. Write "None" only when there are none.
|
|
15
|
+
- **Open questions:** each open question from `intent.md`, answered with its evidence or carried forward. Write "None" only when the intent has none.
|
|
16
|
+
4. Commit `spec.md` on a new branch, push it, and open a pull request ready for review, as `AGENTS.md` says for branches and pull requests. Put the areas of concern first in the pull request's description, under the template's first heading. When you cannot open a pull request from this session, say so and give the pushed branch's name.
|
|
17
|
+
5. **Gate: the product owner reviews the spec.** The product owner resolves each area of concern with its policy owner, accepts the spec by setting `Status: accepted.` and merging the pull request, or rejects it by closing it; you do neither. Report the pull request's URL, keep it green as `AGENTS.md` says, and wait.
|
|
18
|
+
|
|
19
|
+
**Next:** `AGENTS.md`; an engineer; when the product owner has merged the spec's pull request, the engineer starts the build in plan mode with `intent.md` and `spec.md`.
|
|
20
|
+
|
|
21
|
+
## Template
|
|
22
|
+
|
|
23
|
+
```markdown
|
|
24
|
+
# Spec: <title>
|
|
25
|
+
|
|
26
|
+
From `intent/<change>/intent.md`. Status: draft.
|
|
27
|
+
|
|
28
|
+
## Requirements
|
|
29
|
+
|
|
30
|
+
## Design
|
|
31
|
+
|
|
32
|
+
## Policies
|
|
33
|
+
|
|
34
|
+
## Areas of concern
|
|
35
|
+
|
|
36
|
+
## Open questions
|
|
37
|
+
```
|
|
@@ -7,10 +7,12 @@ This playbook writes the intent. The build plan, `intent/<change>/plan.md`, come
|
|
|
7
7
|
3. Interview until the originator has said four things: the problem (who, how often, and a number with its source), the outcome as the user would see it, the constraints, and what is out of scope.
|
|
8
8
|
- **When all four are already said, go to step 4 in the same turn.**
|
|
9
9
|
- **When one is missing, ask and stop.** Write no draft in that turn. Ask in rounds: each round holds only questions that do not depend on another question in the same round, each asks one thing, numbered, each with a concrete answer you recommend, worded so "yes" accepts it. A recommended answer is a fact or a choice, such as "Recommended: only the checkout page", never an instruction to the person. When you have no answer to recommend, write "No recommendation" and ask plainly. Wait for the answers, and build the next round on them.
|
|
10
|
-
4. Write `intent/<change>/intent.md` from the template below, where `<change>` is a short kebab-case name. Write the file in the language of the files already in `intent/`. Use exactly the template's five headings; what is out of scope goes under **Proposed outcome**. Anything else that is unknown, unverified, or not yet decided goes under **Open questions**; write "None" only when nothing is, and never list what the originator already answered. Show the whole draft, and name the file only as `intent/<change>/intent.md`.
|
|
11
|
-
5. **Gate: the originator corrects the draft.** Ask whether it matches what they meant, and revise until they say yes. Commit nothing, push nothing, and open no pull request before that yes.
|
|
10
|
+
4. Write `intent/<change>/intent.md` from the template below, where `<change>` is a short kebab-case name. Write the file in the language of the files already in `intent/`. Use exactly the template's five headings; what is out of scope goes under **Proposed outcome**. Anything else that is unknown, unverified, or not yet decided goes under **Open questions**; write "None" only when nothing is, and never list what the originator already answered. Show the whole draft, and name the file only as `intent/<change>/intent.md`. In plan mode you cannot write the file: show the draft as the plan, and write the file once it is approved.
|
|
11
|
+
5. **Gate: the originator corrects the draft.** Ask whether it matches what they meant, and revise until they say yes. Commit nothing, push nothing, and open no pull request before that yes. In plan mode, the originator approving the plan is that yes.
|
|
12
12
|
6. Commit `intent.md` on a new branch, push it, and open a pull request ready for review, as `AGENTS.md` says for branches and pull requests.
|
|
13
|
-
7. **Gate: the product owner accepts or rejects the intent.** The product owner
|
|
13
|
+
7. **Gate: the product owner accepts or rejects the intent.** The product owner accepts by setting `Status: accepted.` and merging the pull request, or rejects by closing it; you do neither. Report the pull request's URL, keep it green as `AGENTS.md` says, and wait.
|
|
14
|
+
|
|
15
|
+
**Next:** `.agents/skills/sdlc/playbooks/design.md`; an agent; when the product owner has merged the intent's pull request and a person or a job asks for the spec.
|
|
14
16
|
|
|
15
17
|
## Template
|
|
16
18
|
|
|
@@ -4,3 +4,5 @@
|
|
|
4
4
|
2. Answer, citing `path:line` or command output for each claim, as the **Write replies a person can check** convention in `AGENTS.md` says.
|
|
5
5
|
3. Write no file, make no commit, push nothing, and post nothing to GitHub or another service.
|
|
6
6
|
4. When the answer shows work worth doing, offer it in one line, such as "Send `/sdlc write an intent for this` to start the change", and stop.
|
|
7
|
+
|
|
8
|
+
**Next:** none; the person; when they send a new message.
|