@novare-technologies/nvaid 0.0.0-stage → 0.1.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/README.md +137 -2
- package/dist/cli.js +476 -0
- package/package.json +46 -4
- package/templates/commands/apply.md +28 -0
- package/templates/commands/breakdown.md +27 -0
- package/templates/commands/contracts.md +35 -0
- package/templates/commands/intent.md +32 -0
- package/templates/nvaid/DESIGN-CODE-DICTIONARY.md +90 -0
- package/templates/nvaid/PROJECT-RULES.md +93 -0
- package/templates/nvaid/config.yml +74 -0
- package/templates/nvaid/intents/.gitkeep +0 -0
- package/templates/rules/ISSUE-TRACKER-TEMPLATE.md +221 -0
- package/templates/rules/backend-architecture-contract-generation-rules.md +56 -0
- package/templates/rules/customer-experience-contract-generation-rules.md +51 -0
- package/templates/rules/frontend-architecture-contract-generation-rules.md +56 -0
- package/templates/rules/quality-architecture-contract-generation-rules.md +86 -0
- package/templates/rules/solutions-architecture-contract-generation-rules.md +59 -0
- package/templates/rules/unit-breakdown-rules.md +121 -0
- package/templates/skills/backend/SKILL.md +34 -0
- package/templates/skills/customer-experience/SKILL.md +26 -0
- package/templates/skills/daily-construction-update/SKILL.md +27 -0
- package/templates/skills/frontend/SKILL.md +30 -0
- package/templates/skills/github/SKILL.md +142 -0
- package/templates/skills/pr-review/SKILL.md +119 -0
- package/templates/skills/project-ticketing/SKILL.md +26 -0
- package/templates/skills/quality/SKILL.md +31 -0
- package/templates/skills/r3-analytics/SKILL.md +26 -0
- package/templates/skills/release-plan/SKILL.md +27 -0
- package/templates/skills/solutions/SKILL.md +29 -0
- package/templates/skills/unit-breakdown/SKILL.md +31 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
document: Customer Experience Contract — Generation Rules
|
|
3
|
+
project: "{{PROJECT_NAME}}"
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
owner: "[Customer Experience Architect name]"
|
|
6
|
+
last_updated: "[YYYY-MM-DD]"
|
|
7
|
+
status: draft
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Customer Experience Contract: Generation Rules
|
|
11
|
+
|
|
12
|
+
**What this file is:** the rules the AI agent follows to draft a Customer Experience
|
|
13
|
+
Contract for an Intent, during Mob Elaboration Phases 2–5 — what triggers producing one,
|
|
14
|
+
and what it must contain when it does.
|
|
15
|
+
|
|
16
|
+
**What this file is not:** not the worked example —
|
|
17
|
+
`docs/templates/samples/contracts/customer-experience-contract.md` is the canonical
|
|
18
|
+
shape and sign-off format, filled in for `INTENT-004`. Not the draft/human-edit
|
|
19
|
+
relationship either — every generated contract is a starting framework, never a verdict;
|
|
20
|
+
see the AI-Native Engineering Model's §Mob Elaboration for how the Customer Experience
|
|
21
|
+
Architect accepts, extends, or simplifies it before Sign-Off.
|
|
22
|
+
|
|
23
|
+
**Companion files:** [unit-breakdown-rules.md](./unit-breakdown-rules.md) (same
|
|
24
|
+
Elaboration session). The other five `*-architecture-contract-generation-rules.md` files
|
|
25
|
+
are siblings, one per role.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 1. When This Contract Is Required
|
|
30
|
+
|
|
31
|
+
**Always.** Every Intent originates from, or must be validated against, a real business
|
|
32
|
+
need — the Customer Experience Architect is the one who closes that loop after the
|
|
33
|
+
technical contracts land, confirming the room's final shape still serves it.
|
|
34
|
+
|
|
35
|
+
## 2. Required Content
|
|
36
|
+
|
|
37
|
+
- **Reconciliation Against the Original Intent.** Where the final, technically-grounded
|
|
38
|
+
shape narrowed, resolved, or held unchanged against what `intent.md` originally said —
|
|
39
|
+
named explicitly, not silently absorbed into the acceptance criteria without comment.
|
|
40
|
+
- **Final Acceptance Criteria.** The technically-grounded version of the Intent's own
|
|
41
|
+
Success Criteria, incorporating what the other contracts actually committed to — not a
|
|
42
|
+
restatement of the Intent verbatim.
|
|
43
|
+
- **What "Done" Looks Like to the Business.** Tied to a concrete validation scenario, not
|
|
44
|
+
"the code merged."
|
|
45
|
+
- **Sign-Off.**
|
|
46
|
+
|
|
47
|
+
## 3. Change Log
|
|
48
|
+
|
|
49
|
+
| Version | Date | Change | Trigger |
|
|
50
|
+
|---|---|---|---|
|
|
51
|
+
| 0.1.0 | [date] | Initial version | Companion to the five sibling `*-contract-generation-rules.md` files |
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
document: Frontend Architecture Contract — Generation Rules
|
|
3
|
+
project: "{{PROJECT_NAME}}"
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
owner: "[Identity Access and Frontend Architect name]"
|
|
6
|
+
last_updated: "[YYYY-MM-DD]"
|
|
7
|
+
status: draft
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Frontend Architecture Contract: Generation Rules
|
|
11
|
+
|
|
12
|
+
**What this file is:** the rules the AI agent follows to draft a Frontend (Identity
|
|
13
|
+
Access and Frontend) Architecture Contract for an Intent, during Mob Elaboration Phases
|
|
14
|
+
2–5 — what triggers producing one, and what it must contain when it does.
|
|
15
|
+
|
|
16
|
+
**What this file is not:** not the worked example —
|
|
17
|
+
`docs/templates/samples/contracts/frontend-architecture-contract.md` is the canonical
|
|
18
|
+
shape and sign-off format, filled in for `INTENT-004`. Not the draft/human-edit
|
|
19
|
+
relationship either — every generated contract is a starting framework, never a verdict;
|
|
20
|
+
see the AI-Native Engineering Model's §Mob Elaboration for how the Identity Access and
|
|
21
|
+
Frontend Architect accepts, extends, or simplifies it before Sign-Off.
|
|
22
|
+
|
|
23
|
+
**Companion files:** [unit-breakdown-rules.md](./unit-breakdown-rules.md) (same
|
|
24
|
+
Elaboration session). The other five `*-architecture-contract-generation-rules.md` files
|
|
25
|
+
are siblings, one per role.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 1. When This Contract Is Required
|
|
30
|
+
|
|
31
|
+
Any Intent with at least one Unit touching the frontend (web or mobile), a design
|
|
32
|
+
system component, or an identity/access/RBAC/SSO surface. Skipped only for Intents with
|
|
33
|
+
zero user-facing or access-model impact — rare, since most Intents eventually surface
|
|
34
|
+
somewhere in the UI.
|
|
35
|
+
|
|
36
|
+
## 2. Required Content
|
|
37
|
+
|
|
38
|
+
- **Consumes.** Which Backend contract (if any) this one consumes verbatim, with
|
|
39
|
+
confirmation that no field is locally reinterpreted or renamed.
|
|
40
|
+
- **UI Flow.** The concrete step-by-step, tied to specific screens or components — not a
|
|
41
|
+
general description of the feature.
|
|
42
|
+
- **Shared Derivations, Sourced Not Re-Derived.** Point to the Backend contract's version
|
|
43
|
+
of anything both roles need (an ID derivation, a naming rule); never re-derive it
|
|
44
|
+
independently.
|
|
45
|
+
- **Identity / Access Implications.** Stated explicitly even when the answer is "none for
|
|
46
|
+
this Intent" — never left implicit. This is the one open risk area (SRS §9, no
|
|
47
|
+
RBAC/SSO in POC scope) most likely to get silently assumed away if it isn't required in
|
|
48
|
+
writing every time.
|
|
49
|
+
- **Components Touched (Design-Code Dictionary impact).**
|
|
50
|
+
- **Sign-Off.**
|
|
51
|
+
|
|
52
|
+
## 3. Change Log
|
|
53
|
+
|
|
54
|
+
| Version | Date | Change | Trigger |
|
|
55
|
+
|---|---|---|---|
|
|
56
|
+
| 0.1.0 | [date] | Initial version | Companion to the five sibling `*-contract-generation-rules.md` files |
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
document: Quality Architecture Contract — Generation Rules
|
|
3
|
+
project: "{{PROJECT_NAME}}"
|
|
4
|
+
version: 0.5.0
|
|
5
|
+
owner: "[Quality Architect name]"
|
|
6
|
+
last_updated: "[YYYY-MM-DD]"
|
|
7
|
+
status: draft
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Quality Architecture Contract: Generation Rules
|
|
11
|
+
|
|
12
|
+
**What this file is:** the rules the AI agent follows to draft a Quality Architecture
|
|
13
|
+
Contract for an Intent, during Mob Elaboration Phases 2–5 — what triggers producing one,
|
|
14
|
+
and what it must contain when it does. This file owns the **Intent-Specific Gates** only
|
|
15
|
+
(`PROJECT-RULES.md` §5.2) — content that's regenerated fresh per Intent. It does not
|
|
16
|
+
define, and a generated contract must never redefine, the **Solution-Specific Gates**
|
|
17
|
+
(Build, Code Coverage, Code Quality, Reusability/Duplication, Regression Test, SAST) —
|
|
18
|
+
those are fixed codebase-wide thresholds set once in §5.2, not something any single
|
|
19
|
+
Intent opts into or out of.
|
|
20
|
+
|
|
21
|
+
**What this file is not:** not the worked example —
|
|
22
|
+
`docs/templates/samples/contracts/quality-architecture-contract.md` is the canonical
|
|
23
|
+
shape and sign-off format, filled in for `INTENT-004`. Not the draft/human-edit
|
|
24
|
+
relationship either — every generated contract is a starting framework, never a verdict;
|
|
25
|
+
see the AI-Native Engineering Model's §Mob Elaboration for how the Quality Architect
|
|
26
|
+
accepts, extends, or simplifies it before Sign-Off.
|
|
27
|
+
|
|
28
|
+
**Companion files:** [unit-breakdown-rules.md](./unit-breakdown-rules.md) (same
|
|
29
|
+
Elaboration session). The other five `*-architecture-contract-generation-rules.md` files
|
|
30
|
+
are siblings, one per role.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 1. When This Contract Is Required
|
|
35
|
+
|
|
36
|
+
**Almost always.** Any Intent that reaches Implementation (Fig. 2 Stage 6) at all gets a
|
|
37
|
+
Quality Architecture Contract. The rare exception is an Intent whose Units are pure
|
|
38
|
+
documentation or process changes with no code path to test.
|
|
39
|
+
|
|
40
|
+
## 2. Required Content
|
|
41
|
+
|
|
42
|
+
- **Required Test Coverage table.** One row per meaningful scenario, and — this is the
|
|
43
|
+
load-bearing rule, not a formatting preference — **every row traces to one of the
|
|
44
|
+
owning Unit's own stated Acceptance Criteria** (`unit-XXX-design.md`, per
|
|
45
|
+
`unit-breakdown-rules.md` §2), not surfaced independently from Elaboration discussion
|
|
46
|
+
and hoped to line up. Each row is also classified by type — never left as an unlabeled
|
|
47
|
+
list:
|
|
48
|
+
- **Happy Path** — the primary success scenario(s).
|
|
49
|
+
- **Negative Path** — deliberate invalid input, with a specific expected failure
|
|
50
|
+
response (not just "it errors").
|
|
51
|
+
- **Edge Case** — a boundary condition or ambiguous scenario that's neither a clean
|
|
52
|
+
success nor a clean rejection. This is where a Known Gap most often originates — see
|
|
53
|
+
below.
|
|
54
|
+
|
|
55
|
+
**Both directions of the trace are checked, not just one:** every Acceptance
|
|
56
|
+
Criterion gets at least one covering row, and every row names the criterion it
|
|
57
|
+
verifies — or is marked explicitly supplementary rather than left looking like
|
|
58
|
+
undocumented coverage. A criterion with no covering row is a Known Gap, logged below,
|
|
59
|
+
not silently assumed to be "probably fine." The worked example demonstrates exactly
|
|
60
|
+
this: one row in `quality-architecture-contract.md` traces to nothing, which is how
|
|
61
|
+
its Known Gap got caught rather than missed.
|
|
62
|
+
|
|
63
|
+
Collectively, this table is what `PROJECT-RULES.md` §5.2's Unit Test Gate (and, where
|
|
64
|
+
more than one component is touched, the Integration Test Gate) run against — both
|
|
65
|
+
Intent-Specific. See §5.2 for the full nine-gate taxonomy and where the line sits
|
|
66
|
+
against the six fixed Solution-Specific gates this file never touches.
|
|
67
|
+
- **NFRs in Scope (Intent NFR gate).** Which of the SRS's existing non-functional
|
|
68
|
+
requirements this Intent's Units are held to, *beyond* the solution-wide baseline
|
|
69
|
+
§5.2 already sets; state "none beyond the standing baseline" explicitly when true,
|
|
70
|
+
rather than leaving the section blank.
|
|
71
|
+
- **Known Gaps.** Anything the room identified as untested and consciously accepted —
|
|
72
|
+
flagged, not silently dropped. Matches the worked example's `{user}`-derivation
|
|
73
|
+
collision gap.
|
|
74
|
+
- **Definition of Done addition**, specific to this Intent, beyond `PROJECT-RULES.md`
|
|
75
|
+
§5.1's standing checklist — only if this Intent actually needs one.
|
|
76
|
+
- **Sign-Off.**
|
|
77
|
+
|
|
78
|
+
## 3. Change Log
|
|
79
|
+
|
|
80
|
+
| Version | Date | Change | Trigger |
|
|
81
|
+
|---|---|---|---|
|
|
82
|
+
| 0.1.0 | [date] | Initial version | Companion to the five sibling `*-contract-generation-rules.md` files |
|
|
83
|
+
| 0.2.0 | [date] | Required Test Coverage rows must now be classified Happy Path / Negative Path / Edge Case, and explicitly tied to `PROJECT-RULES.md` §5.2's Unit/Integration Test Gates | Quality gate types were unspecified; §5.2 was a placeholder |
|
|
84
|
+
| 0.3.0 | [date] | Scoped this file to Intent-Specific Gates only; Solution-Specific Gates (Code Coverage, Code Quality, Reusability, SAST, Build) are fixed in §5.2 and out of scope for any generated contract | Gate taxonomy split into Intent-Specific vs. Solution-Specific categories |
|
|
85
|
+
| 0.4.0 | [date] | Required Test Coverage rows must now trace to the owning Unit's stated Acceptance Criteria in both directions — every criterion covered, every row justified | Should a Unit's acceptance criteria be the same thing its unit tests are based on? |
|
|
86
|
+
| 0.5.0 | [date] | Solution-Specific gate list now includes Regression Test (added in `PROJECT-RULES.md` §5.2) — six fixed gates, nine total | Should Quality Gates include a card for regression testing? |
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
document: Solutions Architecture Contract — Generation Rules
|
|
3
|
+
project: "{{PROJECT_NAME}}"
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
owner: "[Solutions Architect name]"
|
|
6
|
+
last_updated: "[YYYY-MM-DD]"
|
|
7
|
+
status: draft
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Solutions Architecture Contract: Generation Rules
|
|
11
|
+
|
|
12
|
+
**What this file is:** the rules the AI agent follows to draft a Solutions Architecture
|
|
13
|
+
Contract for an Intent, during Mob Elaboration Phases 2–5 — what triggers producing one,
|
|
14
|
+
and what it must contain when it does.
|
|
15
|
+
|
|
16
|
+
**What this file is not:** not the worked example —
|
|
17
|
+
`docs/templates/samples/contracts/solutions-architecture-contract.md` is the canonical
|
|
18
|
+
shape and sign-off format, filled in for `INTENT-004`. Not the draft/human-edit
|
|
19
|
+
relationship either — every generated contract is a starting framework, never a verdict;
|
|
20
|
+
see the AI-Native Engineering Model's §Mob Elaboration for how the Solutions Architect
|
|
21
|
+
accepts, extends, or simplifies it before Sign-Off.
|
|
22
|
+
|
|
23
|
+
**Companion files:** [unit-breakdown-rules.md](./unit-breakdown-rules.md) (same
|
|
24
|
+
Elaboration session). The other five `*-architecture-contract-generation-rules.md` files
|
|
25
|
+
are siblings, one per role.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 1. When This Contract Is Required
|
|
30
|
+
|
|
31
|
+
**Always.** Every Intent gets a Solutions Architecture Contract, even when the honest
|
|
32
|
+
assessment is "no cross-cutting impact, no new ADR needed." This is the one contract
|
|
33
|
+
never marked "not pulled in" — someone has to always confirm nothing systemic was
|
|
34
|
+
missed, and that confirmation *is* the contract. An empty-looking assessment is a
|
|
35
|
+
completed one, not a skipped one.
|
|
36
|
+
|
|
37
|
+
## 2. Required Content
|
|
38
|
+
|
|
39
|
+
- **System-Level Assessment.** Does this Intent introduce a new system container, cross
|
|
40
|
+
a boundary named in the SRS's System Containers (Fig. 2), or need a new ADR? State the
|
|
41
|
+
answer plainly, including when it's "no" on every count — don't omit the section
|
|
42
|
+
because the answer is negative.
|
|
43
|
+
- **What This Intent Is Allowed to Touch.** An explicit boundary statement: which
|
|
44
|
+
containers/components are in scope for this Intent's Units of Work, and which are
|
|
45
|
+
explicitly out.
|
|
46
|
+
- **AI-Agent Guardrail Implications.** Does this Intent introduce any unsupervised-action
|
|
47
|
+
surface `PROJECT-RULES.md` §7 doesn't already cover — a new destructive operation, a
|
|
48
|
+
new external API call, a new credential path? Flag it explicitly; don't assume the
|
|
49
|
+
existing rules cover a case they were never written against.
|
|
50
|
+
- **Cross-Role Consistency Check.** Confirms the other contracts produced this session
|
|
51
|
+
don't contradict each other — this is the Solutions Architect's half of Phase 6's
|
|
52
|
+
Consistency Gate, recorded in writing rather than only spoken in the room.
|
|
53
|
+
- **Sign-Off.**
|
|
54
|
+
|
|
55
|
+
## 3. Change Log
|
|
56
|
+
|
|
57
|
+
| Version | Date | Change | Trigger |
|
|
58
|
+
|---|---|---|---|
|
|
59
|
+
| 0.1.0 | [date] | Initial version | Companion to the five sibling `*-contract-generation-rules.md` files |
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
document: Unit of Work Decomposition Rules
|
|
3
|
+
project: "{{PROJECT_NAME}}"
|
|
4
|
+
version: 0.2.0
|
|
5
|
+
owner: "[Process Facilitator name]"
|
|
6
|
+
last_updated: "[YYYY-MM-DD]"
|
|
7
|
+
status: draft
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Unit of Work Decomposition Rules
|
|
11
|
+
|
|
12
|
+
**What this file is:** the rules the AI agent follows when proposing a Unit of Work
|
|
13
|
+
breakdown at Mob Elaboration Phase 2 (Strawman Review) — how to cut one Intent into
|
|
14
|
+
Units, how to classify each Unit as a Story or a Bug, and the sizing signals that say a
|
|
15
|
+
strawman is cut wrong before the room spends time negotiating around a bad boundary.
|
|
16
|
+
|
|
17
|
+
**What this file is not:** not the ticket field shape (`ISSUE-TRACKER-TEMPLATE.md`
|
|
18
|
+
governs that), not the ceremony's choreography (the AI-Native Engineering Model's
|
|
19
|
+
§ Mob Elaboration governs that), not the Intent template itself. This file governs
|
|
20
|
+
one specific judgment call: given an approved Intent, what its Units of Work are.
|
|
21
|
+
|
|
22
|
+
**Companion files:** [ISSUE-TRACKER-TEMPLATE.md](./ISSUE-TRACKER-TEMPLATE.md) is where a
|
|
23
|
+
Unit of Work, once decided here, becomes a ticket. [PROJECT-RULES.md](./PROJECT-RULES.md)
|
|
24
|
+
§7 rule 12 is the operating rule this file implements.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 1. What a Unit of Work Is
|
|
29
|
+
|
|
30
|
+
The smallest slice of an Intent that can be:
|
|
31
|
+
|
|
32
|
+
- **designed** by one owning role, without needing another role's design to already
|
|
33
|
+
exist first (though it may *reference* another role's contract),
|
|
34
|
+
- **gated** independently at Fig. 2's Stage 5 (Per-Unit Design Approved) and Stage 8
|
|
35
|
+
(Merge Approval), without waiting on a sibling Unit's gate, and
|
|
36
|
+
- **implemented** by the AI agent in one sitting, without losing the earlier reasoning
|
|
37
|
+
in its own context (`PROJECT-RULES.md` §7 rule 8, scope discipline).
|
|
38
|
+
|
|
39
|
+
A Unit of Work is never split further inside the ticket tracker by default
|
|
40
|
+
(`ISSUE-TRACKER-TEMPLATE.md` §2) — the Unit boundary *is* the atomic boundary. If a
|
|
41
|
+
"Unit" doesn't fit in one sitting, it was cut wrong; fix the cut, don't add sub-tasks
|
|
42
|
+
around it.
|
|
43
|
+
|
|
44
|
+
## 2. Acceptance Criteria — every Unit states its own
|
|
45
|
+
|
|
46
|
+
A Unit of Work carries its own Acceptance Criteria, stated once in its design doc
|
|
47
|
+
(`unit-XXX-design.md`, Fig. 2 Stage 4) — narrowed from the Intent's own Success Criteria
|
|
48
|
+
(`intent.md`) down to just this Unit's slice. Not a restatement of the whole Intent's
|
|
49
|
+
criteria on every Unit; each Unit states only the part of "done" that's actually its own
|
|
50
|
+
to satisfy.
|
|
51
|
+
|
|
52
|
+
**The traceability rule this exists to enforce:** the Quality Architecture Contract's
|
|
53
|
+
Required Test Coverage table (`quality-architecture-contract-generation-rules.md` §2) is
|
|
54
|
+
generated *from* this list, not surfaced independently and hoped to line up. Every
|
|
55
|
+
stated Acceptance Criterion gets at least one Happy Path, Negative Path, or Edge Case
|
|
56
|
+
test row that verifies it; every test row traces back to a criterion it verifies, or is
|
|
57
|
+
marked explicitly supplementary rather than left looking like undocumented coverage. A
|
|
58
|
+
criterion with no covering test row is a Known Gap (`PROJECT-RULES.md` §6) the same way
|
|
59
|
+
an untested edge case already is — not silently assumed to be "probably fine."
|
|
60
|
+
|
|
61
|
+
Without a named source, a Unit's tests and its actual "done" bar are two independently
|
|
62
|
+
populated lists that happen to usually agree — right up until they don't. This is the
|
|
63
|
+
rule that closes that gap. See the worked example: `unit-004-02-backend-design.md`'s
|
|
64
|
+
four Acceptance Criteria are what `quality-architecture-contract.md`'s test table
|
|
65
|
+
traces to, row by row — including the one row that traces to nothing, which is exactly
|
|
66
|
+
how that Unit's Known Gap got caught instead of missed.
|
|
67
|
+
|
|
68
|
+
## 3. Story or Bug — the classification rule
|
|
69
|
+
|
|
70
|
+
Every Unit of Work is exactly one of these two ticket types. Classify per Unit, not per
|
|
71
|
+
Intent — one Intent can produce a mix of both.
|
|
72
|
+
|
|
73
|
+
| Classify as | When | Example |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| **Story** | The Unit adds or changes a capability — net-new or intentionally different behavior | The branch-override selector itself (`UNIT-004-01`) |
|
|
76
|
+
| **Bug** | The Unit brings existing, already-shipped behavior back in line with a spec, contract, or FR it currently violates | A previously merged Unit's `{user}` derivation collides on two usernames in production |
|
|
77
|
+
|
|
78
|
+
**Boundary case:** a defect found *during* Construction of a Story, before that Story's
|
|
79
|
+
own Merge Approval, is fixed inside that same Unit — it does not spin out as a separate
|
|
80
|
+
Bug. Only a defect discovered *after* a Unit has already merged becomes its own Bug-type
|
|
81
|
+
Unit — under a fast, often single-Unit Intent of its own, or folded into a Known Gap per
|
|
82
|
+
`PROJECT-RULES.md` §6 if it isn't urgent enough to justify a full Mob Elaboration pass by
|
|
83
|
+
itself.
|
|
84
|
+
|
|
85
|
+
## 4. Decomposition Heuristics
|
|
86
|
+
|
|
87
|
+
Applied by the AI agent when proposing the Phase 2 strawman, and by the room when
|
|
88
|
+
critiquing it:
|
|
89
|
+
|
|
90
|
+
- **One primary owning role per Unit.** If a Unit's design would need two Architects to
|
|
91
|
+
co-author it, it's two Units connected by a contract, not one Unit that spans both.
|
|
92
|
+
This is what turns Fig. 2 Stage 4 into "×N roles in parallel" instead of one
|
|
93
|
+
tangled design.
|
|
94
|
+
- **A shared dependency is a contract, not a split.** When two Units both need the same
|
|
95
|
+
answer to something (the worked example's `{user}` derivation rule), that answer is
|
|
96
|
+
negotiated once, in a contract, and referenced by both — never independently
|
|
97
|
+
re-derived, and never used as a reason to merge the two Units into one.
|
|
98
|
+
- **Size to one sitting.** If a Unit's own design doc is trending toward the size of
|
|
99
|
+
several of the worked examples combined, that's a smell the Unit is actually two.
|
|
100
|
+
- **Don't split to satisfy an org chart.** A Unit boundary is justified by an
|
|
101
|
+
independent design-and-gate need, never by "everyone should have something to own."
|
|
102
|
+
Splitting a naturally single-role, single-behavior change into two Units just to give
|
|
103
|
+
a second role a ticket produces busywork, not independence.
|
|
104
|
+
- **Watch the Unit count as a signal, not a rule.** One Unit for an Intent that went
|
|
105
|
+
through full Joint Elaboration is a sign the Intent probably didn't need the
|
|
106
|
+
cross-role machinery at all. More than roughly six to eight Units is a sign the
|
|
107
|
+
"Intent" was actually several Intents bundled together and should have been split
|
|
108
|
+
before Elaboration, not after.
|
|
109
|
+
|
|
110
|
+
## 5. Numbering
|
|
111
|
+
|
|
112
|
+
`UNIT-<INTENT-NUMBER>-<sequence>`, zero-padded two digits — `UNIT-004-01`,
|
|
113
|
+
`UNIT-004-02`, matching the worked example in `docs/templates/samples/`. Sequence order
|
|
114
|
+
follows the order Units are listed in `unit-breakdown.md`, not build or gate order.
|
|
115
|
+
|
|
116
|
+
## 6. Change Log
|
|
117
|
+
|
|
118
|
+
| Version | Date | Change | Trigger |
|
|
119
|
+
|---|---|---|---|
|
|
120
|
+
| 0.1.0 | [date] | Initial version | Clarifying how Units of Work get decomposed, classified (Story/Bug), and sized, separate from how they're ticketed |
|
|
121
|
+
| 0.2.0 | [date] | Added §2: every Unit states its own Acceptance Criteria, and the Quality Architecture Contract's test coverage table must trace to them, not be surfaced independently | Should a Unit's acceptance criteria be the same thing its unit tests are based on? |
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: backend
|
|
3
|
+
description: Drafts the Backend Architecture Contract for an Intent, per backend-architecture-contract-generation-rules.md. Use when asked to run the Backend Skill or draft a Backend contract during Mob Elaboration.
|
|
4
|
+
invoked_by: Mob Elaboration (Ceremony 1), Phases 2–5
|
|
5
|
+
output: file — nvaid/intents/<INTENT-ID>/contracts/backend-architecture-contract.md
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Backend Skill
|
|
9
|
+
|
|
10
|
+
Drafts the Backend Architecture Contract for an Intent, per
|
|
11
|
+
`{{AIDLC_ROOT}}/backend-architecture-contract-generation-rules.md` — the shapes every
|
|
12
|
+
consuming role (most often Frontend) reproduces verbatim rather than re-deriving.
|
|
13
|
+
|
|
14
|
+
## Steps
|
|
15
|
+
|
|
16
|
+
1. Confirm this Intent has at least one Unit touching the backend — an API/service layer,
|
|
17
|
+
an async worker, a data schema, or any server-side component — if none do, this
|
|
18
|
+
contract is not produced; state that plainly rather than leaving the file absent
|
|
19
|
+
with no explanation.
|
|
20
|
+
2. Write the full API Contract Exposed for any new or changed endpoint — request and
|
|
21
|
+
response shape, including error cases (4xx/5xx), not just the happy path.
|
|
22
|
+
3. Define every Shared Derivation Rule (a naming rule, an ID derivation) exactly once
|
|
23
|
+
here; never let a consuming role re-derive it independently.
|
|
24
|
+
4. State Data Model Touches — which tables/columns are written, and whether a migration
|
|
25
|
+
is needed.
|
|
26
|
+
5. List components touched (Design-Code Dictionary impact).
|
|
27
|
+
6. State what this contract deliberately excludes — anything the room discussed and
|
|
28
|
+
explicitly deferred, named rather than silently dropped.
|
|
29
|
+
7. Write `nvaid/intents/<INTENT-ID>/contracts/backend-architecture-contract.md`.
|
|
30
|
+
|
|
31
|
+
## Boundaries
|
|
32
|
+
|
|
33
|
+
- A draft, not a verdict — flag it awaiting the Backend Solutions Architect's Sign-Off;
|
|
34
|
+
never present it as final.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: customer-experience
|
|
3
|
+
description: Drafts the Customer Experience Contract for an Intent, per customer-experience-contract-generation-rules.md. Use when asked to run the Customer Experience Skill or draft a Customer Experience contract during Mob Elaboration.
|
|
4
|
+
invoked_by: Mob Elaboration (Ceremony 1), Phases 2–5
|
|
5
|
+
output: file — intents/<INTENT-ID>/contracts/customer-experience-contract.md
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Customer Experience Skill
|
|
9
|
+
|
|
10
|
+
Drafts the Customer Experience Contract for an Intent, per
|
|
11
|
+
`docs/templates/customer-experience-contract-generation-rules.md` — reconciling what the
|
|
12
|
+
room actually committed to against what `intent.md` originally asked for.
|
|
13
|
+
|
|
14
|
+
## Steps
|
|
15
|
+
|
|
16
|
+
1. Name explicitly where the final, technically-grounded shape narrowed, resolved, or
|
|
17
|
+
held unchanged against the original Intent — never silently absorbed.
|
|
18
|
+
2. Write the Final Acceptance Criteria: the Intent's Success Criteria, incorporating
|
|
19
|
+
what the other contracts actually committed to, not a verbatim restatement.
|
|
20
|
+
3. Tie "done" to a concrete validation scenario, never just "the code merged."
|
|
21
|
+
4. Write `intents/<INTENT-ID>/contracts/customer-experience-contract.md`.
|
|
22
|
+
|
|
23
|
+
## Boundaries
|
|
24
|
+
|
|
25
|
+
- A draft, not a verdict — flag it awaiting the Customer Experience Architect's
|
|
26
|
+
Sign-Off; never present it as final.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: daily-construction-update
|
|
3
|
+
description: Generates the daily three-question Construction digest (Completed / In Progress / Impediments) and publishes it to Wiki.js. Use when asked to run the Daily Construction Update Skill or produce today's construction update.
|
|
4
|
+
invoked_by: Mob Construction (Ceremony 2) — background, no meeting
|
|
5
|
+
output: link — a Wiki.js page, updated in place
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Daily Construction Update Skill
|
|
9
|
+
|
|
10
|
+
Replaces the Daily Standup with a generated report about Construction's ongoing work.
|
|
11
|
+
The work itself keeps no fixed cadence — that doesn't change. What runs daily is the
|
|
12
|
+
report, not the work.
|
|
13
|
+
|
|
14
|
+
## Steps
|
|
15
|
+
|
|
16
|
+
1. Query every in-flight Unit's ticket and gate status.
|
|
17
|
+
2. Compose the three-question digest, translated from the standup's own questions:
|
|
18
|
+
**Completed** (Units Merged, Intents that became Shippable since the last update),
|
|
19
|
+
**In progress** (current WIP — Design, Building, Gates), **Impediments** (stalled
|
|
20
|
+
Units, repeated gate failures, anything flagged as a Known Gap).
|
|
21
|
+
3. Publish to the team's Wiki.js page, updated in place — never a chat message that
|
|
22
|
+
scrolls out of reach.
|
|
23
|
+
|
|
24
|
+
## Boundaries
|
|
25
|
+
|
|
26
|
+
- Never block or gate a Unit's progress — only report state, the same way a daily sales
|
|
27
|
+
report doesn't stop the sales.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontend
|
|
3
|
+
description: Drafts the Frontend Architecture Contract for an Intent, per frontend-architecture-contract-generation-rules.md. Use when asked to run the Frontend Skill or draft a Frontend contract during Mob Elaboration.
|
|
4
|
+
invoked_by: Mob Elaboration (Ceremony 1), Phases 2–5
|
|
5
|
+
output: file — intents/<INTENT-ID>/contracts/frontend-architecture-contract.md
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Frontend Skill
|
|
9
|
+
|
|
10
|
+
Drafts the Frontend Architecture Contract for an Intent, per
|
|
11
|
+
`docs/templates/frontend-architecture-contract-generation-rules.md` — consuming the
|
|
12
|
+
Backend contract's shapes verbatim rather than reinterpreting them.
|
|
13
|
+
|
|
14
|
+
## Steps
|
|
15
|
+
|
|
16
|
+
1. Name which Backend contract this one consumes, and confirm no field is locally
|
|
17
|
+
reinterpreted or renamed.
|
|
18
|
+
2. Write the concrete UI flow, tied to specific screens or components, not a general
|
|
19
|
+
feature description.
|
|
20
|
+
3. Point to the Backend contract's version of any shared derivation instead of
|
|
21
|
+
re-deriving it independently.
|
|
22
|
+
4. State Identity/Access implications explicitly, even when "none for this Intent" —
|
|
23
|
+
never left implicit.
|
|
24
|
+
5. List components touched (Design-Code Dictionary impact).
|
|
25
|
+
6. Write `intents/<INTENT-ID>/contracts/frontend-architecture-contract.md`.
|
|
26
|
+
|
|
27
|
+
## Boundaries
|
|
28
|
+
|
|
29
|
+
- A draft, not a verdict — flag it awaiting the Frontend Architect's Sign-Off; never
|
|
30
|
+
present it as final.
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github
|
|
3
|
+
description: Branches (feature/bugfix/hotfix/intent/chore, mapped to ticket or Intent IDs, or a slug for repo tooling), commits, opens pull requests, checks CI, self-reviews before requesting human review, iterates on review comments, and hands off to manual merge approval, following this repo's master/develop Git Flow. Use when asked to run the GitHub Skill, start work on a ticket or an Intent, push a Unit's work, do repo tooling/config work, open or update a pull request, address review comments, or check CI status.
|
|
4
|
+
invoked_by: Mob Construction (Ceremony 2), and Mob Elaboration (Ceremony 1) for its own intent/ branches
|
|
5
|
+
output: link — a GitHub pull request
|
|
6
|
+
version: 5.0
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# GitHub Skill
|
|
10
|
+
|
|
11
|
+
The procedure Mob Construction invokes to touch the repository — the same steps, every
|
|
12
|
+
Unit, every time. Covers the full loop: branch → commit → PR → self-review → human
|
|
13
|
+
review → iterate → manual merge. This Skill never merges anything itself.
|
|
14
|
+
|
|
15
|
+
## Branch model (Git Flow)
|
|
16
|
+
|
|
17
|
+
- **`master`** — the default, production branch. Nothing commits here directly; it only
|
|
18
|
+
moves forward via an approved release merge from `develop`, or a hotfix.
|
|
19
|
+
- **`develop`** — the integration branch. Every feature and bugfix branch is cut from
|
|
20
|
+
here and merges back here.
|
|
21
|
+
- **`feature/<story-id>`** — new capability, cut from `develop`. `<story-id>` is the
|
|
22
|
+
GitHub Project story ID this Unit's ticket carries — e.g. `feature/142`. Add a short
|
|
23
|
+
slug if the ID alone reads as opaque in a long branch list: `feature/142-branch-override`.
|
|
24
|
+
- **`bugfix/<bug-id>`** — fixes a Bug-classified ticket found before release, cut from
|
|
25
|
+
`develop`, same ID convention as `feature/`.
|
|
26
|
+
- **`hotfix/<slug>`** — an emergency fix to what's already in production, cut from
|
|
27
|
+
`master` directly (the one exception to "always branch from develop"), merged back
|
|
28
|
+
into **both** `master` and `develop` so the fix isn't lost on the next release. No
|
|
29
|
+
Unit exists yet when this starts — run the Unit Breakdown Skill retroactively to log
|
|
30
|
+
one once the fix is in.
|
|
31
|
+
- **`intent/<intent-id>-<slug>`** — Mob Elaboration's own output, cut from `develop`:
|
|
32
|
+
`intent.md` itself, `unit-breakdown.md`, and the per-role `contracts/` files. Not a
|
|
33
|
+
Construction branch type — nothing here is code, so treating it as `feature/` would
|
|
34
|
+
misdescribe what actually changed and would demand a Story ID that doesn't exist yet
|
|
35
|
+
(a Unit of Work isn't decided until Elaboration produces `unit-breakdown.md` in the
|
|
36
|
+
first place). Review on this branch's PR is the CX Architect (or relevant Architect)
|
|
37
|
+
reading the artifact for content, not CI verifying code — the gates still run, but
|
|
38
|
+
pass on a markdown-only diff as a no-op, not as a meaningful check of anything.
|
|
39
|
+
Example: `intent/001-login-navigation-shell`.
|
|
40
|
+
- **`chore/<slug>`** — repo tooling, config, or meta work with no application code and
|
|
41
|
+
no Unit of Work behind it: a new Skill, a CI/CD workflow change, a convention update
|
|
42
|
+
(this branch type's own addition was one). Cut from `develop`, same as `feature`/
|
|
43
|
+
`bugfix`. This was already the de facto convention across every tooling PR in this
|
|
44
|
+
repo before being written down here — `chore/ci-setup`, `chore/verify-bot-identity`,
|
|
45
|
+
`chore/manual-deploy-trigger`, `chore/pr-review-skill`, `chore/pr-title-convention`,
|
|
46
|
+
`chore/reconcile-spec-planning`, and others all predate this entry. This documents
|
|
47
|
+
existing practice, not a new rule nobody's followed yet.
|
|
48
|
+
|
|
49
|
+
## Steps
|
|
50
|
+
|
|
51
|
+
### 1. Branch
|
|
52
|
+
|
|
53
|
+
Cut the branch per the model above, named by type and ticket ID (or Intent ID, for
|
|
54
|
+
`intent/`) so what's happening is visible in the branch list itself. Never commit
|
|
55
|
+
directly to `master` or `develop`.
|
|
56
|
+
|
|
57
|
+
### 2. Commit
|
|
58
|
+
|
|
59
|
+
One commit per meaningful step, not one giant diff, using Conventional Commits scoped
|
|
60
|
+
to the Unit:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
<type>(<unit-id>): <what changed, imperative mood>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
`<type>` is `feat`, `fix`, `refactor`, `test`, or `chore`. Example:
|
|
67
|
+
`feat(unit-004-02): add branch-override endpoint with slot-limit check`.
|
|
68
|
+
|
|
69
|
+
On an `intent/` branch there's no Unit ID yet to scope to — use `docs: draft
|
|
70
|
+
INTENT-XXX — <short title>` instead (no parenthesized scope). On a `chore/` branch
|
|
71
|
+
there's no Unit ID either, since there's no Unit of Work behind tooling/config changes —
|
|
72
|
+
use a plain `chore: <what changed, imperative mood>`, no parenthesized scope.
|
|
73
|
+
|
|
74
|
+
### 3. Open the pull request
|
|
75
|
+
|
|
76
|
+
Target `develop` (or `master` for a `hotfix/`). The PR body links the Unit's design doc
|
|
77
|
+
and its Quality Architecture Contract, and lists which Acceptance Criteria this PR
|
|
78
|
+
closes. Request the owning Architect (the human) as reviewer explicitly — never leave
|
|
79
|
+
the reviewer field empty.
|
|
80
|
+
|
|
81
|
+
**PR title format** — bracket tags, not a Conventional Commit prefix. Commits keep the
|
|
82
|
+
`<type>(<unit-id>):` style from step 2; the PR *title* uses this readable form instead:
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
[TYPE][TARGET][TICKET] <plain readable summary>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
- **`[TYPE]`** — the work type, mapped from the commit type:
|
|
89
|
+
`feat → [FEATURE]`, `fix → [FIX]`, `chore → [CHORE]`, `refactor → [REFACTOR]`,
|
|
90
|
+
`test → [TEST]`, `docs → [DOCS]`.
|
|
91
|
+
- **`[TARGET]`** — the base branch this PR merges into:
|
|
92
|
+
`develop → [DEV]`, UAT branch → `[UAT]`, `master → [PROD]`.
|
|
93
|
+
- **`[TICKET]`** — the ticket ID this Unit carries: the `UNIT-XXX-YY` Story/Bug
|
|
94
|
+
(e.g. `[UNIT-004-02]`), or the `INTENT-XXX` Epic when the PR spans the whole Intent.
|
|
95
|
+
These are the IDs from `{{AIDLC_ROOT}}/ISSUE-TRACKER-TEMPLATE.md`, mirrored into the GitHub
|
|
96
|
+
Project. **Omit this tag entirely** when the change has no ticket (e.g. repo tooling or
|
|
97
|
+
config) — never write an empty `[]`.
|
|
98
|
+
- **`<summary>`** — a plain, human-readable sentence under ~70 chars. No `type:` prefix.
|
|
99
|
+
|
|
100
|
+
Examples:
|
|
101
|
+
- `[FEATURE][DEV][UNIT-004-01] Add branch-override selector to the environment form`
|
|
102
|
+
- `[FIX][PROD][UNIT-004-02] Correct username derivation collision`
|
|
103
|
+
- `[CHORE][DEV] Replicate Claude skills to Kiro` *(no ticket → no third tag)*
|
|
104
|
+
|
|
105
|
+
### 4. Self-review before asking for human time
|
|
106
|
+
|
|
107
|
+
Before flagging for human review, re-read the diff once against the Unit's own
|
|
108
|
+
Acceptance Criteria and the Quality Architecture Contract's Required Test Coverage
|
|
109
|
+
table. Catch what's catchable here — a missing negative-path test, an unhandled error
|
|
110
|
+
case — so the human's review time goes to judgment calls, not things this Skill could
|
|
111
|
+
have caught itself.
|
|
112
|
+
|
|
113
|
+
### 5. Poll CI, self-correct on failure
|
|
114
|
+
|
|
115
|
+
On a Guardrail Gate failure, self-correct and push again. Never ask for review while a
|
|
116
|
+
gate is red.
|
|
117
|
+
|
|
118
|
+
### 6. Iterate on review comments
|
|
119
|
+
|
|
120
|
+
Once the human leaves review comments (`gh pr view <n> --comments` or the GitHub MCP
|
|
121
|
+
server's structured comment tools, if configured):
|
|
122
|
+
|
|
123
|
+
1. Read every open thread before changing anything — don't react comment-by-comment in
|
|
124
|
+
isolation when they interact.
|
|
125
|
+
2. Address each with a targeted commit, not a rewrite of the whole diff.
|
|
126
|
+
3. Reply to each thread stating what changed, then re-request review. Never mark a
|
|
127
|
+
thread resolved that this Skill left open-ended or partially addressed.
|
|
128
|
+
|
|
129
|
+
### 7. Hand off to Merge Approval
|
|
130
|
+
|
|
131
|
+
Once review is approved and every gate is green, flag the PR ready. Stop there. For a
|
|
132
|
+
`hotfix/`, note explicitly in the PR that a second merge into `develop` is still needed
|
|
133
|
+
after `master` receives this one — never assume the human will remember to ask for it.
|
|
134
|
+
|
|
135
|
+
## Boundaries
|
|
136
|
+
|
|
137
|
+
- Never merge the pull request, and never approve its own PR — Merge Approval is a
|
|
138
|
+
human gate this Skill can reach but not cross. (Repo branch protection enforces this
|
|
139
|
+
independently of this instruction.)
|
|
140
|
+
- Never commit directly to `master` or `develop` — always through a typed branch, even
|
|
141
|
+
for a one-line fix.
|
|
142
|
+
- Never resolve a review thread on the human's behalf.
|