sinapse-ai 1.16.0 → 1.17.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/.claude/hooks/doc-first-gate.cjs +156 -0
- package/.claude/hooks/enforce-story-gate.cjs +6 -2
- package/.claude/rules/hook-governance.md +1 -0
- package/.sinapse-ai/constitution.md +1 -1
- package/.sinapse-ai/core/atlas/atlas-data.js +278 -0
- package/.sinapse-ai/core/atlas/flows-pt.js +253 -0
- package/.sinapse-ai/core/atlas/flows.js +266 -0
- package/.sinapse-ai/core/atlas/index.js +62 -0
- package/.sinapse-ai/core/atlas/render-html.js +216 -0
- package/.sinapse-ai/core/atlas/render-markdown.js +313 -0
- package/.sinapse-ai/core/atlas/render-research-card.js +164 -0
- package/.sinapse-ai/core/orchestration/build-command.js +136 -0
- package/.sinapse-ai/core/orchestration/doc-first-resolver.js +322 -0
- package/.sinapse-ai/core/orchestration/route-command.js +97 -0
- package/.sinapse-ai/data/entity-registry.yaml +59 -14
- package/.sinapse-ai/development/agents/snps-orqx.md +9 -0
- package/.sinapse-ai/development/tasks/create-doc.md +1 -1
- package/.sinapse-ai/development/tasks/create-next-story.md +2 -3
- package/.sinapse-ai/development/tasks/spec-gather-requirements.md +11 -0
- package/.sinapse-ai/development/templates/approval-table.md +106 -0
- package/.sinapse-ai/development/workflows/spec-pipeline.yaml +1 -0
- package/.sinapse-ai/install-manifest.yaml +60 -16
- package/.sinapse-ai/product/templates/prd-tmpl.yaml +6 -2
- package/CHANGELOG.md +18 -2
- package/bin/sinapse.js +121 -0
- package/docs/framework/atlas/OPERATING-ATLAS.md +537 -0
- package/docs/framework/atlas/README.md +34 -0
- package/docs/framework/atlas/atlas-data.json +2810 -0
- package/docs/framework/atlas/atlas.html +392 -0
- package/package.json +1 -1
- package/packages/installer/src/wizard/ide-config-generator.js +6 -0
- package/scripts/install-chrome-brain.sh +2 -2
- package/scripts/validate-no-personal-leaks.js +24 -9
- package/squads/squad-copy/knowledge-base/consequence-headline-patterns.md +2 -2
- package/docs/guides/hooks-two-layers.md +0 -66
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route Command — read-only doc-first routing observability.
|
|
3
|
+
*
|
|
4
|
+
* Renders the deterministic routing decision for a briefing: project type →
|
|
5
|
+
* workflow → required upstream docs (exist/missing) → doc-first gate verdict.
|
|
6
|
+
*
|
|
7
|
+
* Intentionally lightweight: requires ONLY `doc-first-resolver` (fs + constants)
|
|
8
|
+
* and chalk. It does NOT pull the heavy orchestration index, so it has no side
|
|
9
|
+
* effects and no agent spawning.
|
|
10
|
+
*
|
|
11
|
+
* NOTE: a machine-readable `--json` mode was intentionally deferred — the
|
|
12
|
+
* framework emits an activation/cleanup summary to stdout on process exit
|
|
13
|
+
* (the same trailing line seen on `sinapse orchestrate`), which would corrupt
|
|
14
|
+
* strict JSON output. Programmatic consumers should require `doc-first-resolver`
|
|
15
|
+
* directly (clean, no side effects) instead of parsing this command's stdout.
|
|
16
|
+
*
|
|
17
|
+
* @module core/orchestration/route-command
|
|
18
|
+
* @version 1.0.0
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
'use strict';
|
|
22
|
+
|
|
23
|
+
const { resolveDocFirstState } = require('./doc-first-resolver');
|
|
24
|
+
|
|
25
|
+
let chalk;
|
|
26
|
+
try {
|
|
27
|
+
chalk = require('chalk');
|
|
28
|
+
} catch {
|
|
29
|
+
const id = (s) => s;
|
|
30
|
+
chalk = {
|
|
31
|
+
green: id, red: id, yellow: id, cyan: Object.assign(id, { bold: id }),
|
|
32
|
+
gray: id, bold: id, dim: id,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Execute the `route` command.
|
|
38
|
+
*
|
|
39
|
+
* @param {string} brief - User briefing (e.g. "criar um site pra X")
|
|
40
|
+
* @param {Object} [options]
|
|
41
|
+
* @param {string} [options.projectRoot] - Project root path
|
|
42
|
+
* @param {string} [options.type] - Explicit project_type override
|
|
43
|
+
* @returns {Promise<{success:boolean, exitCode:number, state:Object}>}
|
|
44
|
+
*/
|
|
45
|
+
async function route(brief, options = {}) {
|
|
46
|
+
const projectRoot = options.projectRoot || process.cwd();
|
|
47
|
+
const state = resolveDocFirstState({ projectRoot, brief, projectType: options.type });
|
|
48
|
+
|
|
49
|
+
const ok = (b) => (b ? chalk.green('✓') : chalk.red('✗'));
|
|
50
|
+
const briefLabel = brief ? `"${brief}"` : '(no brief — using project state only)';
|
|
51
|
+
|
|
52
|
+
console.log(chalk.cyan('\n═══════════════════════════════════════════════════════════'));
|
|
53
|
+
console.log(chalk.cyan.bold(' 🧭 SINAPSE Doc-First Routing'));
|
|
54
|
+
console.log(chalk.cyan('═══════════════════════════════════════════════════════════\n'));
|
|
55
|
+
|
|
56
|
+
console.log(`Brief: ${chalk.gray(briefLabel)}`);
|
|
57
|
+
console.log(
|
|
58
|
+
`Project type: ${chalk.bold(state.projectType)}` +
|
|
59
|
+
(state.classified ? '' : chalk.gray(' (default — not matched from brief)')),
|
|
60
|
+
);
|
|
61
|
+
console.log(`Workflow: ${chalk.bold(state.workflow || 'SDC (no upstream re-doc)')}\n`);
|
|
62
|
+
|
|
63
|
+
if (state.artifacts.length) {
|
|
64
|
+
console.log(chalk.bold('Required upstream documents:'));
|
|
65
|
+
console.log(chalk.gray(' ┌──────────────────┬────────────────────────────────────┬────────┐'));
|
|
66
|
+
console.log(chalk.gray(' │ Document │ Path │ Status │'));
|
|
67
|
+
console.log(chalk.gray(' ├──────────────────┼────────────────────────────────────┼────────┤'));
|
|
68
|
+
for (const a of state.artifacts) {
|
|
69
|
+
console.log(` │ ${a.id.padEnd(16)} │ ${a.path.padEnd(34)} │ ${ok(a.exists)} │`);
|
|
70
|
+
}
|
|
71
|
+
console.log(chalk.gray(' └──────────────────┴────────────────────────────────────┴────────┘\n'));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
console.log(chalk.bold('Doc-first gate (required before code):'));
|
|
75
|
+
if (state.isLightType) {
|
|
76
|
+
console.log(chalk.gray(' (light task — rides on existing project; only a Ready story is required)'));
|
|
77
|
+
console.log(` ${ok(state.gate.readyStory)} Story (status >= Ready)`);
|
|
78
|
+
} else {
|
|
79
|
+
console.log(` ${ok(state.gate.prd)} PRD ${chalk.gray('docs/prd.md')}`);
|
|
80
|
+
console.log(` ${ok(state.gate.epic)} Epic ${chalk.gray('docs/epics/')}`);
|
|
81
|
+
console.log(` ${ok(state.gate.readyStory)} Story (Ready) ${chalk.gray('docs/stories/')}`);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
console.log('');
|
|
85
|
+
if (state.gate.satisfied) {
|
|
86
|
+
console.log(chalk.green.bold(' ✅ GATE SATISFIED — implementation may proceed.\n'));
|
|
87
|
+
} else {
|
|
88
|
+
console.log(chalk.red.bold(' 🚫 GATE BLOCKED — missing: ' + state.gate.missing.join(', ')));
|
|
89
|
+
console.log(
|
|
90
|
+
chalk.gray(` Run the ${state.workflow || 'SDC'} flow to produce these before any code.\n`),
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return { success: true, exitCode: 0, state };
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
module.exports = { route };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
metadata:
|
|
2
2
|
version: 1.0.0
|
|
3
|
-
lastUpdated: '2026-06-
|
|
4
|
-
entityCount:
|
|
3
|
+
lastUpdated: '2026-06-25T14:57:04.344Z'
|
|
4
|
+
entityCount: 796
|
|
5
5
|
checksumAlgorithm: sha256
|
|
6
6
|
resolutionRate: 100
|
|
7
7
|
entities:
|
|
@@ -650,6 +650,7 @@ entities:
|
|
|
650
650
|
- chrome-brain-installer
|
|
651
651
|
- cli
|
|
652
652
|
- component-generator
|
|
653
|
+
- route-command
|
|
653
654
|
externalDeps: []
|
|
654
655
|
plannedDeps:
|
|
655
656
|
- logger
|
|
@@ -660,8 +661,8 @@ entities:
|
|
|
660
661
|
score: 0.7
|
|
661
662
|
constraints: []
|
|
662
663
|
extensionPoints: []
|
|
663
|
-
checksum: sha256:
|
|
664
|
-
lastVerified: '2026-06-
|
|
664
|
+
checksum: sha256:5ee1c859ceedbbaa2cea1463677462985f1ce9472963d4b51589bdbfc5302395
|
|
665
|
+
lastVerified: '2026-06-25T14:57:04.173Z'
|
|
665
666
|
collab-start:
|
|
666
667
|
path: bin/utils/collab-start.js
|
|
667
668
|
layer: L1
|
|
@@ -1927,8 +1928,8 @@ entities:
|
|
|
1927
1928
|
score: 0.8
|
|
1928
1929
|
constraints: []
|
|
1929
1930
|
extensionPoints: []
|
|
1930
|
-
checksum: sha256:
|
|
1931
|
-
lastVerified: '2026-06-
|
|
1931
|
+
checksum: sha256:c59435108b2a016040bafbcf6bbcf1a9ce3502446871ef5a3af908f38602cbfa
|
|
1932
|
+
lastVerified: '2026-06-25T14:35:16.949Z'
|
|
1932
1933
|
create-next-story:
|
|
1933
1934
|
path: .sinapse-ai/development/tasks/create-next-story.md
|
|
1934
1935
|
layer: L2
|
|
@@ -1966,8 +1967,8 @@ entities:
|
|
|
1966
1967
|
score: 0.8
|
|
1967
1968
|
constraints: []
|
|
1968
1969
|
extensionPoints: []
|
|
1969
|
-
checksum: sha256:
|
|
1970
|
-
lastVerified: '2026-06-
|
|
1970
|
+
checksum: sha256:5e3d0b592821b1136db7dcfa911ee5080055d76b2f390fe0497e8702b06f330d
|
|
1971
|
+
lastVerified: '2026-06-25T14:35:16.949Z'
|
|
1971
1972
|
create-service:
|
|
1972
1973
|
path: .sinapse-ai/development/tasks/create-service.md
|
|
1973
1974
|
layer: L2
|
|
@@ -5751,8 +5752,8 @@ entities:
|
|
|
5751
5752
|
score: 0.8
|
|
5752
5753
|
constraints: []
|
|
5753
5754
|
extensionPoints: []
|
|
5754
|
-
checksum: sha256:
|
|
5755
|
-
lastVerified: '2026-06-
|
|
5755
|
+
checksum: sha256:7ed12b65fca5657d218fbfaa40c0a05af5d3e14a17a332c089dd1147d7cb1ca9
|
|
5756
|
+
lastVerified: '2026-06-25T14:35:16.977Z'
|
|
5756
5757
|
spec-research-dependencies:
|
|
5757
5758
|
path: .sinapse-ai/development/tasks/spec-research-dependencies.md
|
|
5758
5759
|
layer: L2
|
|
@@ -7340,8 +7341,8 @@ entities:
|
|
|
7340
7341
|
score: 0.5
|
|
7341
7342
|
constraints: []
|
|
7342
7343
|
extensionPoints: []
|
|
7343
|
-
checksum: sha256:
|
|
7344
|
-
lastVerified: '2026-06-
|
|
7344
|
+
checksum: sha256:ae365825677131fc9f5c6762c6a4a036be0737442bcbdb04cdbd4e3e3f547265
|
|
7345
|
+
lastVerified: '2026-06-25T14:35:16.991Z'
|
|
7345
7346
|
project-brief-tmpl:
|
|
7346
7347
|
path: .sinapse-ai/product/templates/project-brief-tmpl.yaml
|
|
7347
7348
|
layer: L2
|
|
@@ -11880,6 +11881,28 @@ entities:
|
|
|
11880
11881
|
extensionPoints: []
|
|
11881
11882
|
checksum: sha256:14e91bfefde4f1ee9ecea1e2902bcc43a754719b1572d93f7d2ca357c87c8312
|
|
11882
11883
|
lastVerified: '2026-06-15T00:26:26.404Z'
|
|
11884
|
+
doc-first-resolver:
|
|
11885
|
+
path: .sinapse-ai/core/orchestration/doc-first-resolver.js
|
|
11886
|
+
layer: L1
|
|
11887
|
+
type: module
|
|
11888
|
+
purpose: Entity at .sinapse-ai\core\orchestration\doc-first-resolver.js
|
|
11889
|
+
keywords:
|
|
11890
|
+
- doc
|
|
11891
|
+
- first
|
|
11892
|
+
- resolver
|
|
11893
|
+
usedBy:
|
|
11894
|
+
- route-command
|
|
11895
|
+
dependencies:
|
|
11896
|
+
- greenfield-handler
|
|
11897
|
+
externalDeps: []
|
|
11898
|
+
plannedDeps: []
|
|
11899
|
+
lifecycle: production
|
|
11900
|
+
adaptability:
|
|
11901
|
+
score: 0.4
|
|
11902
|
+
constraints: []
|
|
11903
|
+
extensionPoints: []
|
|
11904
|
+
checksum: sha256:e3c8c695ef0b4f268a3e02a0d4258fef1ae90aaec0b281ee8c5c5fb3bd475939
|
|
11905
|
+
lastVerified: '2026-06-25T14:57:04.259Z'
|
|
11883
11906
|
epic-context-accumulator:
|
|
11884
11907
|
path: .sinapse-ai/core/orchestration/epic-context-accumulator.js
|
|
11885
11908
|
layer: L1
|
|
@@ -12084,6 +12107,7 @@ entities:
|
|
|
12084
12107
|
- handler
|
|
12085
12108
|
usedBy:
|
|
12086
12109
|
- bob-orchestrator
|
|
12110
|
+
- doc-first-resolver
|
|
12087
12111
|
dependencies:
|
|
12088
12112
|
- workflow-executor
|
|
12089
12113
|
- surface-checker
|
|
@@ -12190,6 +12214,27 @@ entities:
|
|
|
12190
12214
|
extensionPoints: []
|
|
12191
12215
|
checksum: sha256:cfbf41b69336548b2fc4179a5513243491ca6eb501de3426f98254f118b074e7
|
|
12192
12216
|
lastVerified: '2026-06-15T00:26:26.411Z'
|
|
12217
|
+
route-command:
|
|
12218
|
+
path: .sinapse-ai/core/orchestration/route-command.js
|
|
12219
|
+
layer: L1
|
|
12220
|
+
type: module
|
|
12221
|
+
purpose: Entity at .sinapse-ai\core\orchestration\route-command.js
|
|
12222
|
+
keywords:
|
|
12223
|
+
- route
|
|
12224
|
+
- command
|
|
12225
|
+
usedBy:
|
|
12226
|
+
- sinapse
|
|
12227
|
+
dependencies:
|
|
12228
|
+
- doc-first-resolver
|
|
12229
|
+
externalDeps: []
|
|
12230
|
+
plannedDeps: []
|
|
12231
|
+
lifecycle: production
|
|
12232
|
+
adaptability:
|
|
12233
|
+
score: 0.4
|
|
12234
|
+
constraints: []
|
|
12235
|
+
extensionPoints: []
|
|
12236
|
+
checksum: sha256:b7a5aa520936eb819d7b577fd7b15bcee8c7f8e9e147c6fa3db9fd12a493b7f3
|
|
12237
|
+
lastVerified: '2026-06-25T14:57:04.262Z'
|
|
12193
12238
|
session-state:
|
|
12194
12239
|
path: .sinapse-ai/core/orchestration/session-state.js
|
|
12195
12240
|
layer: L1
|
|
@@ -15138,8 +15183,8 @@ entities:
|
|
|
15138
15183
|
score: 0.4
|
|
15139
15184
|
constraints: []
|
|
15140
15185
|
extensionPoints: []
|
|
15141
|
-
checksum: sha256:
|
|
15142
|
-
lastVerified: '2026-06-
|
|
15186
|
+
checksum: sha256:fc739f0f5ec927ed9daecbd0fc74b68017ed548ce445c40b9b1ecd5f1ff2ff4b
|
|
15187
|
+
lastVerified: '2026-06-25T14:35:17.067Z'
|
|
15143
15188
|
story-development-cycle:
|
|
15144
15189
|
path: .sinapse-ai/development/workflows/story-development-cycle.yaml
|
|
15145
15190
|
layer: L2
|
|
@@ -80,6 +80,15 @@ Caio's runtime test (2026-05-07) showed the framework treating fresh installs as
|
|
|
80
80
|
> **This step runs AFTER the Initial State Audit, BEFORE the routing decision. No exceptions.**
|
|
81
81
|
> Without it, Imperator routes large-project requests directly to a domain orchestrator and skips the doc-first pipeline (Article III violation).
|
|
82
82
|
|
|
83
|
+
### Deterministic engine (source of truth — never hand-classify)
|
|
84
|
+
|
|
85
|
+
The classification below is NOT done by reasoning from memory. It is computed by the **doc-first resolver** (`.sinapse-ai/core/orchestration/doc-first-resolver.js`) — the single source of truth shared by the CLI and the enforcement hook, so the agent and the gate can never drift:
|
|
86
|
+
|
|
87
|
+
- **Observe the decision** with `sinapse route "<brief>"` — read-only, no side effects. It returns the resolved `projectType`, the required greenfield `workflow`, the upstream `artifacts` (brief → prd → spec → architecture), and whether the doc-first `gate` is already satisfied.
|
|
88
|
+
- **Enforcement is automatic** — the `doc-first-gate.cjs` PreToolUse hook HARD-BLOCKS code writes in a greenfield project until PRD + epic + a `Ready` story exist. The framework repo and existing (brownfield) projects are exempt; escape with `SINAPSE_SKIP_DOCFIRST=1` only when explicitly justified.
|
|
89
|
+
|
|
90
|
+
Run `sinapse route` first and let its output drive Steps 1–4 below. Steps 1–4 are the human-readable explanation of what the resolver already decided — when prose and resolver disagree, the resolver wins.
|
|
91
|
+
|
|
83
92
|
After the audit reports the maturity level, classify the request **before** consulting the routing table:
|
|
84
93
|
|
|
85
94
|
### Step 1 — Detect intent
|
|
@@ -238,7 +238,7 @@ If a YAML Template has not been provided, list all templates from .sinapse-ai/pr
|
|
|
238
238
|
|
|
239
239
|
**YOU MUST:**
|
|
240
240
|
|
|
241
|
-
1. Present section content
|
|
241
|
+
1. Present section content. **If the section content is a list of artifacts (epics, requirements, stories, tasks, risks), render it as a scannable approval table FIRST, following `.sinapse-ai/development/templates/approval-table.md` (verdict header → table → decision prompt). Never report a list as a count or as prose when a table schema fits.**
|
|
242
242
|
2. Provide detailed rationale (explain trade-offs, assumptions, decisions made)
|
|
243
243
|
3. **STOP and present numbered options 1-9:**
|
|
244
244
|
- **Option 1:** Always "Proceed to next section"
|
|
@@ -773,9 +773,8 @@ Use the primary agent from "Specialized Agent Assignment" to determine which sel
|
|
|
773
773
|
- Ensure tasks align with both epic requirements and architecture constraints
|
|
774
774
|
- Update status to "Draft" and save the story file
|
|
775
775
|
- Execute `sinapse-ai/tasks/execute-checklist` `sinapse-ai/checklists/story-draft-checklist`
|
|
776
|
-
- Provide summary to user
|
|
777
|
-
- Story created
|
|
778
|
-
- Status: Draft
|
|
776
|
+
- Provide summary to user as a scannable **story approval table** per `.sinapse-ai/development/templates/approval-table.md` (Story summary schema: a `| Field | Value |` table + an `| AC# | Criterion | Tasks |` table), not a plain bullet list. The table MUST surface:
|
|
777
|
+
- Story created (path), Status (Draft), Acceptance count, Tasks count (linked to ACs), Dependencies
|
|
779
778
|
- Key technical components included from architecture docs
|
|
780
779
|
- Any deviations or conflicts noted between epic and architecture
|
|
781
780
|
- Checklist Results
|
|
@@ -302,6 +302,17 @@ structuring:
|
|
|
302
302
|
|
|
303
303
|
---
|
|
304
304
|
|
|
305
|
+
### Phase 5: Present for Approval
|
|
306
|
+
|
|
307
|
+
After structuring `requirements.json`, present the gathered requirements back to the user as
|
|
308
|
+
scannable **approval tables** following `.sinapse-ai/development/templates/approval-table.md`
|
|
309
|
+
(Requirements schema) — one table for Functional (`| ID | Description | Priority | Source |`),
|
|
310
|
+
one for Non-Functional (`| ID | Category | Requirement | Metric/Target |`), and one for
|
|
311
|
+
Constraints when present. Lead with the verdict header (`── REQUIREMENTS REVIEW · {n} item(s) · status: DRAFT ──`).
|
|
312
|
+
Do NOT report only the count (e.g. "8 FR, 3 NFR") — the user must see and approve the actual rows.
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
305
316
|
## Output Schema
|
|
306
317
|
|
|
307
318
|
```json
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Approval Table — Shared Terminal Presentation Convention
|
|
2
|
+
|
|
3
|
+
> **Reusable presentation protocol.** Any task that asks the user to review or approve a
|
|
4
|
+
> set of artifacts (requirements, epics, stories, tasks, risks, open questions) MUST render
|
|
5
|
+
> them through this convention BEFORE asking for a decision. This is the single source of
|
|
6
|
+
> truth for "scannable terminal table + verdict", so the experience is identical across
|
|
7
|
+
> PRD, epic, story, and spec flows. Do not duplicate ad-hoc formats per task — reference
|
|
8
|
+
> this file.
|
|
9
|
+
|
|
10
|
+
## Why this exists
|
|
11
|
+
|
|
12
|
+
Lists decided during planning (FRs, NFRs, epics, stories) used to be reported as counts or
|
|
13
|
+
prose ("✅ 8 FR, 3 NFR"). That forces the user to open a file to actually review. This
|
|
14
|
+
convention renders the real items as a scannable table the user can approve row by row,
|
|
15
|
+
right in the terminal. Output language follows the project's language (PT-BR for the user
|
|
16
|
+
when applicable); the schemas below are language-agnostic.
|
|
17
|
+
|
|
18
|
+
## The protocol (3 parts, always in this order)
|
|
19
|
+
|
|
20
|
+
1. **Verdict header** — one scannable line stating what is being reviewed and the current
|
|
21
|
+
status. Format:
|
|
22
|
+
```
|
|
23
|
+
── {ARTIFACT} REVIEW · {n} item(s) · status: {DRAFT|READY|APPROVED|NEEDS REVISION} ──
|
|
24
|
+
```
|
|
25
|
+
2. **The table** — render the items using the matching schema below. Keep it scannable:
|
|
26
|
+
one row per item, truncate long cells to ~60 chars with `…`, never wrap a cell across
|
|
27
|
+
lines. Use the priority/severity emoji legend when the schema has one.
|
|
28
|
+
3. **The decision prompt** — after the table, ask for the decision in the form the calling
|
|
29
|
+
task requires (the 1-9 elicitation menu, or a GO / NO-GO, or `[GO] [PAUSE] [REVISE] [ABORT]`).
|
|
30
|
+
Never ask for approval without showing the table first.
|
|
31
|
+
|
|
32
|
+
## Standard schemas
|
|
33
|
+
|
|
34
|
+
Use the schema that matches the artifact. Add/trim columns only when the data genuinely
|
|
35
|
+
requires it — keep the core columns stable so the experience is consistent.
|
|
36
|
+
|
|
37
|
+
### Requirements (gather / spec)
|
|
38
|
+
```
|
|
39
|
+
| ID | Description | Priority | Source |
|
|
40
|
+
| ----- | ------------------------------------ | -------- | ----------------- |
|
|
41
|
+
| FR-1 | {functional requirement} | 🔴 P0 | requirements.json |
|
|
42
|
+
|
|
43
|
+
| ID | Category | Requirement | Metric / Target |
|
|
44
|
+
| ----- | ----------- | ------------------------ | ----------------- |
|
|
45
|
+
| NFR-1 | {category} | {non-functional req} | {measurable} |
|
|
46
|
+
|
|
47
|
+
| ID | Type | Constraint | Impact |
|
|
48
|
+
| ----- | -------- | ------------------------ | ----------------- |
|
|
49
|
+
| CON-1 | {type} | {constraint} | {impact} |
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Epic list (PRD epic-list approval)
|
|
53
|
+
```
|
|
54
|
+
| # | Epic | Goal (1 line) | Stories |
|
|
55
|
+
| -- | ----------------------------- | ------------------------------------- | ------- |
|
|
56
|
+
| 1 | Foundation & Core Infra | {one-sentence goal} | ~{n} |
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Epic detail — stories within an epic
|
|
60
|
+
```
|
|
61
|
+
| Story | As a … / I want … | ACs | Depends on |
|
|
62
|
+
| ----- | --------------------------------- | --- | ---------- |
|
|
63
|
+
| 1.1 | {user} wants {action} | {n} | — |
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Story summary (create / validate story)
|
|
67
|
+
```
|
|
68
|
+
| Field | Value |
|
|
69
|
+
| ------------ | ------------------------------------------------ |
|
|
70
|
+
| Story | {epicNum}.{storyNum} — {title} |
|
|
71
|
+
| Status | {Draft \| Ready \| InProgress \| Done} |
|
|
72
|
+
| Acceptance | {n} criteria |
|
|
73
|
+
| Tasks | {n} (linked to AC: {list}) |
|
|
74
|
+
| Dependencies | {list or —} |
|
|
75
|
+
|
|
76
|
+
| AC# | Criterion | Tasks |
|
|
77
|
+
| --- | ------------------------------------------ | ---------- |
|
|
78
|
+
| 1 | {given/when/then} | T1, T3 |
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Risks & open questions (spec / plan)
|
|
82
|
+
```
|
|
83
|
+
| Risk | Probability | Impact | Mitigation |
|
|
84
|
+
| --------------- | ------------- | ------------- | ----------------- |
|
|
85
|
+
| {risk} | 🟢/🟡/🔴 | 🟢/🟡/🔴 | {mitigation} |
|
|
86
|
+
|
|
87
|
+
| ID | Question | Blocking | Assigned To |
|
|
88
|
+
| ---- | ------------------------- | -------- | ----------- |
|
|
89
|
+
| OQ-1 | {open question} | Yes / No | @{agent} |
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Legends
|
|
93
|
+
|
|
94
|
+
- **Priority:** 🔴 P0 (must) · 🟠 P1 (should) · 🟡 P2 (could) · 🟢 P3 (won't-now)
|
|
95
|
+
- **Severity / level:** 🔴 High · 🟡 Medium · 🟢 Low
|
|
96
|
+
- **Status glyphs (optional inline):** ✓ done · ● in progress · ○ pending · ✗ blocked
|
|
97
|
+
|
|
98
|
+
## Rules
|
|
99
|
+
|
|
100
|
+
- Always render the table for a list ≥ 2 items. For a single item, a compact field table is
|
|
101
|
+
still preferred over prose.
|
|
102
|
+
- The table is in addition to writing the artifact file — never replace the file, and never
|
|
103
|
+
replace the table with a count.
|
|
104
|
+
- Keep within terminal width: prefer fewer, tighter columns over a wide table that wraps.
|
|
105
|
+
- When iterating (NEEDS REVISION), re-render the full table with the changed rows marked
|
|
106
|
+
(prefix the changed cell with `» `), so the user sees what moved.
|
|
@@ -208,6 +208,7 @@ workflow:
|
|
|
208
208
|
|
|
209
209
|
on_success:
|
|
210
210
|
log: "✅ Requirements gathered: {requirements.functional.length} FR, {requirements.nonFunctional.length} NFR"
|
|
211
|
+
present_table: ".sinapse-ai/development/templates/approval-table.md" # Render FR/NFR/CON as scannable approval tables, not just the count
|
|
211
212
|
next: assess
|
|
212
213
|
|
|
213
214
|
on_failure:
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
# - SHA256 hashes for change detection
|
|
8
8
|
# - File types for categorization
|
|
9
9
|
#
|
|
10
|
-
version: 1.
|
|
10
|
+
version: 1.17.0
|
|
11
11
|
generator: scripts/generate-install-manifest.js
|
|
12
|
-
file_count:
|
|
12
|
+
file_count: 1163
|
|
13
13
|
files:
|
|
14
14
|
- path: cli/commands/config/index.js
|
|
15
15
|
hash: sha256:bfa83cb1dc111b0b30dd298dc0abc2150b73f939b6cd4458effa8e6d407bc9e2
|
|
@@ -195,6 +195,34 @@ files:
|
|
|
195
195
|
hash: sha256:e3da197727d22d7b95f31cf288faa7810f4806dcc8e448163c154ec9c0755c64
|
|
196
196
|
type: config
|
|
197
197
|
size: 12646
|
|
198
|
+
- path: core/atlas/atlas-data.js
|
|
199
|
+
hash: sha256:ab6ef91bd2de1498dbe3892a80b5f18d67624db1fb2da74b0e53f83de902f383
|
|
200
|
+
type: core
|
|
201
|
+
size: 11444
|
|
202
|
+
- path: core/atlas/flows-pt.js
|
|
203
|
+
hash: sha256:8db1cd79a9b3abbbf666162405bc59b8bf1e81c523d7a2709434d91118f1d5e0
|
|
204
|
+
type: core
|
|
205
|
+
size: 11499
|
|
206
|
+
- path: core/atlas/flows.js
|
|
207
|
+
hash: sha256:099392b58b9a8e2dfadb7e108949f19420acfde472406a94bd9c21e356615cab
|
|
208
|
+
type: core
|
|
209
|
+
size: 11033
|
|
210
|
+
- path: core/atlas/index.js
|
|
211
|
+
hash: sha256:ea1e47887854cf348cf29c99c6e5d6218d4e6e709db14a6caa0b289303200363
|
|
212
|
+
type: core
|
|
213
|
+
size: 2028
|
|
214
|
+
- path: core/atlas/render-html.js
|
|
215
|
+
hash: sha256:d84e928fbaa7f20f4c253758af3af486805683b66027d38d682cc453a5f68a0c
|
|
216
|
+
type: core
|
|
217
|
+
size: 11656
|
|
218
|
+
- path: core/atlas/render-markdown.js
|
|
219
|
+
hash: sha256:6d379f52785f81a697ed7e7e4a673564492f58fd79ef9a915e22331a3fdde23a
|
|
220
|
+
type: core
|
|
221
|
+
size: 12076
|
|
222
|
+
- path: core/atlas/render-research-card.js
|
|
223
|
+
hash: sha256:86086e58ea6e3f4a19229f7c755cb4072a8582e8de70e5610c58ea578276204e
|
|
224
|
+
type: core
|
|
225
|
+
size: 6069
|
|
198
226
|
- path: core/code-intel/code-intel-client.js
|
|
199
227
|
hash: sha256:65f6c0f2bb639ff3080db3d85660e0b8097e5af7c60dc04f582ef20f42cc9cfc
|
|
200
228
|
type: core
|
|
@@ -915,6 +943,10 @@ files:
|
|
|
915
943
|
hash: sha256:8ef9a6d27f9d1d4145fbbfb8657691582aaf0c348278edd638d55fd139edddd4
|
|
916
944
|
type: core
|
|
917
945
|
size: 28608
|
|
946
|
+
- path: core/orchestration/build-command.js
|
|
947
|
+
hash: sha256:b758cfc7c0fad3d0d875460630b9ac7b2c968b82cdec14e9885e0744ee7012d0
|
|
948
|
+
type: core
|
|
949
|
+
size: 5236
|
|
918
950
|
- path: core/orchestration/checklist-runner.js
|
|
919
951
|
hash: sha256:9bee322fb2572ef81361a3f695b2855f61d610739c612d8b6317cb1b5d6d84c9
|
|
920
952
|
type: core
|
|
@@ -939,6 +971,10 @@ files:
|
|
|
939
971
|
hash: sha256:14e91bfefde4f1ee9ecea1e2902bcc43a754719b1572d93f7d2ca357c87c8312
|
|
940
972
|
type: core
|
|
941
973
|
size: 10880
|
|
974
|
+
- path: core/orchestration/doc-first-resolver.js
|
|
975
|
+
hash: sha256:92a4170f3ed0b6b214608c80e17c8c6b1769a50b849532af4ae34db070a6931f
|
|
976
|
+
type: core
|
|
977
|
+
size: 14592
|
|
942
978
|
- path: core/orchestration/epic-context-accumulator.js
|
|
943
979
|
hash: sha256:9f38c7e3b4de7fbcfeae5fe1dc88aa3f0ae38667f1dc1da025519d40b3b9daa9
|
|
944
980
|
type: core
|
|
@@ -1011,6 +1047,10 @@ files:
|
|
|
1011
1047
|
hash: sha256:cfbf41b69336548b2fc4179a5513243491ca6eb501de3426f98254f118b074e7
|
|
1012
1048
|
type: core
|
|
1013
1049
|
size: 27167
|
|
1050
|
+
- path: core/orchestration/route-command.js
|
|
1051
|
+
hash: sha256:b7a5aa520936eb819d7b577fd7b15bcee8c7f8e9e147c6fa3db9fd12a493b7f3
|
|
1052
|
+
type: core
|
|
1053
|
+
size: 4766
|
|
1014
1054
|
- path: core/orchestration/session-state.js
|
|
1015
1055
|
hash: sha256:e4591fc968e8c2be07cc4572128415f3459eec75d831ba139d69faf9c7d9cacc
|
|
1016
1056
|
type: core
|
|
@@ -1344,9 +1384,9 @@ files:
|
|
|
1344
1384
|
type: data
|
|
1345
1385
|
size: 9602
|
|
1346
1386
|
- path: data/entity-registry.yaml
|
|
1347
|
-
hash: sha256:
|
|
1387
|
+
hash: sha256:9f8ab1fd062c3d4ec2f17f1ce664fbceb5a40f356e4be340b1def175595249de
|
|
1348
1388
|
type: data
|
|
1349
|
-
size:
|
|
1389
|
+
size: 550671
|
|
1350
1390
|
- path: data/learned-patterns.yaml
|
|
1351
1391
|
hash: sha256:1a4cd045c087b9dfd7046ff1464a9d2edb85fba77cf0b6fba14f4bb9004c741e
|
|
1352
1392
|
type: data
|
|
@@ -1480,9 +1520,9 @@ files:
|
|
|
1480
1520
|
type: agent
|
|
1481
1521
|
size: 23745
|
|
1482
1522
|
- path: development/agents/snps-orqx.md
|
|
1483
|
-
hash: sha256:
|
|
1523
|
+
hash: sha256:18a195a4484b1b4b76d6a2fe71669b428e87336293a4c5764bc702249083e101
|
|
1484
1524
|
type: agent
|
|
1485
|
-
size:
|
|
1525
|
+
size: 43849
|
|
1486
1526
|
- path: development/agents/sprint-lead.md
|
|
1487
1527
|
hash: sha256:572289b770cdbb0cff9ae2de4b2d19c38ce814fe978df397aa2794297f562c91
|
|
1488
1528
|
type: agent
|
|
@@ -1980,13 +2020,13 @@ files:
|
|
|
1980
2020
|
type: task
|
|
1981
2021
|
size: 12499
|
|
1982
2022
|
- path: development/tasks/create-doc.md
|
|
1983
|
-
hash: sha256:
|
|
2023
|
+
hash: sha256:c59435108b2a016040bafbcf6bbcf1a9ce3502446871ef5a3af908f38602cbfa
|
|
1984
2024
|
type: task
|
|
1985
|
-
size:
|
|
2025
|
+
size: 10669
|
|
1986
2026
|
- path: development/tasks/create-next-story.md
|
|
1987
|
-
hash: sha256:
|
|
2027
|
+
hash: sha256:5e3d0b592821b1136db7dcfa911ee5080055d76b2f390fe0497e8702b06f330d
|
|
1988
2028
|
type: task
|
|
1989
|
-
size:
|
|
2029
|
+
size: 30945
|
|
1990
2030
|
- path: development/tasks/create-service.md
|
|
1991
2031
|
hash: sha256:5ad5920b06934637f8057e53d5acdbb918c71cd7990bfea41177f74b09f82889
|
|
1992
2032
|
type: task
|
|
@@ -2564,9 +2604,9 @@ files:
|
|
|
2564
2604
|
type: task
|
|
2565
2605
|
size: 13643
|
|
2566
2606
|
- path: development/tasks/spec-gather-requirements.md
|
|
2567
|
-
hash: sha256:
|
|
2607
|
+
hash: sha256:7ed12b65fca5657d218fbfaa40c0a05af5d3e14a17a332c089dd1147d7cb1ca9
|
|
2568
2608
|
type: task
|
|
2569
|
-
size:
|
|
2609
|
+
size: 15182
|
|
2570
2610
|
- path: development/tasks/spec-research-dependencies.md
|
|
2571
2611
|
hash: sha256:28e087134ce19d2c9f3c422604f3414d25bda5f718e0daca7da8c4620f2f62e7
|
|
2572
2612
|
type: task
|
|
@@ -2707,6 +2747,10 @@ files:
|
|
|
2707
2747
|
hash: sha256:9887e0f126e9041f70b8809efd0a659a582d08bd2a5fdd14a0e858b84529d76e
|
|
2708
2748
|
type: template
|
|
2709
2749
|
size: 1106
|
|
2750
|
+
- path: development/templates/approval-table.md
|
|
2751
|
+
hash: sha256:847bca537a5790ba9e636703cf1e36cb6b3cd9d0b8640cee9689eb1ab136a3b0
|
|
2752
|
+
type: template
|
|
2753
|
+
size: 5172
|
|
2710
2754
|
- path: development/templates/chrome-brain/knowledge-base/chrome-brain.md
|
|
2711
2755
|
hash: sha256:4b73f2a5c680aa9260e7c66a0a222a6927a0032784ca803eb309816774a5de84
|
|
2712
2756
|
type: template
|
|
@@ -2996,9 +3040,9 @@ files:
|
|
|
2996
3040
|
type: workflow
|
|
2997
3041
|
size: 2606
|
|
2998
3042
|
- path: development/workflows/spec-pipeline.yaml
|
|
2999
|
-
hash: sha256:
|
|
3043
|
+
hash: sha256:fc739f0f5ec927ed9daecbd0fc74b68017ed548ce445c40b9b1ecd5f1ff2ff4b
|
|
3000
3044
|
type: workflow
|
|
3001
|
-
size:
|
|
3045
|
+
size: 28497
|
|
3002
3046
|
- path: development/workflows/story-development-cycle.yaml
|
|
3003
3047
|
hash: sha256:137fc6d2a7aedb50bbebfa045e877c382399604708ce03477f358f282b76727f
|
|
3004
3048
|
type: workflow
|
|
@@ -4160,9 +4204,9 @@ files:
|
|
|
4160
4204
|
type: template
|
|
4161
4205
|
size: 3243
|
|
4162
4206
|
- path: product/templates/prd-tmpl.yaml
|
|
4163
|
-
hash: sha256:
|
|
4207
|
+
hash: sha256:ae365825677131fc9f5c6762c6a4a036be0737442bcbdb04cdbd4e3e3f547265
|
|
4164
4208
|
type: template
|
|
4165
|
-
size:
|
|
4209
|
+
size: 12512
|
|
4166
4210
|
- path: product/templates/prd-v2.0.hbs
|
|
4167
4211
|
hash: sha256:efcdadfcd994d02cb04f61de67e4b42156e49b64e9374ad57037e60104297134
|
|
4168
4212
|
type: template
|
|
@@ -126,7 +126,9 @@ sections:
|
|
|
126
126
|
title: Epic List
|
|
127
127
|
instruction: |
|
|
128
128
|
Present a high-level list of all epics for user approval. Each epic should have a title and a short (1 sentence) goal statement. This allows the user to review the overall structure before diving into details.
|
|
129
|
-
|
|
129
|
+
|
|
130
|
+
PRESENTATION: Render the epic list as a scannable approval table per `.sinapse-ai/development/templates/approval-table.md` (Epic list schema: `| # | Epic | Goal (1 line) | Stories |`) BEFORE the 1-9 elicitation menu. Do not present epics as a count or plain prose.
|
|
131
|
+
|
|
130
132
|
CRITICAL: Epics MUST be logically sequential following agile best practices:
|
|
131
133
|
|
|
132
134
|
- Each epic should deliver a significant, end-to-end, fully deployable increment of testable functionality
|
|
@@ -147,7 +149,9 @@ sections:
|
|
|
147
149
|
repeatable: true
|
|
148
150
|
instruction: |
|
|
149
151
|
After the epic list is approved, present each epic with all its stories and acceptance criteria as a complete review unit.
|
|
150
|
-
|
|
152
|
+
|
|
153
|
+
PRESENTATION: For each epic, render its stories as a scannable approval table per `.sinapse-ai/development/templates/approval-table.md` (Epic detail schema: `| Story | As a … / I want … | ACs | Depends on |`) BEFORE the 1-9 elicitation menu, then the expanded goal and per-story detail.
|
|
154
|
+
|
|
151
155
|
For each epic provide expanded goal (2-3 sentences describing the objective and value all the stories will achieve).
|
|
152
156
|
|
|
153
157
|
CRITICAL STORY SEQUENCING REQUIREMENTS:
|
package/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,24 @@
|
|
|
1
|
-
## [1.
|
|
1
|
+
## [1.17.0](https://github.com/caioimori/sinapse-ai/compare/1.16.0...1.17.0) (2026-06-27)
|
|
2
2
|
|
|
3
3
|
### Features
|
|
4
4
|
|
|
5
|
-
*
|
|
5
|
+
* **atlas:** complete framework flows — 6 → 12 meta-workflows ([#287](https://github.com/caioimori/sinapse-ai/issues/287)) ([1cfcb21](https://github.com/caioimori/sinapse-ai/commit/1cfcb21343336b287606d2c3c6026dcf5d2ba460))
|
|
6
|
+
* **atlas:** Framework Operating Atlas — self-documenting map (LLM + visual) ([#283](https://github.com/caioimori/sinapse-ai/issues/283)) ([d3e3975](https://github.com/caioimori/sinapse-ai/commit/d3e3975f4a814eb6b658eca310cdb50eb43e722b))
|
|
7
|
+
* **atlas:** framework operating flows — visual meta-workflows of how it works ([#284](https://github.com/caioimori/sinapse-ai/issues/284)) ([2dfef2f](https://github.com/caioimori/sinapse-ai/commit/2dfef2fe4e490dfdb6c59487baa519a94d8e72ae))
|
|
8
|
+
* **atlas:** PT-BR research card — SINAPSE as a case-study card + LOOPS ([#288](https://github.com/caioimori/sinapse-ai/issues/288)) ([834e4f7](https://github.com/caioimori/sinapse-ai/commit/834e4f71cf2782d17f7712e50d104f5449994f72))
|
|
9
|
+
* **doc-first:** routing engine + enforcement gate (Camadas 1+2) ([#282](https://github.com/caioimori/sinapse-ai/issues/282)) ([0f69937](https://github.com/caioimori/sinapse-ai/commit/0f69937933849b3262195f3ca478a61bbd0767cc))
|
|
10
|
+
* **doc-first:** scannable approval tables for PRD/epic/story/spec ([#281](https://github.com/caioimori/sinapse-ai/issues/281)) ([87bba5b](https://github.com/caioimori/sinapse-ai/commit/87bba5b1cf06763a01796d8b157b82fc7e2fb536))
|
|
11
|
+
* **orchestration:** sinapse build — reconnect BobOrchestrator engine to CLI ([#286](https://github.com/caioimori/sinapse-ai/issues/286)) ([c36fa09](https://github.com/caioimori/sinapse-ai/commit/c36fa095ba6a440df3d461413b305fc0e844f021))
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **atlas:** remove personal-vault leak from public framework + harden guard ([#290](https://github.com/caioimori/sinapse-ai/issues/290)) ([647d16b](https://github.com/caioimori/sinapse-ai/commit/647d16bcd8df0490553412f51a3aa724677adf01))
|
|
16
|
+
* **atlas:** research-card LOOPS headings use the site parser format (MF1 — …) ([#289](https://github.com/caioimori/sinapse-ai/issues/289)) ([8363fcb](https://github.com/caioimori/sinapse-ai/commit/8363fcb0a5523270e2914c51b3e9e906f97142cd))
|
|
17
|
+
* **security:** deep sweep — remove residual personal/client leaks + harden guard ([#291](https://github.com/caioimori/sinapse-ai/issues/291)) ([7e82be9](https://github.com/caioimori/sinapse-ai/commit/7e82be9496b616f24b42c3af8e5f433eb729a1a8))
|
|
18
|
+
|
|
19
|
+
### Documentation
|
|
20
|
+
|
|
21
|
+
* **orqx:** align Imperator bootstrap prose to doc-first resolver engine ([#285](https://github.com/caioimori/sinapse-ai/issues/285)) ([9f98162](https://github.com/caioimori/sinapse-ai/commit/9f98162b238abf7e4e65c4c6ea91d9bd453aaa1d))
|
|
6
22
|
|
|
7
23
|
# Changelog
|
|
8
24
|
|