godpowers 0.15.18 → 1.6.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/CHANGELOG.md +92 -0
- package/README.md +11 -2
- package/RELEASE.md +74 -0
- 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/artifact-linter.js +3 -1
- package/lib/have-nots-validator.js +174 -0
- package/lib/pillars.js +9 -3
- package/package.json +3 -2
- package/references/HAVE-NOTS.md +24 -0
- 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-extension-info.md +1 -1
- 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/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/lib/pillars.js
CHANGED
|
@@ -375,9 +375,10 @@ function dedupeMissing(missing) {
|
|
|
375
375
|
|
|
376
376
|
function buildProtocolContent(exclusions = []) {
|
|
377
377
|
const lines = [];
|
|
378
|
-
lines.push('#
|
|
378
|
+
lines.push('# Godpowers Project Context');
|
|
379
379
|
lines.push('');
|
|
380
|
-
lines.push('This project
|
|
380
|
+
lines.push('This is a Godpowers project. Godpowers uses the Pillars standard as its native project context layer.');
|
|
381
|
+
lines.push('Coding agents read project context from `./agents/*.md` before changing code, while `.godpowers/` remains the Godpowers workflow state and artifact layer.');
|
|
381
382
|
lines.push('');
|
|
382
383
|
lines.push('## At the start of any task');
|
|
383
384
|
lines.push('');
|
|
@@ -516,6 +517,9 @@ function pillarStub(name, meta, opts = {}) {
|
|
|
516
517
|
lines.push('## Context');
|
|
517
518
|
lines.push('');
|
|
518
519
|
lines.push('(stub) Fill with facts an agent cannot reliably infer from code alone.');
|
|
520
|
+
for (const line of opts.context || []) {
|
|
521
|
+
lines.push(`- ${sanitizeSignal(line)}`);
|
|
522
|
+
}
|
|
519
523
|
lines.push('');
|
|
520
524
|
lines.push('## Decisions');
|
|
521
525
|
lines.push('');
|
|
@@ -559,7 +563,9 @@ function init(projectRoot, opts = {}) {
|
|
|
559
563
|
writeFenced(agentsFile, PILLARS_FENCE_BEGIN, PILLARS_FENCE_END, buildProtocolContent(exclusions));
|
|
560
564
|
|
|
561
565
|
const results = [];
|
|
562
|
-
|
|
566
|
+
const context = [];
|
|
567
|
+
if (opts.projectName) context.push(`[HYPOTHESIS] Project name: ${opts.projectName}`);
|
|
568
|
+
results.push(ensurePillar(projectRoot, 'context', ALWAYS_PILLARS.context, { always: true, context }));
|
|
563
569
|
results.push(ensurePillar(projectRoot, 'repo', ALWAYS_PILLARS.repo, { always: true }));
|
|
564
570
|
|
|
565
571
|
const coreNames = opts.corePillars || Object.keys(CORE_PILLARS);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "godpowers",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "AI-powered development system:
|
|
3
|
+
"version": "1.6.0",
|
|
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
|
},
|
|
@@ -72,6 +72,7 @@
|
|
|
72
72
|
"lib/",
|
|
73
73
|
"extensions/",
|
|
74
74
|
"INSPIRATION.md",
|
|
75
|
+
"RELEASE.md",
|
|
75
76
|
"SKILL.md",
|
|
76
77
|
"AGENTS.md",
|
|
77
78
|
"CHANGELOG.md",
|
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
|
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"
|
package/skills/god-discuss.md
CHANGED
|
@@ -11,7 +11,7 @@ description: |
|
|
|
11
11
|
|
|
12
12
|
# /god-discuss
|
|
13
13
|
|
|
14
|
-
Pre-planning Socratic discussion.
|
|
14
|
+
Pre-planning Socratic discussion with domain grilling.
|
|
15
15
|
|
|
16
16
|
## When to use
|
|
17
17
|
|
|
@@ -26,21 +26,45 @@ Spawn god-explorer in fresh context with focus="next-phase-scoping".
|
|
|
26
26
|
|
|
27
27
|
The agent:
|
|
28
28
|
1. Reads the active workflow context
|
|
29
|
-
2.
|
|
30
|
-
3.
|
|
31
|
-
4.
|
|
32
|
-
5.
|
|
29
|
+
2. Reads `.godpowers/domain/GLOSSARY.md` if it exists
|
|
30
|
+
3. Asks targeted questions one at a time, with a recommended answer for each
|
|
31
|
+
4. Explores the codebase instead of asking when repo evidence can answer
|
|
32
|
+
5. Challenges vague, overloaded, or conflicting terms against the glossary
|
|
33
|
+
6. Stress-tests domain relationships with concrete scenarios and edge cases
|
|
34
|
+
7. Surfaces 2-3 hidden assumptions
|
|
35
|
+
8. Identifies what's [DECISION] vs [HYPOTHESIS] vs [OPEN QUESTION]
|
|
36
|
+
9. Drafts a brief in `.godpowers/discussions/<topic>.md`
|
|
37
|
+
10. Updates `.godpowers/domain/GLOSSARY.md` when a term or ambiguity is resolved
|
|
33
38
|
|
|
34
|
-
The brief
|
|
39
|
+
The brief and glossary get passed to the next planning command. The glossary is
|
|
40
|
+
preparation context, not a replacement for PRD, ARCH, ROADMAP, STACK, or Pillars
|
|
41
|
+
files.
|
|
42
|
+
|
|
43
|
+
## Domain Glossary Rules
|
|
44
|
+
|
|
45
|
+
- Create `.godpowers/domain/GLOSSARY.md` lazily from `templates/DOMAIN-GLOSSARY.md`
|
|
46
|
+
only when the discussion resolves the first project-specific term.
|
|
47
|
+
- Keep `.godpowers/domain/GLOSSARY.md` free of implementation details.
|
|
48
|
+
- Use the glossary for canonical terms, avoided aliases, relationships, example
|
|
49
|
+
dialogue, flagged ambiguities, and source notes.
|
|
50
|
+
- When the user uses a term that conflicts with the glossary, call out the
|
|
51
|
+
conflict immediately and ask which meaning should win.
|
|
52
|
+
- When the user uses a fuzzy term, propose a precise canonical term and the
|
|
53
|
+
avoided aliases.
|
|
54
|
+
- Offer ADRs only when all three are true: the decision is hard to reverse, a
|
|
55
|
+
future reader would find it surprising without context, and the choice came
|
|
56
|
+
from a real tradeoff.
|
|
35
57
|
|
|
36
58
|
## Output
|
|
37
59
|
|
|
38
60
|
```
|
|
39
61
|
Discussion complete: .godpowers/discussions/<topic>.md
|
|
62
|
+
Domain glossary: .godpowers/domain/GLOSSARY.md (created or updated if terms resolved)
|
|
40
63
|
|
|
41
64
|
Key findings:
|
|
42
65
|
- [assumption surfaced]
|
|
43
66
|
- [open question that needs human decision]
|
|
67
|
+
- [term or ambiguity resolved]
|
|
44
68
|
|
|
45
69
|
Suggested next: [the planning command this discussion was for]
|
|
46
70
|
```
|
package/skills/god-doctor.md
CHANGED
|
@@ -46,9 +46,9 @@ Plain-text report grouped by severity:
|
|
|
46
46
|
GODPOWERS DOCTOR
|
|
47
47
|
|
|
48
48
|
Install: claude (~/.claude/)
|
|
49
|
-
[OK]
|
|
49
|
+
[OK] 106 skills installed
|
|
50
50
|
[OK] 39 agents installed
|
|
51
|
-
[OK] VERSION matches (
|
|
51
|
+
[OK] VERSION matches (1.6.0)
|
|
52
52
|
[WARN] routing/god-doctor.yaml exists but skill file did not until now
|
|
53
53
|
|
|
54
54
|
Project: /Users/.../my-project/.godpowers/
|
package/skills/god-init.md
CHANGED
|
@@ -94,8 +94,8 @@ needs to specify a mode.
|
|
|
94
94
|
- Write `.godpowers/prep/IMPORTED-CONTEXT.md` when useful context exists
|
|
95
95
|
- Initialize native Pillars context and record Pillars health in
|
|
96
96
|
`INITIAL-FINDINGS.md`
|
|
97
|
-
- For brownfield: schedule archaeology + reconstruction
|
|
98
|
-
- For bluefield: load org-context as constraint
|
|
97
|
+
- For brownfield: schedule preflight before archaeology + reconstruction
|
|
98
|
+
- For bluefield: load org-context, then schedule preflight as constraint intake
|
|
99
99
|
- Create directory structure
|
|
100
100
|
- Write PROGRESS.md with mode, scale, timestamp, tier states
|
|
101
101
|
- Return mode/scale/announcement to this skill
|
package/skills/god-lint.md
CHANGED
|
@@ -22,6 +22,9 @@ have-nots catalog. Real validation, not self-attestation. Catches:
|
|
|
22
22
|
- PRD have-nots: metric without timeline / method, empty no-gos, open
|
|
23
23
|
questions without owner / due date (P-04, P-05, P-07, P-08, P-09)
|
|
24
24
|
- ARCH have-nots: NFR not mapped to architectural choice (A-04)
|
|
25
|
+
- Domain glossary have-nots: missing avoided aliases, implementation details,
|
|
26
|
+
unresolved ambiguities, undefined relationship terms, behavior-heavy
|
|
27
|
+
definitions (DG-01..DG-05)
|
|
25
28
|
|
|
26
29
|
More mechanical have-nots wired in over time. Interpretive checks (e.g.,
|
|
27
30
|
"is the architecture actually good") remain agent-mediated.
|
|
@@ -40,7 +43,7 @@ More mechanical have-nots wired in over time. Interpretive checks (e.g.,
|
|
|
40
43
|
1. Verify `.godpowers/` exists. If not: "Run `/god-init` first."
|
|
41
44
|
2. Resolve target paths:
|
|
42
45
|
- With argument: just that file
|
|
43
|
-
- Without: scan `.godpowers/{prd,arch,roadmap,stack,design}/` plus
|
|
46
|
+
- Without: scan `.godpowers/{prd,arch,roadmap,stack,domain,design}/` plus
|
|
44
47
|
`DESIGN.md` and `PRODUCT.md` at project root
|
|
45
48
|
3. For each target:
|
|
46
49
|
- Detect artifact type from path
|
package/skills/god-mode.md
CHANGED
|
@@ -78,6 +78,8 @@ You are receiving a /god-mode invocation. Your job is to spawn the
|
|
|
78
78
|
- Instruction to read `.godpowers/prep/INITIAL-FINDINGS.md` and
|
|
79
79
|
`.godpowers/prep/IMPORTED-CONTEXT.md` if present before choosing the
|
|
80
80
|
first planning or build step
|
|
81
|
+
- Instruction to read `.godpowers/preflight/PREFLIGHT.md` if present before
|
|
82
|
+
choosing the first brownfield or bluefield action
|
|
81
83
|
- Instruction to compute and load the Pillars load set before every major
|
|
82
84
|
command, because Pillars is the native project context layer
|
|
83
85
|
- Instruction to run `/god-design` after `/god-prd` and before `/god-arch`
|
|
@@ -104,6 +106,9 @@ You are receiving a /god-mode invocation. Your job is to spawn the
|
|
|
104
106
|
must be acted on by god-greenfieldifier. The greenfieldifier writes
|
|
105
107
|
`.godpowers/audit/GREENFIELDIFY-PLAN.md`, pauses before risky canonical
|
|
106
108
|
artifact rewrites, and updates every affected artifact after approval.
|
|
109
|
+
- Instruction that brownfield and bluefield arcs run `/god-preflight`
|
|
110
|
+
automatically when `.godpowers/preflight/PREFLIGHT.md` is absent.
|
|
111
|
+
Greenfield arcs skip preflight unless the user explicitly requests it.
|
|
107
112
|
|
|
108
113
|
6. Keep the spawn payload private. Do not echo or summarize raw Task input,
|
|
109
114
|
"Hard instructions", hidden orchestration rules, agent prompts, file
|
|
@@ -114,8 +119,8 @@ You are receiving a /god-mode invocation. Your job is to spawn the
|
|
|
114
119
|
|
|
115
120
|
7. Orchestrator runs the appropriate workflow:
|
|
116
121
|
- Greenfield -> full-arc
|
|
117
|
-
- Brownfield -> brownfield-arc (archaeology -> reconstruct -> debt-assess -> greenfield simulation audit -> greenfieldify plan and approved artifact updates -> proceed)
|
|
118
|
-
- Bluefield -> bluefield-arc (org-context -> greenfield simulation audit -> greenfieldify plan and approved artifact updates -> arc with constraints)
|
|
122
|
+
- Brownfield -> brownfield-arc (preflight -> archaeology -> reconstruct -> debt-assess -> greenfield simulation audit -> greenfieldify plan and approved artifact updates -> proceed)
|
|
123
|
+
- Bluefield -> bluefield-arc (org-context -> preflight -> greenfield simulation audit -> greenfieldify plan and approved artifact updates -> arc with constraints)
|
|
119
124
|
|
|
120
125
|
8. Relay only the orchestrator's user-facing output to the user. If the
|
|
121
126
|
platform displays raw spawn details automatically, immediately follow with a
|
|
@@ -172,6 +177,13 @@ and logs decisions to `.godpowers/YOLO-DECISIONS.md`. Pillar sync proposals
|
|
|
172
177
|
generated from durable Godpowers artifact changes are auto-applied in this
|
|
173
178
|
mode and logged as YOLO decisions.
|
|
174
179
|
|
|
180
|
+
For brownfield and bluefield, `--yolo` still runs `/god-preflight` first when
|
|
181
|
+
`.godpowers/preflight/PREFLIGHT.md` is absent. The orchestrator then follows
|
|
182
|
+
the preflight report's safest recommended route automatically, logging that
|
|
183
|
+
choice to `.godpowers/YOLO-DECISIONS.md`. Preflight may only pause under
|
|
184
|
+
`--yolo` for Critical security findings or a contradiction that makes route
|
|
185
|
+
selection impossible.
|
|
186
|
+
|
|
175
187
|
### --conservative
|
|
176
188
|
Pass through. Orchestrator pauses at every tier boundary.
|
|
177
189
|
|
package/skills/god-next.md
CHANGED
|
@@ -251,9 +251,14 @@ When in steady state, match keywords to workflows:
|
|
|
251
251
|
| upgrade, migrate, bump major | /god-upgrade |
|
|
252
252
|
| docs, documentation, README | /god-docs |
|
|
253
253
|
| deps, dependencies, audit | /god-update-deps |
|
|
254
|
+
| preflight, intake, audit before arc-ready, audit before pillars | /god-preflight |
|
|
254
255
|
| audit, score, quality check | /god-audit |
|
|
255
256
|
| health check, hygiene | /god-hygiene |
|
|
256
257
|
|
|
258
|
+
If mode detection indicates brownfield or bluefield and
|
|
259
|
+
`.godpowers/preflight/PREFLIGHT.md` is missing, prefer `/god-preflight` before
|
|
260
|
+
recommending archaeology, reconstruction, arc-ready, pillars, or refactor work.
|
|
261
|
+
|
|
257
262
|
## Output Format
|
|
258
263
|
|
|
259
264
|
```
|