godpowers 1.0.0 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +106 -5
- package/README.md +10 -6
- package/RELEASE.md +39 -23
- package/SKILL.md +9 -0
- package/agents/god-architect.md +17 -1
- package/agents/god-auditor.md +67 -6
- package/agents/god-docs-writer.md +5 -0
- package/agents/god-explorer.md +38 -2
- package/agents/god-orchestrator.md +24 -4
- package/agents/god-pm.md +10 -0
- package/agents/god-roadmapper.md +11 -0
- package/agents/god-stack-selector.md +8 -0
- package/lib/README.md +73 -21
- package/lib/artifact-linter.js +3 -1
- package/lib/have-nots-validator.js +174 -0
- package/package.json +8 -4
- package/references/HAVE-NOTS.md +24 -0
- package/references/building/README.md +7 -9
- package/references/planning/README.md +11 -8
- package/references/shipping/README.md +11 -10
- package/routing/god-mode.yaml +2 -1
- package/routing/god-preflight.yaml +36 -0
- package/routing/recipes/bluefield-org-aware.yaml +2 -0
- package/routing/recipes/brownfield-onboarding.yaml +4 -2
- package/skills/god-discuss.md +30 -6
- package/skills/god-doctor.md +2 -2
- package/skills/god-init.md +2 -2
- package/skills/god-lint.md +4 -1
- package/skills/god-mode.md +14 -2
- package/skills/god-next.md +5 -0
- package/skills/god-preflight.md +147 -0
- package/skills/god-version.md +2 -2
- package/templates/ARCH.md +3 -0
- package/templates/DOMAIN-GLOSSARY.md +50 -0
- package/workflows/bluefield-arc.yaml +13 -3
- package/workflows/brownfield-arc.yaml +13 -4
package/agents/god-roadmapper.md
CHANGED
|
@@ -20,6 +20,8 @@ Optional: `.godpowers/prep/INITIAL-FINDINGS.md` may exist as preparation
|
|
|
20
20
|
context.
|
|
21
21
|
Optional: `.godpowers/prep/IMPORTED-CONTEXT.md` may exist as preparation
|
|
22
22
|
context.
|
|
23
|
+
Optional: `.godpowers/domain/GLOSSARY.md` may exist as domain preparation
|
|
24
|
+
context.
|
|
23
25
|
Optional: `.godpowers/design/DESIGN.md` and `.godpowers/design/PRODUCT.md`
|
|
24
26
|
may exist as early product-experience preparation.
|
|
25
27
|
|
|
@@ -39,6 +41,12 @@ stories and plans as hypothesis-level input only. Convert imported terminology
|
|
|
39
41
|
into Godpowers vocabulary. Do not preserve imported methodology terminology in
|
|
40
42
|
Godpowers artifacts unless the user explicitly asked for it.
|
|
41
43
|
|
|
44
|
+
If `.godpowers/domain/GLOSSARY.md` exists, read it before sequencing work.
|
|
45
|
+
Use canonical terms in increment goals, gates, dependencies, and feature
|
|
46
|
+
names. Treat unresolved glossary ambiguities as roadmap `[OPEN QUESTION]`
|
|
47
|
+
entries when they affect dependency order, scope boundaries, or completion
|
|
48
|
+
gates.
|
|
49
|
+
|
|
42
50
|
If DESIGN.md or PRODUCT.md exists, read them before sequencing delivery
|
|
43
51
|
increments.
|
|
44
52
|
Use screens, flows, components, accessibility obligations, and product voice to
|
|
@@ -51,6 +59,9 @@ Rules:
|
|
|
51
59
|
- If imported context conflicts with PRD or ARCH, PRD and ARCH win.
|
|
52
60
|
- Mark any imported sequencing assumption as `[HYPOTHESIS]` until confirmed by
|
|
53
61
|
Godpowers artifacts or the user.
|
|
62
|
+
- Do not invent roadmap terms when a canonical glossary term exists.
|
|
63
|
+
- If glossary language conflicts with PRD or ARCH, PRD and ARCH win and the
|
|
64
|
+
conflict becomes an `[OPEN QUESTION]`.
|
|
54
65
|
- Keep design-derived delivery increments grounded in the PRD and ARCH.
|
|
55
66
|
- If ROADMAP creates durable delivery or sequencing truth, plan updates for
|
|
56
67
|
relevant pillars. In `--yolo`, apply those updates and log them to
|
|
@@ -19,6 +19,8 @@ Optional: `.godpowers/prep/INITIAL-FINDINGS.md` may exist as preparation
|
|
|
19
19
|
context.
|
|
20
20
|
Optional: `.godpowers/prep/IMPORTED-CONTEXT.md` may exist as preparation
|
|
21
21
|
context.
|
|
22
|
+
Optional: `.godpowers/domain/GLOSSARY.md` may exist as domain preparation
|
|
23
|
+
context.
|
|
22
24
|
Optional: `.godpowers/design/DESIGN.md` and `.godpowers/design/PRODUCT.md`
|
|
23
25
|
may exist as product-experience preparation.
|
|
24
26
|
|
|
@@ -31,6 +33,10 @@ If `.godpowers/prep/IMPORTED-CONTEXT.md` exists, read its technical and stack
|
|
|
31
33
|
signals before scoring candidates. Use imported technology choices, constraints,
|
|
32
34
|
and team familiarity as hypothesis-level input only.
|
|
33
35
|
|
|
36
|
+
If `.godpowers/domain/GLOSSARY.md` exists, read it before scoring candidates.
|
|
37
|
+
Use it to understand domain relationships, ownership boundaries, data shape,
|
|
38
|
+
integration language, and ambiguity that may affect stack fit.
|
|
39
|
+
|
|
34
40
|
If DESIGN.md or PRODUCT.md exists, read them before scoring frontend,
|
|
35
41
|
component, styling, accessibility, animation, and design-token tooling
|
|
36
42
|
candidates.
|
|
@@ -40,6 +46,8 @@ Rules:
|
|
|
40
46
|
- Treat imported technology choices as candidate evidence, not decisions.
|
|
41
47
|
- If imported context conflicts with ARCH, ARCH wins and the conflict becomes a
|
|
42
48
|
stack open question.
|
|
49
|
+
- If glossary language changes apparent data ownership, integration boundaries,
|
|
50
|
+
or workflow complexity, reflect that in candidate scoring as evidence.
|
|
43
51
|
- If design intent conflicts with ARCH NFRs, ARCH wins and the conflict becomes
|
|
44
52
|
a stack or architecture open question.
|
|
45
53
|
|
package/lib/README.md
CHANGED
|
@@ -1,28 +1,80 @@
|
|
|
1
|
-
# lib/ - Runtime Library
|
|
1
|
+
# lib/ - Runtime Library
|
|
2
2
|
|
|
3
|
-
This directory
|
|
4
|
-
|
|
3
|
+
This directory contains the JavaScript runtime modules that support Godpowers
|
|
4
|
+
validation, routing, workflow execution, state management, observability, and
|
|
5
|
+
package-level integrations.
|
|
5
6
|
|
|
6
|
-
##
|
|
7
|
+
## Core state and intent
|
|
7
8
|
|
|
8
|
-
| Module | Purpose |
|
|
9
|
-
|
|
10
|
-
| `state.js` | Read
|
|
11
|
-
| `
|
|
12
|
-
| `intent.js` | Read
|
|
13
|
-
| `
|
|
14
|
-
| `
|
|
15
|
-
| `
|
|
16
|
-
| `metrics.js` | Compute per-tier stats from events.jsonl | v0.7 |
|
|
17
|
-
| `extension-loader.js` | Lazy-activate skill packs | v0.8 |
|
|
9
|
+
| Module | Purpose |
|
|
10
|
+
|--------|---------|
|
|
11
|
+
| `state.js` | Read, initialize, validate, and write `.godpowers/state.json`. |
|
|
12
|
+
| `state-lock.js` | Coordinate state writes with a lock file. |
|
|
13
|
+
| `intent.js` | Read and validate `intent.yaml` from project roots or `.godpowers/`. |
|
|
14
|
+
| `checkpoint.js` | Create and inspect resumable checkpoint artifacts. |
|
|
15
|
+
| `budget.js` | Read and enforce configured budget controls. |
|
|
16
|
+
| `cost-tracker.js` | Track token and cost estimates from event streams. |
|
|
18
17
|
|
|
19
|
-
##
|
|
18
|
+
## Events and observability
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
| Module | Purpose |
|
|
21
|
+
|--------|---------|
|
|
22
|
+
| `events.js` | Append structured runtime events. |
|
|
23
|
+
| `event-reader.js` | Read and aggregate event streams. |
|
|
24
|
+
| `otel-exporter.js` | Export Godpowers events in an OpenTelemetry-shaped format. |
|
|
25
|
+
| `runtime-audit.js` | Audit runtime health and expected project state. |
|
|
26
|
+
| `runtime-test.js` | Provide runtime checks used by package tests. |
|
|
23
27
|
|
|
24
|
-
|
|
25
|
-
these modules ship.
|
|
28
|
+
## Routing and execution
|
|
26
29
|
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
| Module | Purpose |
|
|
31
|
+
|--------|---------|
|
|
32
|
+
| `router.js` | Resolve user intent to skills, agents, recipes, and workflows. |
|
|
33
|
+
| `recipes.js` | Load and validate routing recipes. |
|
|
34
|
+
| `workflow-parser.js` | Parse workflow YAML into executable steps. |
|
|
35
|
+
| `workflow-runner.js` | Execute workflow steps with validation hooks. |
|
|
36
|
+
| `agent-cache.js` | Cache agent metadata for faster routing. |
|
|
37
|
+
| `agent-validator.js` | Validate agent frontmatter and contracts. |
|
|
38
|
+
|
|
39
|
+
## Artifact quality
|
|
40
|
+
|
|
41
|
+
| Module | Purpose |
|
|
42
|
+
|--------|---------|
|
|
43
|
+
| `artifact-linter.js` | Check artifacts for required labels, evidence, and domain precision. |
|
|
44
|
+
| `artifact-diff.js` | Compare artifact changes for review and release workflows. |
|
|
45
|
+
| `have-nots-validator.js` | Check artifacts against known failure modes. |
|
|
46
|
+
| `meta-linter.js` | Validate Godpowers documentation and skill metadata. |
|
|
47
|
+
| `story-validator.js` | Validate story artifacts and story lifecycle state. |
|
|
48
|
+
|
|
49
|
+
## Design, context, and integrations
|
|
50
|
+
|
|
51
|
+
| Module | Purpose |
|
|
52
|
+
|--------|---------|
|
|
53
|
+
| `context-writer.js` | Produce tool-specific context files. |
|
|
54
|
+
| `context-budget.js` | Keep generated context within budget. |
|
|
55
|
+
| `design-detector.js` | Detect design-system conventions. |
|
|
56
|
+
| `design-spec.js` | Normalize design specifications. |
|
|
57
|
+
| `awesome-design.js` | Validate design guidance against awesome-design rules. |
|
|
58
|
+
| `browser-bridge.js` | Connect browser verification flows. |
|
|
59
|
+
| `agent-browser-driver.js` | Drive browser-backed agent checks. |
|
|
60
|
+
| `skillui-bridge.js` | Bridge skill metadata into UI surfaces. |
|
|
61
|
+
| `impeccable-bridge.js` | Bridge runtime checks into impeccable quality workflows. |
|
|
62
|
+
| `extensions.js` | Load and validate extension packs. |
|
|
63
|
+
|
|
64
|
+
## Repository and graph helpers
|
|
65
|
+
|
|
66
|
+
| Module | Purpose |
|
|
67
|
+
|--------|---------|
|
|
68
|
+
| `code-scanner.js` | Scan source trees for routing and quality evidence. |
|
|
69
|
+
| `cross-artifact-impact.js` | Detect relationships between changed artifacts. |
|
|
70
|
+
| `cross-repo-linkage.js` | Track suite-level repository relationships. |
|
|
71
|
+
| `drift-detector.js` | Detect context drift between artifacts and implementation. |
|
|
72
|
+
| `impact.js` | Summarize expected impact of proposed changes. |
|
|
73
|
+
| `linkage.js` | Connect artifacts, stories, and implementation files. |
|
|
74
|
+
| `multi-repo-detector.js` | Detect multi-repository workspaces. |
|
|
75
|
+
| `reverse-sync.js` | Reflect implementation changes back into artifacts. |
|
|
76
|
+
| `review-required.js` | Decide when review gates should block progress. |
|
|
77
|
+
| `suite-state.js` | Manage state across registered project suites. |
|
|
78
|
+
|
|
79
|
+
See `../ARCHITECTURE.md` for system design and `../docs/ROADMAP.md` for planned
|
|
80
|
+
runtime work.
|
package/lib/artifact-linter.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* findings.
|
|
7
7
|
*
|
|
8
8
|
* Public API:
|
|
9
|
-
* detectType(filePath) -> 'prd'|'arch'|'roadmap'|'stack'|'design'|'product'|null
|
|
9
|
+
* detectType(filePath) -> 'prd'|'arch'|'roadmap'|'stack'|'design'|'product'|'domain'|null
|
|
10
10
|
* lintFile(filePath, opts) -> { type, findings, summary }
|
|
11
11
|
* lintAll(projectRoot, opts) -> [{ path, type, findings, summary }, ...]
|
|
12
12
|
*
|
|
@@ -28,6 +28,7 @@ function detectType(filePath) {
|
|
|
28
28
|
if (lower.includes('/arch/') || basename === 'arch.md') return 'arch';
|
|
29
29
|
if (lower.includes('/roadmap/') || basename === 'roadmap.md') return 'roadmap';
|
|
30
30
|
if (lower.includes('/stack/') || basename === 'stack-decision.md' || basename === 'decision.md') return 'stack';
|
|
31
|
+
if (lower.includes('/domain/') || basename === 'domain-glossary.md' || basename === 'glossary.md') return 'domain';
|
|
31
32
|
if (basename === 'design.md') return 'design';
|
|
32
33
|
if (basename === 'product.md') return 'product';
|
|
33
34
|
if (basename === 'postmortem.md') return 'postmortem';
|
|
@@ -82,6 +83,7 @@ function lintAll(projectRoot, opts = {}) {
|
|
|
82
83
|
'.godpowers/arch/ARCH.md',
|
|
83
84
|
'.godpowers/roadmap/ROADMAP.md',
|
|
84
85
|
'.godpowers/stack/DECISION.md',
|
|
86
|
+
'.godpowers/domain/GLOSSARY.md',
|
|
85
87
|
'.godpowers/design/DESIGN.md',
|
|
86
88
|
'DESIGN.md',
|
|
87
89
|
'PRODUCT.md'
|
|
@@ -22,6 +22,11 @@
|
|
|
22
22
|
* P-08 open-q without owner mechanical (table column scan)
|
|
23
23
|
* P-09 open-q without due date mechanical (table column scan)
|
|
24
24
|
* A-04 NFR not mapped mechanical (PRD NFR vs ARCH map)
|
|
25
|
+
* DG-01 term without avoid aliases mechanical (term block scan)
|
|
26
|
+
* DG-02 implementation detail partial mechanical (technical-word scan)
|
|
27
|
+
* DG-03 ambiguity owner/due mechanical (section scan)
|
|
28
|
+
* DG-04 relationship undefined mechanical (bold term cross-check)
|
|
29
|
+
* DG-05 behavior definition partial mechanical (verb scan)
|
|
25
30
|
*
|
|
26
31
|
* Substitution test (U-01) is a partial mechanical check: flags sentences
|
|
27
32
|
* containing only generic nouns ('users', 'developers', 'scalable',
|
|
@@ -524,6 +529,163 @@ function checkArchNfrMap(content, opts = {}) {
|
|
|
524
529
|
return findings;
|
|
525
530
|
}
|
|
526
531
|
|
|
532
|
+
/** DG-01: canonical term without avoided aliases */
|
|
533
|
+
function checkDomainAvoidAliases(content) {
|
|
534
|
+
const findings = [];
|
|
535
|
+
const lines = content.split('\n');
|
|
536
|
+
for (let i = 0; i < lines.length; i++) {
|
|
537
|
+
const line = lines[i].trim();
|
|
538
|
+
const match = line.match(/^\*\*([^*\]]+)\*\*:\s*(.+)/);
|
|
539
|
+
if (!match) continue;
|
|
540
|
+
const term = match[1].trim();
|
|
541
|
+
if (!term || term.startsWith('[')) continue;
|
|
542
|
+
let hasAvoid = false;
|
|
543
|
+
for (let j = i + 1; j < Math.min(lines.length, i + 5); j++) {
|
|
544
|
+
const next = lines[j].trim();
|
|
545
|
+
if (/^\*\*[^*]+\*\*:/.test(next) || /^#{1,6}\s/.test(next)) break;
|
|
546
|
+
const avoidMatch = next.match(/^_Avoid_:\s*(.+)/i);
|
|
547
|
+
if (avoidMatch && avoidMatch[1].trim() && !avoidMatch[1].includes('[')) {
|
|
548
|
+
hasAvoid = true;
|
|
549
|
+
break;
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
if (!hasAvoid) {
|
|
553
|
+
findings.push({
|
|
554
|
+
code: 'DG-01',
|
|
555
|
+
severity: 'warning',
|
|
556
|
+
line: i + 1,
|
|
557
|
+
column: 1,
|
|
558
|
+
message: `Glossary term "${term}" has no avoided aliases listed.`,
|
|
559
|
+
suggestion: 'Add an _Avoid_: line with non-canonical aliases or overloaded words.'
|
|
560
|
+
});
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
return findings;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
/** DG-02: implementation detail in glossary */
|
|
567
|
+
function checkDomainImplementationDetails(content) {
|
|
568
|
+
const findings = [];
|
|
569
|
+
const technicalWords = /\b(src\/|lib\/|\.js\b|\.ts\b|\.tsx\b|React|Vue|Svelte|Postgres|MySQL|Redis|Kafka|API endpoint|endpoint|function|class|module|component|database|ORM|queue|HTTP|GraphQL)\b/i;
|
|
570
|
+
const lines = content.split('\n');
|
|
571
|
+
for (let i = 0; i < lines.length; i++) {
|
|
572
|
+
const line = lines[i];
|
|
573
|
+
if (technicalWords.test(line)) {
|
|
574
|
+
findings.push({
|
|
575
|
+
code: 'DG-02',
|
|
576
|
+
severity: 'warning',
|
|
577
|
+
line: i + 1,
|
|
578
|
+
column: 1,
|
|
579
|
+
message: 'Possible implementation detail in domain glossary.',
|
|
580
|
+
suggestion: 'Keep implementation details in PRD, ARCH, STACK, docs, or code-linked artifacts.'
|
|
581
|
+
});
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
return findings;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
/** DG-03: unresolved ambiguity without owner or due date */
|
|
588
|
+
function checkDomainAmbiguityOwners(content) {
|
|
589
|
+
const findings = [];
|
|
590
|
+
const section = extractSection(content, /^##\s*Flagged Ambiguities/im);
|
|
591
|
+
if (!section) return findings;
|
|
592
|
+
const lines = section.body.split('\n');
|
|
593
|
+
for (let i = 0; i < lines.length; i++) {
|
|
594
|
+
const line = lines[i].trim();
|
|
595
|
+
if (!line.startsWith('-')) continue;
|
|
596
|
+
const lineWithoutLabel = line.replace(/\[OPEN QUESTION\]/g, '');
|
|
597
|
+
if (lineWithoutLabel.includes('[')) continue;
|
|
598
|
+
const isOpen = line.includes('[OPEN QUESTION]') || /\bambigu/i.test(line);
|
|
599
|
+
if (!isOpen) continue;
|
|
600
|
+
if (!/\bOwner:\s*[^.\]]+/i.test(line)) {
|
|
601
|
+
findings.push({
|
|
602
|
+
code: 'DG-03',
|
|
603
|
+
severity: 'error',
|
|
604
|
+
line: section.startLine + i,
|
|
605
|
+
column: 1,
|
|
606
|
+
message: 'Glossary ambiguity has no owner.',
|
|
607
|
+
suggestion: 'Add Owner: [name] to the ambiguity.'
|
|
608
|
+
});
|
|
609
|
+
}
|
|
610
|
+
if (!/\bDue:\s*[^.\]]+/i.test(line)) {
|
|
611
|
+
findings.push({
|
|
612
|
+
code: 'DG-03',
|
|
613
|
+
severity: 'error',
|
|
614
|
+
line: section.startLine + i,
|
|
615
|
+
column: 1,
|
|
616
|
+
message: 'Glossary ambiguity has no due date.',
|
|
617
|
+
suggestion: 'Add Due: [date or command gate] to the ambiguity.'
|
|
618
|
+
});
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
return findings;
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
/** DG-04: relationship references undefined canonical term */
|
|
625
|
+
function checkDomainRelationshipTerms(content) {
|
|
626
|
+
const findings = [];
|
|
627
|
+
const language = extractSection(content, /^##\s*Language/im);
|
|
628
|
+
const relationships = extractSection(content, /^##\s*Relationships/im);
|
|
629
|
+
if (!language || !relationships) return findings;
|
|
630
|
+
|
|
631
|
+
const canonical = new Set();
|
|
632
|
+
const languageLines = language.body.split('\n');
|
|
633
|
+
for (const line of languageLines) {
|
|
634
|
+
const match = line.trim().match(/^\*\*([^*\]]+)\*\*:/);
|
|
635
|
+
if (match && !match[1].startsWith('[')) {
|
|
636
|
+
canonical.add(match[1].trim());
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
const relLines = relationships.body.split('\n');
|
|
641
|
+
for (let i = 0; i < relLines.length; i++) {
|
|
642
|
+
const relLineWithoutLabels = relLines[i]
|
|
643
|
+
.replace(/\[DECISION\]/g, '')
|
|
644
|
+
.replace(/\[HYPOTHESIS\]/g, '')
|
|
645
|
+
.replace(/\[OPEN QUESTION\]/g, '');
|
|
646
|
+
if (relLineWithoutLabels.includes('[')) continue;
|
|
647
|
+
const boldTerms = [...relLines[i].matchAll(/\*\*([^*\]]+)\*\*/g)].map(m => m[1].trim());
|
|
648
|
+
for (const term of boldTerms) {
|
|
649
|
+
if (term.startsWith('[')) continue;
|
|
650
|
+
if (!canonical.has(term)) {
|
|
651
|
+
findings.push({
|
|
652
|
+
code: 'DG-04',
|
|
653
|
+
severity: 'warning',
|
|
654
|
+
line: relationships.startLine + i,
|
|
655
|
+
column: 1,
|
|
656
|
+
message: `Relationship references undefined glossary term "${term}".`,
|
|
657
|
+
suggestion: 'Define the term in Language or replace it with a canonical term.'
|
|
658
|
+
});
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
return findings;
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
/** DG-05: definition describes behavior instead of identity */
|
|
666
|
+
function checkDomainDefinitionBehavior(content) {
|
|
667
|
+
const findings = [];
|
|
668
|
+
const behaviorWords = /\b(handles|processes|manages|stores|renders|calls|sends|receives|creates|updates|deletes|calculates|syncs)\b/i;
|
|
669
|
+
const lines = content.split('\n');
|
|
670
|
+
for (let i = 0; i < lines.length; i++) {
|
|
671
|
+
const line = lines[i].trim();
|
|
672
|
+
const match = line.match(/^\*\*([^*\]]+)\*\*:\s*(.+)/);
|
|
673
|
+
if (!match || match[1].startsWith('[')) continue;
|
|
674
|
+
const definition = match[2];
|
|
675
|
+
if (behaviorWords.test(definition)) {
|
|
676
|
+
findings.push({
|
|
677
|
+
code: 'DG-05',
|
|
678
|
+
severity: 'warning',
|
|
679
|
+
line: i + 1,
|
|
680
|
+
column: 1,
|
|
681
|
+
message: `Glossary definition for "${match[1]}" may describe behavior instead of identity.`,
|
|
682
|
+
suggestion: 'Define what the term is in one sentence. Put behavior in PRD, ARCH, or docs.'
|
|
683
|
+
});
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
return findings;
|
|
687
|
+
}
|
|
688
|
+
|
|
527
689
|
// ============================================================================
|
|
528
690
|
// Helpers
|
|
529
691
|
// ============================================================================
|
|
@@ -579,6 +741,13 @@ const ARTIFACT_CHECKS = {
|
|
|
579
741
|
],
|
|
580
742
|
arch: [
|
|
581
743
|
{ code: 'A-04', fn: checkArchNfrMap }
|
|
744
|
+
],
|
|
745
|
+
domain: [
|
|
746
|
+
{ code: 'DG-01', fn: checkDomainAvoidAliases },
|
|
747
|
+
{ code: 'DG-02', fn: checkDomainImplementationDetails },
|
|
748
|
+
{ code: 'DG-03', fn: checkDomainAmbiguityOwners },
|
|
749
|
+
{ code: 'DG-04', fn: checkDomainRelationshipTerms },
|
|
750
|
+
{ code: 'DG-05', fn: checkDomainDefinitionBehavior }
|
|
582
751
|
]
|
|
583
752
|
};
|
|
584
753
|
|
|
@@ -643,5 +812,10 @@ module.exports = {
|
|
|
643
812
|
checkPrdNoGos,
|
|
644
813
|
checkPrdOpenQuestions,
|
|
645
814
|
checkArchNfrMap,
|
|
815
|
+
checkDomainAvoidAliases,
|
|
816
|
+
checkDomainImplementationDetails,
|
|
817
|
+
checkDomainAmbiguityOwners,
|
|
818
|
+
checkDomainRelationshipTerms,
|
|
819
|
+
checkDomainDefinitionBehavior,
|
|
646
820
|
extractSection
|
|
647
821
|
};
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "godpowers",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "AI-powered development system:
|
|
3
|
+
"version": "1.6.1",
|
|
4
|
+
"description": "AI-powered development system: 106 slash commands and 39 specialist agents that take a project from raw idea to hardened production. Runs inside Claude Code, Codex, Cursor, Windsurf, Gemini, and 10+ other AI coding tools.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"godpowers": "./bin/install.js"
|
|
7
7
|
},
|
|
8
8
|
"scripts": {
|
|
9
|
-
"test": "node scripts/validate-skills.js && node scripts/test-doc-surface-counts.js && bash scripts/smoke.sh && node scripts/test-runtime.js && node scripts/test-router.js && node scripts/test-recipes.js && node scripts/test-context-writer.js && node scripts/test-pillars.js && node scripts/test-artifact-linter.js && node scripts/test-artifact-diff.js && node scripts/test-design-foundation.js && node scripts/test-linkage.js && node scripts/test-impact.js && node scripts/test-reverse-sync.js && node scripts/test-integration.js && node scripts/test-cross-artifact.js && node scripts/test-awesome-design.js && node scripts/test-skillui-bridge.js && node scripts/test-runtime-verification.js && node scripts/test-agent-browser.js && node scripts/test-mode-d.js && node scripts/test-runtime-heuristics.js && node scripts/test-agent-validator.js && node scripts/test-story-validator.js && node scripts/test-state.js && node scripts/test-intent.js && node scripts/test-events.js && node scripts/test-golden-artifacts.js && node scripts/test-install-smoke.js && node scripts/test-checkpoint.js && node scripts/test-extensions.js && node scripts/test-event-reader.js && node scripts/test-state-lock.js && node scripts/test-cost-saver.js && node scripts/test-budget-onoff.js && node scripts/test-workflow-runner.js && node scripts/test-otel-exporter.js && node scripts/test-extensions-publish.js",
|
|
9
|
+
"test": "node scripts/validate-skills.js && node scripts/test-doc-surface-counts.js && bash scripts/smoke.sh && node scripts/test-runtime.js && node scripts/test-router.js && node scripts/test-recipes.js && node scripts/test-context-writer.js && node scripts/test-pillars.js && node scripts/test-artifact-linter.js && node scripts/test-artifact-diff.js && node scripts/test-design-foundation.js && node scripts/test-linkage.js && node scripts/test-impact.js && node scripts/test-reverse-sync.js && node scripts/test-integration.js && node scripts/test-cross-artifact.js && node scripts/test-awesome-design.js && node scripts/test-skillui-bridge.js && node scripts/test-runtime-verification.js && node scripts/test-agent-browser.js && node scripts/test-mode-d.js && node scripts/test-runtime-heuristics.js && node scripts/test-agent-validator.js && node scripts/test-story-validator.js && node scripts/test-state.js && node scripts/test-intent.js && node scripts/test-events.js && node scripts/test-golden-artifacts.js && node scripts/test-install-smoke.js && node scripts/test-checkpoint.js && node scripts/test-extensions.js && node scripts/test-event-reader.js && node scripts/test-state-lock.js && node scripts/test-cost-saver.js && node scripts/test-budget-onoff.js && node scripts/test-workflow-runner.js && npm run test:e2e && node scripts/test-otel-exporter.js && node scripts/test-extensions-publish.js",
|
|
10
10
|
"prepublishOnly": "npm test",
|
|
11
11
|
"validate-skills": "node scripts/validate-skills.js",
|
|
12
12
|
"test:surface": "node scripts/test-doc-surface-counts.js",
|
|
@@ -17,7 +17,11 @@
|
|
|
17
17
|
"test:context": "node scripts/test-context-writer.js",
|
|
18
18
|
"test:pillars": "node scripts/test-pillars.js",
|
|
19
19
|
"test:linter": "node scripts/test-artifact-linter.js",
|
|
20
|
-
"test:diff": "node scripts/test-artifact-diff.js"
|
|
20
|
+
"test:diff": "node scripts/test-artifact-diff.js",
|
|
21
|
+
"test:e2e": "node tests/integration/full-arc.test.js",
|
|
22
|
+
"test:audit": "npm audit --omit=dev && git diff --check && npm run test:surface",
|
|
23
|
+
"pack:check": "node scripts/check-package-contents.js",
|
|
24
|
+
"release:check": "npm test && npm run test:audit && npm run pack:check"
|
|
21
25
|
},
|
|
22
26
|
"keywords": [
|
|
23
27
|
"ai",
|
package/references/HAVE-NOTS.md
CHANGED
|
@@ -179,6 +179,30 @@ Choice motivated by "looks good on resume" rather than fit-for-PRD. Fail.
|
|
|
179
179
|
Looks robust on paper but fails first real load. NFR validation must include
|
|
180
180
|
worst-case analysis. Fail.
|
|
181
181
|
|
|
182
|
+
#### A-13 ADR inflation
|
|
183
|
+
An ADR records a decision that is easy to reverse, obvious without context, or
|
|
184
|
+
not the result of a real tradeoff. Fail.
|
|
185
|
+
|
|
186
|
+
### Domain Glossary Have-Nots
|
|
187
|
+
|
|
188
|
+
#### DG-01 Canonical term without avoided aliases
|
|
189
|
+
A glossary term names the canonical language but does not list avoided aliases.
|
|
190
|
+
Fail.
|
|
191
|
+
|
|
192
|
+
#### DG-02 Implementation detail in glossary
|
|
193
|
+
The domain glossary stores implementation details, stack choices, code paths,
|
|
194
|
+
or technical scratch notes. The glossary is domain language only. Fail.
|
|
195
|
+
|
|
196
|
+
#### DG-03 Unresolved ambiguity without owner or due date
|
|
197
|
+
An ambiguity is recorded without an owner or due date. Fail.
|
|
198
|
+
|
|
199
|
+
#### DG-04 Relationship uses non-canonical term
|
|
200
|
+
A relationship references a term that is not defined in the glossary language
|
|
201
|
+
section. Fail.
|
|
202
|
+
|
|
203
|
+
#### DG-05 Definition does behavior work
|
|
204
|
+
A definition describes what the system does instead of what the term is. Fail.
|
|
205
|
+
|
|
182
206
|
### Roadmap Have-Nots
|
|
183
207
|
|
|
184
208
|
#### R-01 Generic milestone goal
|
|
@@ -4,14 +4,12 @@ Per-tier reference content for Tier 2 (Building: Repo, Build).
|
|
|
4
4
|
|
|
5
5
|
## Files
|
|
6
6
|
|
|
7
|
-
-
|
|
7
|
+
- `BUILD-ANTIPATTERNS.md`: failure modes for implementation planning and execution.
|
|
8
|
+
- `BUILD-VERTICAL-SLICES.md`: guidance for slicing work into user-visible increments.
|
|
9
|
+
- `BUILD-WAVES.md`: dependency-aware parallelism patterns for multi-agent work.
|
|
8
10
|
|
|
9
|
-
##
|
|
11
|
+
## Use
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
- Atomic commit examples
|
|
15
|
-
- Wave parallelism dependency analysis worked examples
|
|
16
|
-
|
|
17
|
-
See [HAVE-NOTS.md](../HAVE-NOTS.md) for the canonical failure-mode catalog.
|
|
13
|
+
Use these references when reviewing implementation plans, build execution, and
|
|
14
|
+
agent workstream shape. Pair them with [HAVE-NOTS.md](../HAVE-NOTS.md) for the
|
|
15
|
+
canonical failure-mode catalog.
|
|
@@ -4,13 +4,16 @@ Per-tier reference content for Tier 1 (Planning: PRD, Architecture, Roadmap, Sta
|
|
|
4
4
|
|
|
5
5
|
## Files
|
|
6
6
|
|
|
7
|
-
-
|
|
7
|
+
- `PRD-ANATOMY.md`: structure and evidence expectations for product requirements.
|
|
8
|
+
- `PRD-ANTIPATTERNS.md`: common ways PRDs become generic, untestable, or ungrounded.
|
|
9
|
+
- `ARCH-ANATOMY.md`: architecture decision structure, boundaries, and tradeoff framing.
|
|
10
|
+
- `ARCH-ANTIPATTERNS.md`: architecture theater, cargo-cult patterns, and weak constraints.
|
|
11
|
+
- `STACK-ANATOMY.md`: stack decision shape, flip points, and operational fit.
|
|
12
|
+
- `STACK-ANTIPATTERNS.md`: technology-choice failure modes and substitution-test misses.
|
|
13
|
+
- `ROADMAP-ANATOMY.md`: sequencing, dependency, and milestone structure.
|
|
14
|
+
- `ROADMAP-ANTIPATTERNS.md`: feature-factory, Gantt theater, and shelf-roadmap failures.
|
|
8
15
|
|
|
9
|
-
##
|
|
16
|
+
## Use
|
|
10
17
|
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
- Worked Stack decision examples with flip-point analysis
|
|
14
|
-
- Roadmap anti-examples: Gantt theater, feature-factory output, shelf roadmaps
|
|
15
|
-
|
|
16
|
-
See [HAVE-NOTS.md](../HAVE-NOTS.md) for the canonical failure-mode catalog.
|
|
18
|
+
Use these references when reviewing or generating Tier 1 artifacts. Pair them
|
|
19
|
+
with [HAVE-NOTS.md](../HAVE-NOTS.md) for the canonical failure-mode catalog.
|
|
@@ -4,15 +4,16 @@ Per-tier reference content for Tier 3 (Deploy, Observe, Launch, Harden).
|
|
|
4
4
|
|
|
5
5
|
## Files
|
|
6
6
|
|
|
7
|
-
-
|
|
7
|
+
- `DEPLOY-PATTERNS.md`: deployment promotion patterns and release safety checks.
|
|
8
|
+
- `DEPLOY-ANTIPATTERNS.md`: deployment failure modes and operational shortcuts.
|
|
9
|
+
- `OBSERVE-SLO-EXAMPLES.md`: SLO, alerting, and error-budget examples.
|
|
10
|
+
- `OBSERVE-ANTIPATTERNS.md`: observability gaps, noisy alerts, and weak signals.
|
|
11
|
+
- `LAUNCH-ANTIPATTERNS.md`: launch readiness, messaging, and adoption failure modes.
|
|
12
|
+
- `HARDEN-OWASP-WORKSHEETS.md`: security review worksheets based on OWASP categories.
|
|
13
|
+
- `HARDEN-ANTIPATTERNS.md`: hardening gaps and security theater patterns.
|
|
8
14
|
|
|
9
|
-
##
|
|
15
|
+
## Use
|
|
10
16
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
- OWASP Top 10 manual review worksheets
|
|
15
|
-
- Launch copy substitution-test calibration set
|
|
16
|
-
- D-7 to D+7 runbook templates
|
|
17
|
-
|
|
18
|
-
See [HAVE-NOTS.md](../HAVE-NOTS.md) for the canonical failure-mode catalog.
|
|
17
|
+
Use these references when preparing production releases, observability plans,
|
|
18
|
+
launch plans, and hardening reviews. Pair them with
|
|
19
|
+
[HAVE-NOTS.md](../HAVE-NOTS.md) for the canonical failure-mode catalog.
|
package/routing/god-mode.yaml
CHANGED
|
@@ -17,7 +17,8 @@ execution:
|
|
|
17
17
|
reads:
|
|
18
18
|
- .godpowers/prep/INITIAL-FINDINGS.md
|
|
19
19
|
- .godpowers/prep/IMPORTED-CONTEXT.md
|
|
20
|
-
|
|
20
|
+
- .godpowers/preflight/PREFLIGHT.md
|
|
21
|
+
secondary-spawns: [god-auditor, god-pm, god-designer, god-architect, god-roadmapper, god-stack-selector, god-repo-scaffolder, god-planner, god-executor, god-spec-reviewer, god-quality-reviewer, god-deploy-engineer, god-observability-engineer, god-harden-auditor, god-launch-strategist]
|
|
21
22
|
writes:
|
|
22
23
|
[]
|
|
23
24
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
apiVersion: godpowers/v1
|
|
2
|
+
kind: CommandRouting
|
|
3
|
+
metadata:
|
|
4
|
+
command: /god-preflight
|
|
5
|
+
description: Read-only intake audit before arc-ready and pillars
|
|
6
|
+
tier: 0
|
|
7
|
+
|
|
8
|
+
prerequisites:
|
|
9
|
+
required:
|
|
10
|
+
- check: codebase-present
|
|
11
|
+
human-required: true
|
|
12
|
+
|
|
13
|
+
execution:
|
|
14
|
+
spawns: [god-auditor]
|
|
15
|
+
context: fresh
|
|
16
|
+
writes:
|
|
17
|
+
- .godpowers/preflight/PREFLIGHT.md
|
|
18
|
+
|
|
19
|
+
success-path:
|
|
20
|
+
next-recommended: /god-archaeology
|
|
21
|
+
alternatives:
|
|
22
|
+
- command: /god-init
|
|
23
|
+
when: missing-basic-project-state
|
|
24
|
+
- command: /god-reconstruct
|
|
25
|
+
when: planning-artifacts-missing
|
|
26
|
+
- command: /god-tech-debt
|
|
27
|
+
when: debt-dominates-risk
|
|
28
|
+
- command: /god-audit
|
|
29
|
+
when: artifacts-exist
|
|
30
|
+
|
|
31
|
+
failure-path:
|
|
32
|
+
on-error: /god-doctor
|
|
33
|
+
|
|
34
|
+
endoff:
|
|
35
|
+
state-update: preflight completed
|
|
36
|
+
events: [agent.start, artifact.created, agent.end]
|
|
@@ -19,6 +19,8 @@ sequences:
|
|
|
19
19
|
steps:
|
|
20
20
|
- command: "/god-org-context init"
|
|
21
21
|
why: "Capture org-level standards and constraints"
|
|
22
|
+
- command: "/god-preflight"
|
|
23
|
+
why: "Inspect inherited context before arc-ready and pillars"
|
|
22
24
|
- command: "/god-init"
|
|
23
25
|
why: "Detect bluefield mode"
|
|
24
26
|
- command: "/god-mode --bluefield"
|
|
@@ -3,7 +3,7 @@ kind: Recipe
|
|
|
3
3
|
metadata:
|
|
4
4
|
name: brownfield-onboarding
|
|
5
5
|
category: starting
|
|
6
|
-
description: "Inheriting an existing codebase;
|
|
6
|
+
description: "Inheriting an existing codebase; preflight before archaeology"
|
|
7
7
|
|
|
8
8
|
triggers:
|
|
9
9
|
intent-keywords:
|
|
@@ -16,8 +16,10 @@ triggers:
|
|
|
16
16
|
|
|
17
17
|
sequences:
|
|
18
18
|
default:
|
|
19
|
-
description: "Inheriting an existing codebase;
|
|
19
|
+
description: "Inheriting an existing codebase; preflight before archaeology"
|
|
20
20
|
steps:
|
|
21
|
+
- command: "/god-preflight"
|
|
22
|
+
why: "Read-only intake audit before arc-ready and pillars"
|
|
21
23
|
- command: "/god-archaeology"
|
|
22
24
|
why: "Deep history, decisions, conventions, risks"
|
|
23
25
|
- command: "/god-reconstruct"
|