@edupia-tutor/spec-driven-docs 0.14.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/bin/build.js +230 -0
- package/bin/index.js +598 -0
- package/commands/debug.md +830 -0
- package/commands/debug.tmpl +257 -0
- package/commands/define-product.md +652 -0
- package/commands/define-product.tmpl +158 -0
- package/commands/dev-gen-test.md +1010 -0
- package/commands/dev-gen-test.tmpl +490 -0
- package/commands/dev-run-test.md +744 -0
- package/commands/dev-run-test.tmpl +224 -0
- package/commands/dev-smoke-test.md +711 -0
- package/commands/dev-smoke-test.tmpl +217 -0
- package/commands/fix-bug.md +744 -0
- package/commands/fix-bug.tmpl +171 -0
- package/commands/generate-bdd.md +1054 -0
- package/commands/generate-bdd.tmpl +534 -0
- package/commands/generate-code.md +869 -0
- package/commands/generate-code.tmpl +349 -0
- package/commands/generate-design-spec.md +958 -0
- package/commands/generate-design-spec.tmpl +464 -0
- package/commands/generate-prd.md +748 -0
- package/commands/generate-prd.tmpl +254 -0
- package/commands/generate-spec-manifest.md +658 -0
- package/commands/generate-spec-manifest.tmpl +164 -0
- package/commands/generate-tech-docs.md +849 -0
- package/commands/generate-tech-docs.tmpl +355 -0
- package/commands/learn.md +636 -0
- package/commands/learn.tmpl +63 -0
- package/commands/map-testids.md +575 -0
- package/commands/map-testids.tmpl +81 -0
- package/commands/propose-scenario.md +623 -0
- package/commands/propose-scenario.tmpl +129 -0
- package/commands/qc-analyze.md +580 -0
- package/commands/qc-analyze.tmpl +86 -0
- package/commands/qc-design-test.md +562 -0
- package/commands/qc-design-test.tmpl +68 -0
- package/commands/qc-plan.md +543 -0
- package/commands/qc-plan.tmpl +49 -0
- package/commands/qc-report.md +554 -0
- package/commands/qc-report.tmpl +60 -0
- package/commands/qc-review.md +547 -0
- package/commands/qc-review.tmpl +53 -0
- package/commands/qc-run-test.md +604 -0
- package/commands/qc-run-test.tmpl +84 -0
- package/commands/refine-prd.md +772 -0
- package/commands/refine-prd.tmpl +140 -0
- package/commands/report-bug.md +639 -0
- package/commands/report-bug.tmpl +145 -0
- package/commands/review-code.md +677 -0
- package/commands/review-code.tmpl +104 -0
- package/commands/review-context.md +1047 -0
- package/commands/review-context.tmpl +415 -0
- package/commands/review-tech-docs.md +811 -0
- package/commands/review-tech-docs.tmpl +317 -0
- package/commands/setup-ai-first.md +545 -0
- package/commands/setup-ai-first.tmpl +358 -0
- package/commands/sync.md +451 -0
- package/commands/sync.tmpl +351 -0
- package/commands/update-framework.md +251 -0
- package/commands/update-framework.tmpl +151 -0
- package/commands/validate-traces.md +842 -0
- package/commands/validate-traces.tmpl +348 -0
- package/core/FRAMEWORK_VERSION +1 -0
- package/core/commands/debug.md +830 -0
- package/core/commands/define-product.md +652 -0
- package/core/commands/dev-gen-test.md +1010 -0
- package/core/commands/dev-run-test.md +744 -0
- package/core/commands/dev-smoke-test.md +711 -0
- package/core/commands/fix-bug.md +744 -0
- package/core/commands/generate-bdd.md +1054 -0
- package/core/commands/generate-code.md +869 -0
- package/core/commands/generate-design-spec.md +958 -0
- package/core/commands/generate-prd.md +748 -0
- package/core/commands/generate-spec-manifest.md +658 -0
- package/core/commands/generate-tech-docs.md +849 -0
- package/core/commands/learn.md +636 -0
- package/core/commands/map-testids.md +575 -0
- package/core/commands/propose-scenario.md +623 -0
- package/core/commands/qc-analyze.md +580 -0
- package/core/commands/qc-design-test.md +562 -0
- package/core/commands/qc-plan.md +543 -0
- package/core/commands/qc-report.md +554 -0
- package/core/commands/qc-review.md +547 -0
- package/core/commands/qc-run-test.md +604 -0
- package/core/commands/refine-prd.md +772 -0
- package/core/commands/report-bug.md +639 -0
- package/core/commands/review-code.md +677 -0
- package/core/commands/review-context.md +1047 -0
- package/core/commands/review-tech-docs.md +811 -0
- package/core/commands/setup-ai-first.md +545 -0
- package/core/commands/sync.md +451 -0
- package/core/commands/update-framework.md +251 -0
- package/core/commands/validate-traces.md +842 -0
- package/core/hooks/data-guard.js +141 -0
- package/core/hooks/settings.json +18 -0
- package/core/modules/android-compose/module.yaml +13 -0
- package/core/modules/android-compose/stack-profile.yaml +57 -0
- package/core/modules/angular/architecture-snippets/component-patterns.md +187 -0
- package/core/modules/angular/module.yaml +6 -0
- package/core/modules/angular/stack-profile.yaml +38 -0
- package/core/modules/context-engineering/architecture-snippets/context-design.md +119 -0
- package/core/modules/context-engineering/module.yaml +9 -0
- package/core/modules/context-engineering/stack-profile.yaml +61 -0
- package/core/modules/dotnet/architecture-snippets/clean-arch.md +160 -0
- package/core/modules/dotnet/module.yaml +6 -0
- package/core/modules/dotnet/stack-profile.yaml +50 -0
- package/core/modules/flutter/module.yaml +14 -0
- package/core/modules/flutter/stack-profile.yaml +59 -0
- package/core/modules/golang/architecture-snippets/domain-layout.md +283 -0
- package/core/modules/golang/module.yaml +6 -0
- package/core/modules/golang/stack-profile.yaml +40 -0
- package/core/modules/ios-swiftui/module.yaml +13 -0
- package/core/modules/ios-swiftui/stack-profile.yaml +55 -0
- package/core/modules/java-spring/architecture-snippets/layered-arch.md +201 -0
- package/core/modules/java-spring/module.yaml +15 -0
- package/core/modules/java-spring/stack-profile.yaml +28 -0
- package/core/modules/nextjs/architecture-snippets/app-router-patterns.md +269 -0
- package/core/modules/nextjs/module.yaml +14 -0
- package/core/modules/nextjs/stack-profile.yaml +74 -0
- package/core/modules/nuxt/module.yaml +14 -0
- package/core/modules/nuxt/stack-profile.yaml +58 -0
- package/core/modules/php-laravel/architecture-snippets/service-repository.md +302 -0
- package/core/modules/php-laravel/module.yaml +15 -0
- package/core/modules/php-laravel/stack-profile.yaml +56 -0
- package/core/modules/qc-playwright/stack-profile.yaml +66 -0
- package/core/modules/react/architecture-snippets/hooks-query-patterns.md +254 -0
- package/core/modules/react/module.yaml +14 -0
- package/core/modules/react/stack-profile.yaml +63 -0
- package/core/modules/react-native/module.yaml +14 -0
- package/core/modules/react-native/stack-profile.yaml +56 -0
- package/core/modules/vue/module.yaml +14 -0
- package/core/modules/vue/stack-profile.yaml +65 -0
- package/core/rules/data-protection.md +80 -0
- package/core/rules/workflow.md +44 -0
- package/core/skills/code/SKILL.md +770 -0
- package/core/skills/debug/SKILL.md +869 -0
- package/core/skills/design-spec/SKILL.md +589 -0
- package/core/skills/discovery/SKILL.md +554 -0
- package/core/skills/prd/SKILL.md +562 -0
- package/core/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
- package/core/skills/qc/qa-analyst/acceptance-criteria.md +60 -0
- package/core/skills/qc/qa-analyst/business-rules.md +59 -0
- package/core/skills/qc/qa-analyst/data-flow.md +64 -0
- package/core/skills/qc/qa-analyst/spec-breakdown.md +61 -0
- package/core/skills/qc/qa-designer/e2e/journey.md +41 -0
- package/core/skills/qc/qa-designer/exploratory/charter.md +68 -0
- package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
- package/core/skills/qc/qa-designer/functional/api.md +45 -0
- package/core/skills/qc/qa-designer/functional/gui-feature.md +46 -0
- package/core/skills/qc/qa-designer/functional/gui-screen.md +52 -0
- package/core/skills/qc/qa-designer/integration/api.md +42 -0
- package/core/skills/qc/qa-designer/integration/db.md +39 -0
- package/core/skills/qc/qa-designer/integration/gui.md +40 -0
- package/core/skills/qc/qa-designer/integration/kafka.md +40 -0
- package/core/skills/qc/qa-designer/non-functional.md +40 -0
- package/core/skills/qc/qa-planner/test-plan.md +120 -0
- package/core/skills/qc/qa-reviewer/script/e2e.md +87 -0
- package/core/skills/qc/qa-reviewer/script/exploratory.md +45 -0
- package/core/skills/qc/qa-reviewer/script/functional.md +101 -0
- package/core/skills/qc/qa-reviewer/script/integration.md +91 -0
- package/core/skills/qc/qa-reviewer/script/non-functional.md +126 -0
- package/core/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
- package/core/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
- package/core/skills/qc/qa-reviewer/test-case/functional.md +76 -0
- package/core/skills/qc/qa-reviewer/test-case/integration.md +69 -0
- package/core/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
- package/core/skills/qc/qa-runner/e2e.md +49 -0
- package/core/skills/qc/qa-runner/exploratory/session.md +36 -0
- package/core/skills/qc/qa-runner/functional/api.md +35 -0
- package/core/skills/qc/qa-runner/functional/gui-feature.md +51 -0
- package/core/skills/qc/qa-runner/functional/gui-screen.md +55 -0
- package/core/skills/qc/qa-runner/integration.md +47 -0
- package/core/skills/qc/qa-runner/non-functional.md +49 -0
- package/core/skills/qc/qa-runner/report/report.md +37 -0
- package/core/skills/setup-ai-first/SKILL.md +216 -0
- package/core/skills/spec/SKILL.md +461 -0
- package/core/skills/test/SKILL.md +1297 -0
- package/core/steps/capture-lesson.md +79 -0
- package/core/steps/context-loader.md +307 -0
- package/core/steps/gate.md +87 -0
- package/core/steps/report-footer.md +100 -0
- package/core/steps/review-fanout.md +138 -0
- package/core/steps/spawn-agent.md +124 -0
- package/core/steps/trace-mirror.md +26 -0
- package/core/templates/architecture.template.md +113 -0
- package/core/templates/design-spec.template.md +217 -0
- package/core/templates/feature.template +259 -0
- package/core/templates/platform-guide.template.md +145 -0
- package/core/templates/prd.template.md +327 -0
- package/core/templates/product-definition.template.md +168 -0
- package/core/templates/project-context.yaml +161 -0
- package/docs/01-getting-started/README.md +19 -0
- package/docs/01-getting-started/core-concepts.md +102 -0
- package/docs/01-getting-started/installation.md +156 -0
- package/docs/01-getting-started/quickstart.md +85 -0
- package/docs/02-guides/README.md +26 -0
- package/docs/02-guides/developer/README.md +46 -0
- package/docs/02-guides/developer/bdd-and-trace.md +125 -0
- package/docs/02-guides/developer/commands.md +76 -0
- package/docs/02-guides/developer/pr-checklist.md +15 -0
- package/docs/02-guides/developer/scenarios.md +460 -0
- package/docs/02-guides/developer/workflow.md +121 -0
- package/docs/02-guides/product-owner/README.md +79 -0
- package/docs/02-guides/product-owner/commands.md +30 -0
- package/docs/02-guides/product-owner/handoff-checklist.md +42 -0
- package/docs/02-guides/product-owner/prd-writing-rules.md +45 -0
- package/docs/02-guides/product-owner/scenarios.md +436 -0
- package/docs/02-guides/tester/README.md +75 -0
- package/docs/02-guides/tester/bug-reporting.md +117 -0
- package/docs/02-guides/tester/qc-automation.md +165 -0
- package/docs/02-guides/tester/reading-specs.md +79 -0
- package/docs/02-guides/tester/scenarios.md +186 -0
- package/docs/02-guides/tester/spec-manifest.md +130 -0
- package/docs/02-guides/tester/test-checklist.md +31 -0
- package/docs/02-guides/tester/workflow.md +77 -0
- package/docs/03-concepts/README.md +19 -0
- package/docs/03-concepts/architecture.md +248 -0
- package/docs/03-concepts/pipeline.md +274 -0
- package/docs/03-concepts/traceability.md +149 -0
- package/docs/04-operations/README.md +33 -0
- package/docs/04-operations/bug-flow.md +362 -0
- package/docs/04-operations/publishing.md +137 -0
- package/docs/04-operations/sync-and-update.md +522 -0
- package/docs/05-reference/README.md +32 -0
- package/docs/05-reference/command-cheatsheet.md +147 -0
- package/docs/05-reference/commands.md +232 -0
- package/docs/05-reference/modules.md +110 -0
- package/docs/05-reference/trace-schema.md +153 -0
- package/docs/README.md +49 -0
- package/hooks/data-guard.js +141 -0
- package/hooks/settings.json +18 -0
- package/modules/android-compose/module.yaml +13 -0
- package/modules/android-compose/stack-profile.yaml +57 -0
- package/modules/angular/architecture-snippets/component-patterns.md +187 -0
- package/modules/angular/module.yaml +6 -0
- package/modules/angular/stack-profile.yaml +38 -0
- package/modules/context-engineering/architecture-snippets/context-design.md +119 -0
- package/modules/context-engineering/module.yaml +9 -0
- package/modules/context-engineering/stack-profile.yaml +61 -0
- package/modules/dotnet/architecture-snippets/clean-arch.md +160 -0
- package/modules/dotnet/module.yaml +6 -0
- package/modules/dotnet/stack-profile.yaml +50 -0
- package/modules/flutter/module.yaml +14 -0
- package/modules/flutter/stack-profile.yaml +59 -0
- package/modules/golang/architecture-snippets/domain-layout.md +283 -0
- package/modules/golang/module.yaml +6 -0
- package/modules/golang/stack-profile.yaml +40 -0
- package/modules/ios-swiftui/module.yaml +13 -0
- package/modules/ios-swiftui/stack-profile.yaml +55 -0
- package/modules/java-spring/architecture-snippets/layered-arch.md +201 -0
- package/modules/java-spring/module.yaml +15 -0
- package/modules/java-spring/stack-profile.yaml +28 -0
- package/modules/nextjs/architecture-snippets/app-router-patterns.md +269 -0
- package/modules/nextjs/module.yaml +14 -0
- package/modules/nextjs/stack-profile.yaml +74 -0
- package/modules/nuxt/module.yaml +14 -0
- package/modules/nuxt/stack-profile.yaml +58 -0
- package/modules/php-laravel/architecture-snippets/service-repository.md +302 -0
- package/modules/php-laravel/module.yaml +15 -0
- package/modules/php-laravel/stack-profile.yaml +56 -0
- package/modules/qc-playwright/stack-profile.yaml +66 -0
- package/modules/react/architecture-snippets/hooks-query-patterns.md +254 -0
- package/modules/react/module.yaml +14 -0
- package/modules/react/stack-profile.yaml +63 -0
- package/modules/react-native/module.yaml +14 -0
- package/modules/react-native/stack-profile.yaml +56 -0
- package/modules/vue/module.yaml +14 -0
- package/modules/vue/stack-profile.yaml +65 -0
- package/package.json +49 -0
- package/rules/data-protection.md +80 -0
- package/rules/workflow.md +44 -0
- package/scripts/init.sh +49 -0
- package/scripts/migrate-specs.js +256 -0
- package/scripts/upgrade.sh +94 -0
- package/skills/code/SKILL.md +770 -0
- package/skills/code/SKILL.tmpl +176 -0
- package/skills/debug/SKILL.md +869 -0
- package/skills/debug/SKILL.tmpl +262 -0
- package/skills/design-spec/SKILL.md +589 -0
- package/skills/design-spec/SKILL.tmpl +95 -0
- package/skills/discovery/SKILL.md +554 -0
- package/skills/discovery/SKILL.tmpl +147 -0
- package/skills/prd/SKILL.md +562 -0
- package/skills/prd/SKILL.tmpl +188 -0
- package/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
- package/skills/qc/qa-analyst/acceptance-criteria.md +60 -0
- package/skills/qc/qa-analyst/business-rules.md +59 -0
- package/skills/qc/qa-analyst/data-flow.md +64 -0
- package/skills/qc/qa-analyst/spec-breakdown.md +61 -0
- package/skills/qc/qa-designer/e2e/journey.md +41 -0
- package/skills/qc/qa-designer/exploratory/charter.md +68 -0
- package/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
- package/skills/qc/qa-designer/functional/api.md +45 -0
- package/skills/qc/qa-designer/functional/gui-feature.md +46 -0
- package/skills/qc/qa-designer/functional/gui-screen.md +52 -0
- package/skills/qc/qa-designer/integration/api.md +42 -0
- package/skills/qc/qa-designer/integration/db.md +39 -0
- package/skills/qc/qa-designer/integration/gui.md +40 -0
- package/skills/qc/qa-designer/integration/kafka.md +40 -0
- package/skills/qc/qa-designer/non-functional.md +40 -0
- package/skills/qc/qa-planner/test-plan.md +120 -0
- package/skills/qc/qa-reviewer/script/e2e.md +87 -0
- package/skills/qc/qa-reviewer/script/exploratory.md +45 -0
- package/skills/qc/qa-reviewer/script/functional.md +101 -0
- package/skills/qc/qa-reviewer/script/integration.md +91 -0
- package/skills/qc/qa-reviewer/script/non-functional.md +126 -0
- package/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
- package/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
- package/skills/qc/qa-reviewer/test-case/functional.md +76 -0
- package/skills/qc/qa-reviewer/test-case/integration.md +69 -0
- package/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
- package/skills/qc/qa-runner/e2e.md +49 -0
- package/skills/qc/qa-runner/exploratory/session.md +36 -0
- package/skills/qc/qa-runner/functional/api.md +35 -0
- package/skills/qc/qa-runner/functional/gui-feature.md +51 -0
- package/skills/qc/qa-runner/functional/gui-screen.md +55 -0
- package/skills/qc/qa-runner/integration.md +47 -0
- package/skills/qc/qa-runner/non-functional.md +49 -0
- package/skills/qc/qa-runner/report/report.md +37 -0
- package/skills/setup-ai-first/SKILL.md +216 -0
- package/skills/setup-ai-first/SKILL.tmpl +116 -0
- package/skills/spec/SKILL.md +461 -0
- package/skills/spec/SKILL.tmpl +174 -0
- package/skills/test/SKILL.md +1297 -0
- package/skills/test/SKILL.tmpl +296 -0
- package/steps/capture-lesson.md +79 -0
- package/steps/context-loader.md +307 -0
- package/steps/gate.md +87 -0
- package/steps/report-footer.md +100 -0
- package/steps/review-fanout.md +138 -0
- package/steps/spawn-agent.md +124 -0
- package/steps/trace-mirror.md +26 -0
- package/templates/architecture.template.md +113 -0
- package/templates/design-spec.template.md +217 -0
- package/templates/feature.template +259 -0
- package/templates/platform-guide.template.md +145 -0
- package/templates/prd.template.md +327 -0
- package/templates/product-definition.template.md +168 -0
- package/templates/project-context.yaml +161 -0
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
# /sync — Sync & Refresh Umbrella Project
|
|
2
|
+
|
|
3
|
+
One command for both **first-time setup** and **daily update** of an umbrella repo with git submodules.
|
|
4
|
+
Safe to run repeatedly — detects what needs to be done automatically.
|
|
5
|
+
|
|
6
|
+
**Optional argument:** `/sync [spec-branch]` — branch of the spec submodule to pull (e.g. `/sync develop`). If omitted, the branch is resolved automatically (see Step 0-D).
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Step 0 — Pre-flight Checks
|
|
11
|
+
|
|
12
|
+
**A. Git repo check**
|
|
13
|
+
|
|
14
|
+
Verify current directory is inside a git repo. If not → stop:
|
|
15
|
+
```
|
|
16
|
+
❌ Not a git repository. Open Claude Code from umbrella root and retry.
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**B. Read project config early**
|
|
20
|
+
|
|
21
|
+
Read `.agent/project-context.yaml` before running any git commands. Extract:
|
|
22
|
+
- `setup.spec_source` → path of the spec submodule (e.g., `"my-project-specs"`)
|
|
23
|
+
- `services` → map of domain → `{path, module, ...}` for each service submodule
|
|
24
|
+
|
|
25
|
+
This is needed to differentiate spec vs service submodules in Step 1.
|
|
26
|
+
|
|
27
|
+
If `.agent/project-context.yaml` does not exist → warn and set `spec_source = null`, `services = {}`.
|
|
28
|
+
|
|
29
|
+
**C. Submodule status scan**
|
|
30
|
+
|
|
31
|
+
Run `git submodule status --recursive` and classify each entry by its first character:
|
|
32
|
+
|
|
33
|
+
| Char | Meaning | Action |
|
|
34
|
+
|------|---------|--------|
|
|
35
|
+
| `-` | Not initialized | → **Setup mode** |
|
|
36
|
+
| ` ` | Matches recorded pointer | → OK |
|
|
37
|
+
| `+` | Ahead of recorded pointer (local advance uncommitted) | → warn per submodule |
|
|
38
|
+
| `U` | Merge conflict | → **STOP** |
|
|
39
|
+
|
|
40
|
+
If **any** entry has `U`:
|
|
41
|
+
```
|
|
42
|
+
❌ Merge conflict in submodule: {path}
|
|
43
|
+
Resolve manually before running /sync:
|
|
44
|
+
cd {path} && git status
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
If **any** entry has `+` (checked-out commit differs from the recorded pointer):
|
|
48
|
+
```
|
|
49
|
+
ℹ️ {path} is ahead of the umbrella's recorded pointer.
|
|
50
|
+
/sync classifies it in Step 1b — if you're on a branch there, it stays untouched.
|
|
51
|
+
```
|
|
52
|
+
Do not act on `+` here — Step 1b decides the right handling per submodule.
|
|
53
|
+
|
|
54
|
+
Print detected mode: `Mode: Setup (first-time init)` or `Mode: Update (sync latest)`.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Step 1 — Umbrella Pull
|
|
59
|
+
|
|
60
|
+
Note the current umbrella branch first (this is what `git pull` updates):
|
|
61
|
+
`git rev-parse --abbrev-ref HEAD` → store as `umbrella_branch` and display it.
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# 1. Pull latest umbrella (includes updated submodule pointer records)
|
|
65
|
+
git pull
|
|
66
|
+
|
|
67
|
+
# 2. Sync .gitmodules config into local git config
|
|
68
|
+
# (needed when new submodules were added since last clone)
|
|
69
|
+
git submodule sync --recursive
|
|
70
|
+
|
|
71
|
+
# 3. Initialize any NOT-yet-cloned submodules ONLY (the '-' entries from Step 0-C).
|
|
72
|
+
# Do NOT run a blanket `git submodule update --recursive` — that would detach
|
|
73
|
+
# a submodule you are actively working in. Per-submodule handling is Step 1b.
|
|
74
|
+
git submodule update --init {paths that were '-' in Step 0-C}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
If `git pull` exits non-zero → print the error and stop with `❌`.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Step 1b — Classify & Sync Each Submodule
|
|
82
|
+
|
|
83
|
+
**The key idea:** `/sync` never imposes a branch on a submodule. It **inspects each submodule's current checkout** and respects it. This is how it knows which submodule you are working in vs which are passive dependencies.
|
|
84
|
+
|
|
85
|
+
For each submodule (use `git submodule foreach` or iterate the paths), read its state:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Inside each submodule:
|
|
89
|
+
git symbolic-ref --short -q HEAD # → branch name, or empty/non-zero if DETACHED
|
|
90
|
+
git status --porcelain # → non-empty means uncommitted local changes
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Classify into one of four cases and act accordingly:
|
|
94
|
+
|
|
95
|
+
| Case | Detected state | Action |
|
|
96
|
+
|------|----------------|--------|
|
|
97
|
+
| **Spec submodule** | `path == spec_source` | Advance to `spec_branch` (Step 1c below) |
|
|
98
|
+
| **Active (on a branch)** | HEAD is a branch, not detached | **Do NOT checkout.** This is where you (or a teammate) are coding. Just `git -C {path} fetch` and report branch + ahead/behind. Leave the working tree exactly as-is. |
|
|
99
|
+
| **Passive (detached, clean)** | Detached HEAD, no local changes | Safe to align to the umbrella's recorded pointer: `git submodule update {path}` |
|
|
100
|
+
| **Dirty (uncommitted changes)** | `git status --porcelain` non-empty | **Never touch.** Warn: `⚠️ {path} has uncommitted changes — skipped. Commit or stash before syncing this submodule.` |
|
|
101
|
+
|
|
102
|
+
> **Why this matters:** A blanket `git submodule update` checks every submodule out to a **detached HEAD** at the recorded pointer. If you have `feature/FEAT-01` checked out inside `user-service/` and are mid-work, that would silently move you off your branch. Classifying first protects your active work.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Step 1c — Advance Spec Submodule *(only if `spec_source` is configured)*
|
|
107
|
+
|
|
108
|
+
The spec submodule is the one submodule we deliberately advance to a branch HEAD (PO pushes specs continuously).
|
|
109
|
+
|
|
110
|
+
**Resolve the spec branch** (now that the submodule is initialized), in priority order:
|
|
111
|
+
|
|
112
|
+
1. **Command argument** — if `$ARGUMENTS` contains a branch name → use it (one-off override)
|
|
113
|
+
2. **`.gitmodules` config** — `git config -f .gitmodules --get submodule.{spec_source}.branch`. If set → use it (team's committed default)
|
|
114
|
+
3. **Remote default** — else the spec repo's default branch: `git -C {spec_source} rev-parse --abbrev-ref origin/HEAD` (strip the `origin/` prefix)
|
|
115
|
+
|
|
116
|
+
Store as `spec_branch` + `spec_branch_source` (argument | .gitmodules | remote-default). If it fell through to remote-default with nothing pinned, add this hint to the output:
|
|
117
|
+
```
|
|
118
|
+
ℹ️ Spec submodule branch not pinned in .gitmodules — using remote default '{spec_branch}'.
|
|
119
|
+
To pin it for the whole team:
|
|
120
|
+
git config -f .gitmodules submodule.{spec_source}.branch {spec_branch}
|
|
121
|
+
git add .gitmodules && git commit -m "chore: pin spec submodule branch"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Then check it is safe: if the spec submodule has uncommitted changes → warn and skip (devs should treat specs as read-only). Otherwise use an **explicit checkout** (not bare `--remote`) so the branch is unambiguous:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
cd {spec_source}
|
|
128
|
+
git fetch origin
|
|
129
|
+
git checkout {spec_branch} # branch resolved in Step 0-D
|
|
130
|
+
git pull origin {spec_branch}
|
|
131
|
+
cd - # back to umbrella root
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Print: `Spec submodule {spec_source}: pulled branch '{spec_branch}' (source: {spec_branch_source})`
|
|
135
|
+
|
|
136
|
+
> **Why not `--remote` for service submodules?** Service submodules are version-locked by the umbrella's recorded pointer — this is intentional so all devs work from the same commit. `--remote` would bypass this lock and create uncommitted pointer drift. The spec submodule is the exception: PO pushes continuously, so we advance it to a branch HEAD — but we do it with an explicit `checkout {spec_branch}` rather than `--remote` so it never silently follows the wrong branch.
|
|
137
|
+
|
|
138
|
+
If `git pull` or `git submodule update` exits non-zero → print the error and stop with `❌`.
|
|
139
|
+
|
|
140
|
+
Collect from output:
|
|
141
|
+
- Which submodules changed SHA
|
|
142
|
+
- Which were already up to date
|
|
143
|
+
- The spec submodule's `{old_sha}..{new_sha}` (needed by Step 1d)
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Step 1d — Surface Tester/QC Feedback *(bug reports / scenario proposals / PRD change requests)*
|
|
148
|
+
|
|
149
|
+
Tester & QC `/report-bug`, `/propose-scenario` (incl. Case B PRD change requests) commit feedback into the spec repo. This step tells PO/Dev what arrived in **this** pull, so they are notified through their normal routine. It covers both audiences:
|
|
150
|
+
|
|
151
|
+
- **Dev/tester in umbrella** → feedback came in via the spec submodule advance (Step 1c)
|
|
152
|
+
- **PO working directly in the spec repo** → feedback came in via the umbrella/current-repo `git pull` (Step 1)
|
|
153
|
+
|
|
154
|
+
Pick the repo + range that pulled the feedback:
|
|
155
|
+
- Umbrella with `spec_source` → `REPO={spec_source}`, range = spec submodule `{old_sha}..{new_sha}`
|
|
156
|
+
- Otherwise (running inside the spec repo itself) → `REPO=.`, range = the `git pull` `{old_sha}..{new_sha}` from Step 1
|
|
157
|
+
|
|
158
|
+
If `feedback/` does not exist in REPO → skip silently.
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
git -C {REPO} diff --name-status {old_sha}..{new_sha} -- feedback/bug-reports/ feedback/bdd-proposals/ feedback/prd-change-requests/
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
For each entry, read its title/summary + `State` and report. **Bug reports: surface only `State: Open`** as needing attention; list `Fixed`/`Closed` separately (or omit) so the PO/PM sees what's still pending:
|
|
165
|
+
```
|
|
166
|
+
📥 New feedback (pulled this sync):
|
|
167
|
+
Bug reports (open):
|
|
168
|
+
BUG-20260608-01 FT-001 — account locks after 6 fails (spec says 5) [layer: Code · waiting: dev]
|
|
169
|
+
Bug reports (fixed, awaiting QC re-verify): BUG-20260605-02
|
|
170
|
+
Scenario proposals:
|
|
171
|
+
FT-001-trailing-spaces.md → maps to AC2 (pending review)
|
|
172
|
+
PRD change requests:
|
|
173
|
+
FT-001-bulk-export.md → new requirement, needs an AC (waiting: PO)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
If none changed → print `📥 Feedback: none new this sync`.
|
|
177
|
+
|
|
178
|
+
If the reader is a PO/Dev, add a one-line nudge:
|
|
179
|
+
`→ Review feedback/ then act: /fix-bug {BUG-ID} · promote proposal via /generate-bdd · or add an AC to the PRD.`
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Step 2 — Post-sync State Check
|
|
184
|
+
|
|
185
|
+
Run `git status --short` and check for modified submodule entries (lines starting with ` M` where the path matches a submodule).
|
|
186
|
+
|
|
187
|
+
If any submodule pointer changed (typically the spec submodule after `--remote`):
|
|
188
|
+
```
|
|
189
|
+
⚠️ Submodule pointer(s) updated — commit to lock new version into umbrella:
|
|
190
|
+
git add {spec_source} && git commit -m "chore: sync {spec_source} to latest"
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
If no changes → `✅ Umbrella state clean — no commit needed`.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Step 3 — Bootstrap Service Configs
|
|
198
|
+
|
|
199
|
+
*Skip if `services` is empty.*
|
|
200
|
+
|
|
201
|
+
For each entry in `services[]`:
|
|
202
|
+
|
|
203
|
+
**A. If `{service.path}/.agent/project-context.yaml` already exists:**
|
|
204
|
+
- Read `conventions.test_command` and `conventions.build_command`
|
|
205
|
+
- Report: `✅ {service.path} — test: {test_command} | build: {build_command}`
|
|
206
|
+
|
|
207
|
+
**B. If missing — auto-create it:**
|
|
208
|
+
|
|
209
|
+
1. Determine `module` from umbrella `services[].module` (authoritative). If not set, auto-detect from files in `{service.path}/`:
|
|
210
|
+
|
|
211
|
+
| File present | Detected module | test_command | build_command |
|
|
212
|
+
|---|---|---|---|
|
|
213
|
+
| `pom.xml` | `java-spring` | `mvn test` | `mvn compile` |
|
|
214
|
+
| `build.gradle` or `build.gradle.kts` | `java-spring` | `./gradlew test` | `./gradlew build` |
|
|
215
|
+
| `go.mod` | `golang` | `go test ./...` | `go build ./...` |
|
|
216
|
+
| `*.csproj` or `*.sln` | `dotnet` | `dotnet test` | `dotnet build` |
|
|
217
|
+
| `composer.json` | `php-laravel` | `php artisan test` | `composer install` |
|
|
218
|
+
| `pubspec.yaml` | `flutter` | `flutter test` | `flutter build apk` |
|
|
219
|
+
| `angular.json` | `angular` | `npx ng test --watch=false` | `npm run build` |
|
|
220
|
+
| `next.config.*` | `nextjs` | `npx vitest run` | `npm run build` |
|
|
221
|
+
| `package.json` + `nest-cli.json` | `nestjs` | `npm test` | `npm run build` |
|
|
222
|
+
| `package.json` (fallback) | `react` | `npx vitest run` | `npm run build` |
|
|
223
|
+
| `requirements.txt` or `pyproject.toml` | `context-engineering` | `pytest tests/ -v` | `pip install -r requirements.txt` |
|
|
224
|
+
| *(none matched)* | `unknown` | `{{TEST_COMMAND}}` | `{{BUILD_COMMAND}}` |
|
|
225
|
+
|
|
226
|
+
2. Create `{service.path}/.agent/` directory if it does not exist.
|
|
227
|
+
|
|
228
|
+
3. Write `{service.path}/.agent/project-context.yaml`:
|
|
229
|
+
|
|
230
|
+
```yaml
|
|
231
|
+
# Auto-generated by /sync — review and update as needed
|
|
232
|
+
tech_stack:
|
|
233
|
+
language: "{detected or from module}"
|
|
234
|
+
framework: "{detected or from module}"
|
|
235
|
+
module: "{module}"
|
|
236
|
+
|
|
237
|
+
conventions:
|
|
238
|
+
test_command: "{test_command}"
|
|
239
|
+
build_command: "{build_command}"
|
|
240
|
+
|
|
241
|
+
paths:
|
|
242
|
+
trace_dir: ".trace"
|
|
243
|
+
lessons_file: ".agent/project-lessons.md" # per-service guardrails (see /learn)
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
4. Report:
|
|
247
|
+
- If auto-detected: `✅ Created {service.path}/.agent/project-context.yaml (module: {module}, test: {test_command})`
|
|
248
|
+
- If unknown/placeholder: `⚠️ Created {service.path}/.agent/project-context.yaml — fill in {{TEST_COMMAND}} and {{BUILD_COMMAND}}`
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Step 4 — Check `.gitignore`
|
|
253
|
+
|
|
254
|
+
Check the generated Living Docs mirrors are gitignored:
|
|
255
|
+
- `.trace/` in the current repo's `.gitignore` (or `.git/info/exclude`)
|
|
256
|
+
- `.living-docs/` in the **specs module's** `.gitignore` (when `setup.spec_source` is set)
|
|
257
|
+
|
|
258
|
+
If either is missing:
|
|
259
|
+
```
|
|
260
|
+
⚠️ Living Docs mirrors not gitignored — they are generated, never commit them:
|
|
261
|
+
echo ".trace/" >> .gitignore
|
|
262
|
+
echo ".living-docs/" >> {spec_source}/.gitignore # specs module (if spec_source set)
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Step 5 — Refresh Living Docs *(umbrella mode only)*
|
|
268
|
+
|
|
269
|
+
*Skip if `services` is empty.*
|
|
270
|
+
|
|
271
|
+
**Resolve the Living Docs home (same rule as `/validate-traces`):**
|
|
272
|
+
- `living_docs_dir` = `{spec_source}/.living-docs` if `setup.spec_source` is set, else `.living-docs` at umbrella root. *(The specs module is mounted inside every service workspace, so the panel resolves it even when a dev opens a single service submodule.)*
|
|
273
|
+
- `panel_mirror` = `./.trace` at the current workspace root.
|
|
274
|
+
|
|
275
|
+
1. For each service in `services[]`: if `{service.path}/.trace/` has `.tsv` files → copy them to `{living_docs_dir}/{service-name}/` (create dir if needed).
|
|
276
|
+
2. Write merged `{living_docs_dir}/trace-report.json`:
|
|
277
|
+
- Aggregate each service's `.trace/` TSVs, add `"service"` field per row, recalc summary totals.
|
|
278
|
+
3. **Mirror to the panel location:** copy `{living_docs_dir}/trace-report.json` (+ namespaced TSVs) → `{panel_mirror}/` so the panel in the currently-open repo is non-empty. Skip if `panel_mirror` already equals `living_docs_dir`.
|
|
279
|
+
|
|
280
|
+
Print sync result:
|
|
281
|
+
```
|
|
282
|
+
Living Docs → {living_docs_dir}/ synced (canonical, specs module)
|
|
283
|
+
{service-name}: {N} TSVs
|
|
284
|
+
trace-report.json: {total} scenarios across {S} services
|
|
285
|
+
Panel mirror → {panel_mirror}/ (current workspace)
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
If no `.trace/` dirs found → `Living Docs: no trace data yet — run /generate-bdd then /generate-code first.`
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## Step 6 — Refresh Spec Manifest *(if spec_source present)*
|
|
293
|
+
|
|
294
|
+
*Skip if `setup.spec_source` is absent.*
|
|
295
|
+
|
|
296
|
+
If `spec-manifest.yaml` exists OR `setup.spec_source` is configured:
|
|
297
|
+
- Re-scan `{spec_source}/specs/**/prd.md` files
|
|
298
|
+
- Rebuild `spec-manifest.yaml` mapping TICKET-ID → PRD/BDD/tech-doc paths
|
|
299
|
+
- Print: `spec-manifest.yaml refreshed — {N} features indexed`
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## Output
|
|
304
|
+
|
|
305
|
+
# Report Footer — Standard Command Output Format
|
|
306
|
+
|
|
307
|
+
Every command report must end with this standard footer section.
|
|
308
|
+
|
|
309
|
+
## Status Badge
|
|
310
|
+
|
|
311
|
+
Choose one based on outcome:
|
|
312
|
+
- `✅ Complete` — all steps succeeded, no issues found
|
|
313
|
+
- `❌ Failed` — command could not complete due to a blocking error
|
|
314
|
+
- `⚠️ Warnings` — completed with non-blocking issues that should be reviewed
|
|
315
|
+
|
|
316
|
+
## Output Artifacts
|
|
317
|
+
|
|
318
|
+
List every file created or modified by this command:
|
|
319
|
+
```
|
|
320
|
+
Output Artifacts:
|
|
321
|
+
{created|updated} {file-path} ({brief description})
|
|
322
|
+
{created|updated} {file-path} ({brief description})
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
If no files were written (e.g., review or analysis commands) → write `Output Artifacts: none (read-only)`.
|
|
326
|
+
|
|
327
|
+
## Pipeline Position
|
|
328
|
+
|
|
329
|
+
Print a one-line map of the pipeline with the CURRENT command's phase marked `◀ bạn ở đây`,
|
|
330
|
+
so the user always sees where this command sits in the end-to-end flow:
|
|
331
|
+
|
|
332
|
+
```
|
|
333
|
+
Discovery → PRD → [Design Spec] → BDD → Tech Design → Code → Dev Self-Check → QC → Trace Audit
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
Find the current command in this phase legend and mark **its** phase in the map above:
|
|
337
|
+
|
|
338
|
+
| Phase | Commands |
|
|
339
|
+
|-------|----------|
|
|
340
|
+
| Discovery | `/define-product` |
|
|
341
|
+
| PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
|
|
342
|
+
| Design Spec | `/generate-design-spec` |
|
|
343
|
+
| BDD | `/generate-bdd` · `/review-context` (BDD) |
|
|
344
|
+
| Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
|
|
345
|
+
| Code | `/generate-code` · `/review-code` |
|
|
346
|
+
| Dev Self-Check | `/dev-gen-test` · `/dev-run-test` · `/dev-smoke-test` |
|
|
347
|
+
| QC | `/qc-analyze` · `/qc-plan` · `/qc-design-test` · `/qc-review` · `/qc-run-test` · `/qc-report` |
|
|
348
|
+
| Trace Audit | `/validate-traces` |
|
|
349
|
+
|
|
350
|
+
For a **review command**, also append the 3-step review loop with the current step marked, e.g.:
|
|
351
|
+
`Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume`.
|
|
352
|
+
|
|
353
|
+
**Cross-cutting commands** (`/sync`, `/update-framework`, `/fix-bug`, `/debug`, `/learn`,
|
|
354
|
+
`/report-bug`, `/propose-scenario`, `/generate-spec-manifest`) sit outside the linear pipeline —
|
|
355
|
+
**omit the Pipeline line entirely** for these (do not force-fit them onto the map).
|
|
356
|
+
|
|
357
|
+
## Next Command Suggestion
|
|
358
|
+
|
|
359
|
+
Suggest the logical next command based on workflow phase:
|
|
360
|
+
|
|
361
|
+
| Current command | Suggest next |
|
|
362
|
+
|-------------------------|-----------------------------------------------|
|
|
363
|
+
| /setup-ai-first | `/define-product` to start your first feature |
|
|
364
|
+
| /define-product | `/generate-prd {product-definition-file}` |
|
|
365
|
+
| /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
|
|
366
|
+
| /refine-prd | Open Review Board → update PRD → `/review-context {prd-file}` |
|
|
367
|
+
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (then BDD after sign-off); BE: `/generate-bdd {prd-file}` directly; fix PRD if NEEDS_FIX |
|
|
368
|
+
| /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
369
|
+
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
370
|
+
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
371
|
+
| /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
|
|
372
|
+
| /qc-plan | `/qc-design-test {UC-ID}` |
|
|
373
|
+
| /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
|
|
374
|
+
| /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
|
|
375
|
+
| /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
|
|
376
|
+
| /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
|
|
377
|
+
| /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
|
|
378
|
+
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
379
|
+
| /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
|
|
380
|
+
| /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
|
|
381
|
+
| /dev-gen-test | `/dev-run-test {UC-ID}` |
|
|
382
|
+
| /dev-run-test (passing) | `/review-code {UC-ID}` |
|
|
383
|
+
| /dev-run-test (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
|
|
384
|
+
| /review-code | `/dev-smoke-test {UC-ID}` or create PR |
|
|
385
|
+
| /dev-smoke-test | Create PR and link to ticket |
|
|
386
|
+
| /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/dev-gen-test {UC-ID}`; all OK → create PR |
|
|
387
|
+
| /fix-bug | Create PR and link to ticket |
|
|
388
|
+
| /debug | `/fix-bug {ticket-id}` if fix needed |
|
|
389
|
+
| /report-bug | Send to dev (`/fix-bug {BUG-ID}`); if coverage gap → `/propose-scenario {UC-ID}` |
|
|
390
|
+
| /propose-scenario | Notify PO/Dev to review the proposal in `feedback/bdd-proposals/` |
|
|
391
|
+
| /learn | Continue working — lesson applies on next command |
|
|
392
|
+
| /sync | `/validate-traces` for full coverage; act on any `📥 tester feedback` surfaced |
|
|
393
|
+
| /update-framework | Review `git diff .agent/`, commit; `/sync` for project content |
|
|
394
|
+
|
|
395
|
+
Format the footer as:
|
|
396
|
+
```
|
|
397
|
+
---
|
|
398
|
+
Status : {badge}
|
|
399
|
+
{Output Artifacts block}
|
|
400
|
+
Pipeline : Discovery → PRD → [BDD ◀ bạn ở đây] → Tech Design → Code → Dev Self-Check → QC → Trace Audit
|
|
401
|
+
(review cmd) Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume
|
|
402
|
+
Next : {suggested command with example arguments}
|
|
403
|
+
```
|
|
404
|
+
*(Omit the `Pipeline` line for cross-cutting commands listed above.)*
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
```
|
|
408
|
+
/sync — {Setup | Update}
|
|
409
|
+
|
|
410
|
+
Git
|
|
411
|
+
✅ git pull — umbrella on branch '{umbrella_branch}'
|
|
412
|
+
✅ submodule sync — .gitmodules config refreshed
|
|
413
|
+
|
|
414
|
+
Submodules (each handled by its current state)
|
|
415
|
+
✅ {spec_source} [spec] — pulled branch '{spec_branch}' ({spec_branch_source}) → {new-sha}
|
|
416
|
+
✋ user-service [active] — on 'feature/FEAT-01' — left untouched, fetched (↓2 behind origin)
|
|
417
|
+
✅ order-service [passive] — aligned to umbrella pointer {sha}
|
|
418
|
+
⚠️ payment-service [dirty] — uncommitted changes, skipped (commit/stash first)
|
|
419
|
+
|
|
420
|
+
Umbrella state
|
|
421
|
+
⚠️ Pointer changed: git add {spec_source} && git commit -m "chore: sync specs"
|
|
422
|
+
(or: ✅ Clean — no commit needed)
|
|
423
|
+
|
|
424
|
+
Tester feedback (pulled this sync)
|
|
425
|
+
📥 1 bug report: BUG-20260608-01 FT-001 [Code]
|
|
426
|
+
1 proposal: FT-001-trailing-spaces → AC2 (pending review)
|
|
427
|
+
(or: 📥 none new this sync)
|
|
428
|
+
→ /fix-bug {BUG-ID} · promote proposal into BDD · or update PRD
|
|
429
|
+
|
|
430
|
+
Service Configs
|
|
431
|
+
✅ user-service — test: mvn test | build: mvn compile
|
|
432
|
+
✅ order-service — test: mvn test | build: mvn compile
|
|
433
|
+
⚠️ payment-service — .agent/project-context.yaml missing
|
|
434
|
+
→ create it so /dev-run-test works correctly
|
|
435
|
+
|
|
436
|
+
.gitignore
|
|
437
|
+
✅ .trace/ is gitignored
|
|
438
|
+
(or: ⚠️ Add .trace/ to .gitignore)
|
|
439
|
+
|
|
440
|
+
Living Docs
|
|
441
|
+
✅ .trace/ synced — {N} TSVs across {S} services
|
|
442
|
+
(run /validate-traces for full coverage report)
|
|
443
|
+
|
|
444
|
+
Spec Manifest
|
|
445
|
+
✅ spec-manifest.yaml — {N} features indexed
|
|
446
|
+
|
|
447
|
+
---
|
|
448
|
+
Status : ✅ Complete | ⚠️ Warnings
|
|
449
|
+
Output Artifacts: updated .trace/ (umbrella mirror), spec-manifest.yaml
|
|
450
|
+
Next : /validate-traces (full coverage check) | /generate-code {UC-ID} (start coding)
|
|
451
|
+
```
|