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.
Files changed (35) hide show
  1. package/.claude/hooks/doc-first-gate.cjs +156 -0
  2. package/.claude/hooks/enforce-story-gate.cjs +6 -2
  3. package/.claude/rules/hook-governance.md +1 -0
  4. package/.sinapse-ai/constitution.md +1 -1
  5. package/.sinapse-ai/core/atlas/atlas-data.js +278 -0
  6. package/.sinapse-ai/core/atlas/flows-pt.js +253 -0
  7. package/.sinapse-ai/core/atlas/flows.js +266 -0
  8. package/.sinapse-ai/core/atlas/index.js +62 -0
  9. package/.sinapse-ai/core/atlas/render-html.js +216 -0
  10. package/.sinapse-ai/core/atlas/render-markdown.js +313 -0
  11. package/.sinapse-ai/core/atlas/render-research-card.js +164 -0
  12. package/.sinapse-ai/core/orchestration/build-command.js +136 -0
  13. package/.sinapse-ai/core/orchestration/doc-first-resolver.js +322 -0
  14. package/.sinapse-ai/core/orchestration/route-command.js +97 -0
  15. package/.sinapse-ai/data/entity-registry.yaml +59 -14
  16. package/.sinapse-ai/development/agents/snps-orqx.md +9 -0
  17. package/.sinapse-ai/development/tasks/create-doc.md +1 -1
  18. package/.sinapse-ai/development/tasks/create-next-story.md +2 -3
  19. package/.sinapse-ai/development/tasks/spec-gather-requirements.md +11 -0
  20. package/.sinapse-ai/development/templates/approval-table.md +106 -0
  21. package/.sinapse-ai/development/workflows/spec-pipeline.yaml +1 -0
  22. package/.sinapse-ai/install-manifest.yaml +60 -16
  23. package/.sinapse-ai/product/templates/prd-tmpl.yaml +6 -2
  24. package/CHANGELOG.md +18 -2
  25. package/bin/sinapse.js +121 -0
  26. package/docs/framework/atlas/OPERATING-ATLAS.md +537 -0
  27. package/docs/framework/atlas/README.md +34 -0
  28. package/docs/framework/atlas/atlas-data.json +2810 -0
  29. package/docs/framework/atlas/atlas.html +392 -0
  30. package/package.json +1 -1
  31. package/packages/installer/src/wizard/ide-config-generator.js +6 -0
  32. package/scripts/install-chrome-brain.sh +2 -2
  33. package/scripts/validate-no-personal-leaks.js +24 -9
  34. package/squads/squad-copy/knowledge-base/consequence-headline-patterns.md +2 -2
  35. 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-24T15:49:40.486Z'
4
- entityCount: 794
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:01cae0d9971b1acaec7e62025570cc5a629fe60e91d226fde6818bf359913c78
664
- lastVerified: '2026-06-21T05:24:05.627Z'
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:86d38d0a9872d7e1e57edb2aa2be1e8a74a9e5ff78b9047ab15bc463fcf1cad6
1931
- lastVerified: '2026-06-15T00:26:26.247Z'
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:8a42add94bb0e1233d6f47203786ff57ec53bac148be37ec6ac3ca2cb3e5e2b8
1970
- lastVerified: '2026-06-15T00:26:26.248Z'
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:1a1b02926d2fc13d85caf9da0cbc84122cd4ec1e7ec8ec292b4d1cac190c70d3
5755
- lastVerified: '2026-06-15T00:26:26.299Z'
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:cc68f141e09386096f6add62717f63f0b56bb53f315eafcafc4bb649f151d25f
7344
- lastVerified: '2026-06-15T00:26:26.324Z'
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:d0da3844cdf7e71c59a13b22e6c715b23a0ae55337aaa6dfc7248de99bdc6ff4
15142
- lastVerified: '2026-06-24T15:32:36.251Z'
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 including:
777
- - Story created: `{devStoryLocation}/{epicNum}.{storyNum}.story.md`
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.16.0
10
+ version: 1.17.0
11
11
  generator: scripts/generate-install-manifest.js
12
- file_count: 1152
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:5afcfac2ecfcbda210a85f77a18829c23a0dd80a0be5fc42c5081d419a3ac73b
1387
+ hash: sha256:9f8ab1fd062c3d4ec2f17f1ce664fbceb5a40f356e4be340b1def175595249de
1348
1388
  type: data
1349
- size: 549348
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:313fd53fcb43bec1a0e0e1dc90867c6a6b3643e08a9a41e32e2fa86e090ce8ae
1523
+ hash: sha256:18a195a4484b1b4b76d6a2fe71669b428e87336293a4c5764bc702249083e101
1484
1524
  type: agent
1485
- size: 42694
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:86d38d0a9872d7e1e57edb2aa2be1e8a74a9e5ff78b9047ab15bc463fcf1cad6
2023
+ hash: sha256:c59435108b2a016040bafbcf6bbcf1a9ce3502446871ef5a3af908f38602cbfa
1984
2024
  type: task
1985
- size: 10344
2025
+ size: 10669
1986
2026
  - path: development/tasks/create-next-story.md
1987
- hash: sha256:8a42add94bb0e1233d6f47203786ff57ec53bac148be37ec6ac3ca2cb3e5e2b8
2027
+ hash: sha256:5e3d0b592821b1136db7dcfa911ee5080055d76b2f390fe0497e8702b06f330d
1988
2028
  type: task
1989
- size: 30701
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:1a1b02926d2fc13d85caf9da0cbc84122cd4ec1e7ec8ec292b4d1cac190c70d3
2607
+ hash: sha256:7ed12b65fca5657d218fbfaa40c0a05af5d3e14a17a332c089dd1147d7cb1ca9
2568
2608
  type: task
2569
- size: 14542
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:d0da3844cdf7e71c59a13b22e6c715b23a0ae55337aaa6dfc7248de99bdc6ff4
3043
+ hash: sha256:fc739f0f5ec927ed9daecbd0fc74b68017ed548ce445c40b9b1ecd5f1ff2ff4b
3000
3044
  type: workflow
3001
- size: 28350
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:cc68f141e09386096f6add62717f63f0b56bb53f315eafcafc4bb649f151d25f
4207
+ hash: sha256:ae365825677131fc9f5c6762c6a4a036be0737442bcbdb04cdbd4e3e3f547265
4164
4208
  type: template
4165
- size: 11954
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.16.0](https://github.com/caioimori/sinapse-ai/compare/1.15.0...1.16.0) (2026-06-25)
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
- * add clarify and analyze gates to Spec Pipeline ([#280](https://github.com/caioimori/sinapse-ai/issues/280)) ([18b643f](https://github.com/caioimori/sinapse-ai/commit/18b643fe6d4038bb5a9967dccdd7b34bf3b9f6cc))
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