@pantion/dialogs 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dialogs/dialog-builder/convergence-rules.md +64 -0
- package/dialogs/dialog-builder/dialog.json +10 -0
- package/dialogs/dialog-builder/prompts/convergence-intro.md +21 -0
- package/dialogs/dialog-builder/prompts/translate-intro.md +17 -0
- package/dialogs/dialog-builder/translate.md +46 -0
- package/dialogs/image/convergence-rules.md +55 -0
- package/dialogs/image/dialog.json +12 -0
- package/dialogs/image/prompts/convergence-intro.md +25 -0
- package/dialogs/image/prompts/translate-intro.md +37 -0
- package/dialogs/image/translate.md +67 -0
- package/dialogs/software/convergence-rules.md +29 -0
- package/dialogs/software/dialog.json +12 -0
- package/dialogs/software/prompts/convergence-intro.md +22 -0
- package/dialogs/software/prompts/translate-intro.md +19 -0
- package/dialogs/software/translate.md +74 -0
- package/dialogs/software-brownfield/convergence-rules.md +109 -0
- package/dialogs/software-brownfield/dialog.json +12 -0
- package/dialogs/software-brownfield/prompts/convergence-intro.md +26 -0
- package/dialogs/software-brownfield/prompts/translate-intro.md +13 -0
- package/dialogs/software-brownfield/translate.md +56 -0
- package/dialogs/video/convergence-rules.md +96 -0
- package/dialogs/video/dialog.json +12 -0
- package/dialogs/video/prompts/convergence-intro.md +28 -0
- package/dialogs/video/prompts/translate-intro.md +41 -0
- package/dialogs/video/translate.md +81 -0
- package/dist/core/canon/index-manager.d.ts +27 -0
- package/dist/core/canon/index-manager.d.ts.map +1 -0
- package/dist/core/canon/index-manager.js +127 -0
- package/dist/core/canon/index-manager.js.map +1 -0
- package/dist/core/canon/manifest.d.ts +21 -0
- package/dist/core/canon/manifest.d.ts.map +1 -0
- package/dist/core/canon/manifest.js +56 -0
- package/dist/core/canon/manifest.js.map +1 -0
- package/dist/core/canon/validator.d.ts +12 -0
- package/dist/core/canon/validator.d.ts.map +1 -0
- package/dist/core/canon/validator.js +320 -0
- package/dist/core/canon/validator.js.map +1 -0
- package/dist/core/dialog/canon-writer.d.ts +22 -0
- package/dist/core/dialog/canon-writer.d.ts.map +1 -0
- package/dist/core/dialog/canon-writer.js +96 -0
- package/dist/core/dialog/canon-writer.js.map +1 -0
- package/dist/core/dialog/registry.d.ts +10 -0
- package/dist/core/dialog/registry.d.ts.map +1 -0
- package/dist/core/dialog/registry.js +102 -0
- package/dist/core/dialog/registry.js.map +1 -0
- package/dist/core/dialog/selector.d.ts +11 -0
- package/dist/core/dialog/selector.d.ts.map +1 -0
- package/dist/core/dialog/selector.js +32 -0
- package/dist/core/dialog/selector.js.map +1 -0
- package/dist/core/index.d.ts +20 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +30 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/protocol/convergence.d.ts +11 -0
- package/dist/core/protocol/convergence.d.ts.map +1 -0
- package/dist/core/protocol/convergence.js +30 -0
- package/dist/core/protocol/convergence.js.map +1 -0
- package/dist/core/protocol/loader.d.ts +6 -0
- package/dist/core/protocol/loader.d.ts.map +1 -0
- package/dist/core/protocol/loader.js +31 -0
- package/dist/core/protocol/loader.js.map +1 -0
- package/dist/core/protocol/stamp-parser.d.ts +46 -0
- package/dist/core/protocol/stamp-parser.d.ts.map +1 -0
- package/dist/core/protocol/stamp-parser.js +333 -0
- package/dist/core/protocol/stamp-parser.js.map +1 -0
- package/dist/core/protocol/system-prompt.d.ts +16 -0
- package/dist/core/protocol/system-prompt.d.ts.map +1 -0
- package/dist/core/protocol/system-prompt.js +68 -0
- package/dist/core/protocol/system-prompt.js.map +1 -0
- package/dist/core/session/canon-writer.d.ts +33 -0
- package/dist/core/session/canon-writer.d.ts.map +1 -0
- package/dist/core/session/canon-writer.js +152 -0
- package/dist/core/session/canon-writer.js.map +1 -0
- package/dist/core/session/manager.d.ts +10 -0
- package/dist/core/session/manager.d.ts.map +1 -0
- package/dist/core/session/manager.js +105 -0
- package/dist/core/session/manager.js.map +1 -0
- package/dist/core/skill/canon-writer.d.ts +22 -0
- package/dist/core/skill/canon-writer.d.ts.map +1 -0
- package/dist/core/skill/canon-writer.js +96 -0
- package/dist/core/skill/canon-writer.js.map +1 -0
- package/dist/core/skill/registry.d.ts +10 -0
- package/dist/core/skill/registry.d.ts.map +1 -0
- package/dist/core/skill/registry.js +102 -0
- package/dist/core/skill/registry.js.map +1 -0
- package/dist/core/skill/selector.d.ts +11 -0
- package/dist/core/skill/selector.d.ts.map +1 -0
- package/dist/core/skill/selector.js +32 -0
- package/dist/core/skill/selector.js.map +1 -0
- package/dist/core/soul/registry.d.ts +10 -0
- package/dist/core/soul/registry.d.ts.map +1 -0
- package/dist/core/soul/registry.js +73 -0
- package/dist/core/soul/registry.js.map +1 -0
- package/dist/core/types.d.ts +154 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +6 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/utils/fs.d.ts +14 -0
- package/dist/core/utils/fs.d.ts.map +1 -0
- package/dist/core/utils/fs.js +44 -0
- package/dist/core/utils/fs.js.map +1 -0
- package/dist/core/utils/project-detect.d.ts +3 -0
- package/dist/core/utils/project-detect.d.ts.map +1 -0
- package/dist/core/utils/project-detect.js +38 -0
- package/dist/core/utils/project-detect.js.map +1 -0
- package/dist/feature-set.d.ts +14 -0
- package/dist/feature-set.d.ts.map +1 -0
- package/dist/feature-set.js +38 -0
- package/dist/feature-set.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/convergence-prompts.d.ts +4 -0
- package/dist/prompts/convergence-prompts.d.ts.map +1 -0
- package/dist/prompts/convergence-prompts.js +76 -0
- package/dist/prompts/convergence-prompts.js.map +1 -0
- package/dist/prompts/index.d.ts +4 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +7 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/workflow-prompts.d.ts +9 -0
- package/dist/prompts/workflow-prompts.d.ts.map +1 -0
- package/dist/prompts/workflow-prompts.js +265 -0
- package/dist/prompts/workflow-prompts.js.map +1 -0
- package/dist/resources/canon-resources.d.ts +4 -0
- package/dist/resources/canon-resources.d.ts.map +1 -0
- package/dist/resources/canon-resources.js +164 -0
- package/dist/resources/canon-resources.js.map +1 -0
- package/dist/server.d.ts +9 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +47 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/amend.d.ts +4 -0
- package/dist/tools/amend.d.ts.map +1 -0
- package/dist/tools/amend.js +106 -0
- package/dist/tools/amend.js.map +1 -0
- package/dist/tools/approve.d.ts +4 -0
- package/dist/tools/approve.d.ts.map +1 -0
- package/dist/tools/approve.js +60 -0
- package/dist/tools/approve.js.map +1 -0
- package/dist/tools/check-convergence.d.ts +4 -0
- package/dist/tools/check-convergence.d.ts.map +1 -0
- package/dist/tools/check-convergence.js +50 -0
- package/dist/tools/check-convergence.js.map +1 -0
- package/dist/tools/check.d.ts +4 -0
- package/dist/tools/check.d.ts.map +1 -0
- package/dist/tools/check.js +190 -0
- package/dist/tools/check.js.map +1 -0
- package/dist/tools/create-dialog.d.ts +4 -0
- package/dist/tools/create-dialog.d.ts.map +1 -0
- package/dist/tools/create-dialog.js +58 -0
- package/dist/tools/create-dialog.js.map +1 -0
- package/dist/tools/create-skill.d.ts +4 -0
- package/dist/tools/create-skill.d.ts.map +1 -0
- package/dist/tools/create-skill.js +58 -0
- package/dist/tools/create-skill.js.map +1 -0
- package/dist/tools/decompose.d.ts +4 -0
- package/dist/tools/decompose.d.ts.map +1 -0
- package/dist/tools/decompose.js +56 -0
- package/dist/tools/decompose.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +49 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-canons.d.ts +4 -0
- package/dist/tools/list-canons.d.ts.map +1 -0
- package/dist/tools/list-canons.js +28 -0
- package/dist/tools/list-canons.js.map +1 -0
- package/dist/tools/migrate.d.ts +4 -0
- package/dist/tools/migrate.d.ts.map +1 -0
- package/dist/tools/migrate.js +38 -0
- package/dist/tools/migrate.js.map +1 -0
- package/dist/tools/onboard.d.ts +4 -0
- package/dist/tools/onboard.d.ts.map +1 -0
- package/dist/tools/onboard.js +27 -0
- package/dist/tools/onboard.js.map +1 -0
- package/dist/tools/reconverge.d.ts +4 -0
- package/dist/tools/reconverge.d.ts.map +1 -0
- package/dist/tools/reconverge.js +68 -0
- package/dist/tools/reconverge.js.map +1 -0
- package/dist/tools/redialog.d.ts +4 -0
- package/dist/tools/redialog.d.ts.map +1 -0
- package/dist/tools/redialog.js +63 -0
- package/dist/tools/redialog.js.map +1 -0
- package/dist/tools/reflect.d.ts +4 -0
- package/dist/tools/reflect.d.ts.map +1 -0
- package/dist/tools/reflect.js +86 -0
- package/dist/tools/reflect.js.map +1 -0
- package/dist/tools/reject.d.ts +4 -0
- package/dist/tools/reject.d.ts.map +1 -0
- package/dist/tools/reject.js +57 -0
- package/dist/tools/reject.js.map +1 -0
- package/dist/tools/reskill.d.ts +4 -0
- package/dist/tools/reskill.d.ts.map +1 -0
- package/dist/tools/reskill.js +63 -0
- package/dist/tools/reskill.js.map +1 -0
- package/dist/tools/resume.d.ts +4 -0
- package/dist/tools/resume.d.ts.map +1 -0
- package/dist/tools/resume.js +56 -0
- package/dist/tools/resume.js.map +1 -0
- package/dist/tools/reverse.d.ts +4 -0
- package/dist/tools/reverse.d.ts.map +1 -0
- package/dist/tools/reverse.js +32 -0
- package/dist/tools/reverse.js.map +1 -0
- package/dist/tools/save-canon.d.ts +4 -0
- package/dist/tools/save-canon.d.ts.map +1 -0
- package/dist/tools/save-canon.js +97 -0
- package/dist/tools/save-canon.js.map +1 -0
- package/dist/tools/start.d.ts +4 -0
- package/dist/tools/start.d.ts.map +1 -0
- package/dist/tools/start.js +83 -0
- package/dist/tools/start.js.map +1 -0
- package/dist/tools/translate.d.ts +4 -0
- package/dist/tools/translate.d.ts.map +1 -0
- package/dist/tools/translate.js +102 -0
- package/dist/tools/translate.js.map +1 -0
- package/dist/tools/update.d.ts +4 -0
- package/dist/tools/update.d.ts.map +1 -0
- package/dist/tools/update.js +42 -0
- package/dist/tools/update.js.map +1 -0
- package/dist/tools/validate.d.ts +4 -0
- package/dist/tools/validate.d.ts.map +1 -0
- package/dist/tools/validate.js +86 -0
- package/dist/tools/validate.js.map +1 -0
- package/dist/utils/response.d.ts +12 -0
- package/dist/utils/response.d.ts.map +1 -0
- package/dist/utils/response.js +18 -0
- package/dist/utils/response.js.map +1 -0
- package/package.json +37 -0
- package/protocol/commands/amend.md +188 -0
- package/protocol/commands/build.md +90 -0
- package/protocol/commands/check.md +255 -0
- package/protocol/commands/create-dialog.md +81 -0
- package/protocol/commands/decompose.md +230 -0
- package/protocol/commands/dialog.md +173 -0
- package/protocol/commands/help.md +121 -0
- package/protocol/commands/migrate.md +173 -0
- package/protocol/commands/onboard.md +210 -0
- package/protocol/commands/quick.md +170 -0
- package/protocol/commands/redialog.md +73 -0
- package/protocol/commands/reflect.md +136 -0
- package/protocol/commands/resume.md +148 -0
- package/protocol/commands/reverse.md +312 -0
- package/protocol/commands/start.md +220 -0
- package/protocol/commands/translate.md +157 -0
- package/protocol/commands/update.md +205 -0
- package/protocol/core-advanced.md +188 -0
- package/protocol/core.md +274 -0
- package/protocol/pantion-future-prompt.md +88 -0
- package/protocol/pantion-intent.md +78 -0
- package/protocol/templates/acceptance-tests.md +116 -0
- package/protocol/templates/behavior-map.md +135 -0
- package/protocol/templates/traceability-map.md +56 -0
- package/souls/beginner/rules.md +34 -0
- package/souls/beginner/soul.json +6 -0
- package/souls/default/rules.md +25 -0
- package/souls/default/soul.json +6 -0
- package/souls/young/rules.md +67 -0
- package/souls/young/soul.json +6 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Pantion Future Prompt — Instructions for Future Model Rebuilds
|
|
2
|
+
|
|
3
|
+
> You are about to rebuild or update the Pantion Protocol.
|
|
4
|
+
> Read this document BEFORE making any changes.
|
|
5
|
+
> This document tells you what works, what to preserve, and what to avoid.
|
|
6
|
+
|
|
7
|
+
## Who You Are
|
|
8
|
+
|
|
9
|
+
You are a future model — possibly more capable than the one that wrote this protocol. You have access to the Pantion intent document (`pantion-intent.md`) and the current protocol files. Your job is to improve the protocol while preserving its core promise.
|
|
10
|
+
|
|
11
|
+
## What Works Well (KEEP)
|
|
12
|
+
|
|
13
|
+
### 1. The dialog-as-canon principle
|
|
14
|
+
The verbatim dialog being the source of truth is the foundation. Summaries and specs are derived. This works because it preserves nuance and enables reconvergence. **Do not weaken this.**
|
|
15
|
+
|
|
16
|
+
### 2. The convergence model
|
|
17
|
+
Questions converge to stability. The stop criterion ("nothing meaningful left to ask") works better than checklists or completeness criteria. The 12-category checklist supports, not replaces, human judgment. **Do not over-formalize convergence.**
|
|
18
|
+
|
|
19
|
+
### 3. Natural language throughout
|
|
20
|
+
No DSL, no schema, no formal notation as primary representation. Natural language is accessible, flexible, and future-proof. Structure emerges from the dialog. **Do not introduce a specification language.**
|
|
21
|
+
|
|
22
|
+
### 4. Append-only canons
|
|
23
|
+
Canons are never edited, only appended to (via resume, amend, reconverge). This preserves history and enables traceability. **Do not add edit capabilities.**
|
|
24
|
+
|
|
25
|
+
### 5. The MCP architecture
|
|
26
|
+
The server has no LLM. The client brings their own. Tools are thin wrappers around protocol commands. Resources serve canon content directly. This keeps the server simple, testable, and universal. **Do not add LLM calls to the server.**
|
|
27
|
+
|
|
28
|
+
### 6. Skills and Souls separation
|
|
29
|
+
Skills determine WHAT to converge on (domain knowledge). Souls determine HOW to communicate (interaction style). They compose independently. **Do not merge them.**
|
|
30
|
+
|
|
31
|
+
### 7. The reverse direction
|
|
32
|
+
Code → Canon works and is powerful. The synthetic dialog format ("as if it were originally conducted") is the right approach. **Do not change the output format to something non-dialog.**
|
|
33
|
+
|
|
34
|
+
### 8. Decomposition model
|
|
35
|
+
Architect → Interface → Component canons with inheritance (constraints additive, authority budget ceiling, consumption allocatable). **Do not flatten the hierarchy.**
|
|
36
|
+
|
|
37
|
+
## What Can Be Improved (IMPROVE)
|
|
38
|
+
|
|
39
|
+
### 1. Convergence element coverage
|
|
40
|
+
The 12-category checklist could be more contextually intelligent. Different domains need different emphasis. Skills should be able to influence which categories are critical.
|
|
41
|
+
|
|
42
|
+
### 2. Interface canon depth
|
|
43
|
+
The five additional contract fields (data shape, versioning, error semantics, privacy, rate/cost) are thorough but could be more opinionated about what "good enough" looks like.
|
|
44
|
+
|
|
45
|
+
### 3. Reconvergence gap analysis
|
|
46
|
+
The six gap analysis dimensions are good but the detection heuristics could be sharper. Better models should produce more targeted gap analyses.
|
|
47
|
+
|
|
48
|
+
### 4. Dialog creation via dialog
|
|
49
|
+
Dynamic dialogs (created through Pantion dialogs) are a powerful concept. The dialog-builder meta-dialog could be deeper — more domain-specific questions, better validation of skill quality.
|
|
50
|
+
|
|
51
|
+
### 5. Onboarding experience
|
|
52
|
+
The three strategies (forward, full reverse, partial) are clear. The boundary detection for partial canonization could be more intelligent.
|
|
53
|
+
|
|
54
|
+
## What You Must NOT Do
|
|
55
|
+
|
|
56
|
+
1. **Do not introduce a formal specification language.** No YAML specs, no JSON schemas, no DSLs as primary representation. Natural language is the point.
|
|
57
|
+
|
|
58
|
+
2. **Do not add LLM calls to the server.** The server is deterministic and testable. The client brings the LLM.
|
|
59
|
+
|
|
60
|
+
3. **Do not make canons editable.** Append-only is a feature, not a limitation.
|
|
61
|
+
|
|
62
|
+
4. **Do not remove the dialog as source of truth.** The summary is for navigation. The dialog is the canon.
|
|
63
|
+
|
|
64
|
+
5. **Do not add features nobody asked for.** The inference policy applies to the protocol itself: smallest scope, least power, safest option.
|
|
65
|
+
|
|
66
|
+
6. **Do not break tool-agnosticism.** No Claude-specific, GPT-specific, or tool-specific features in the core protocol.
|
|
67
|
+
|
|
68
|
+
7. **Do not make the protocol complex.** If it needs a 50-page manual, something is wrong. A human should be able to understand the core flow in 5 minutes.
|
|
69
|
+
|
|
70
|
+
8. **Do not add execution capabilities.** Pantion describes intent. It never runs, compiles, deploys, or executes anything.
|
|
71
|
+
|
|
72
|
+
## The Rebuild Process
|
|
73
|
+
|
|
74
|
+
1. Read `pantion-intent.md` — understand the core principles
|
|
75
|
+
2. Read this document — understand what to preserve and avoid
|
|
76
|
+
3. Inventory the current protocol files — understand what exists
|
|
77
|
+
4. Perform delta analysis — what to keep, improve, add, remove
|
|
78
|
+
5. Get human approval before changing anything
|
|
79
|
+
6. Regenerate protocol files in order: core knowledge → commands → dialogs → infrastructure
|
|
80
|
+
7. Self-check against the core principles
|
|
81
|
+
8. Produce a changelog
|
|
82
|
+
9. Save a snapshot for rollback
|
|
83
|
+
|
|
84
|
+
## The Self-Referential Test
|
|
85
|
+
|
|
86
|
+
The protocol that says "code is replaceable, intent is rebuildable" must apply that principle to itself. If the intent documents (`pantion-intent.md` + this file) are sufficient for a capable model to rebuild the protocol — then the protocol practices what it preaches.
|
|
87
|
+
|
|
88
|
+
Can you, reading only the intent documents and examining the current codebase, produce a better version of the protocol? If yes: the system works. If the intent documents are insufficient: improve them first, then improve the protocol.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Pantion Intent — Core Principles
|
|
2
|
+
|
|
3
|
+
> This document describes WHAT Pantion is and WHY it exists.
|
|
4
|
+
> It is the canon of Pantion itself — the source of truth for any protocol update.
|
|
5
|
+
> All protocol files, commands, dialogs, and tools are derived from this intent.
|
|
6
|
+
|
|
7
|
+
## Core Promise
|
|
8
|
+
|
|
9
|
+
**Code is replaceable. Intent is rebuildable.**
|
|
10
|
+
|
|
11
|
+
A well-converged intent description (canon) enables any competent agent to produce a functionally equivalent implementation — regardless of the technology, model, or era. The canon captures the **what** and the **why**, never the **how**.
|
|
12
|
+
|
|
13
|
+
## Core Principles
|
|
14
|
+
|
|
15
|
+
### Dialog as Canon
|
|
16
|
+
|
|
17
|
+
The verbatim dialog between human and assistant is the only source of truth. Everything else — summaries, project files, translated specs — is derived. Derived files may be regenerated; the dialog may not be edited.
|
|
18
|
+
|
|
19
|
+
**Why:** The dialog preserves nuance, rejected options, hesitations, and the order of discovery. A summary loses these. A better model can re-read the dialog and extract deeper understanding.
|
|
20
|
+
|
|
21
|
+
### Natural Language Only
|
|
22
|
+
|
|
23
|
+
Pantion stays in natural language. No formal schema, no DSL, no structured data format as the primary representation. Structure is emergent from the dialog, not imposed on it.
|
|
24
|
+
|
|
25
|
+
**Why:** Natural language is the most accessible, flexible, and future-proof representation. Schemas lock you into today's understanding; natural language adapts to tomorrow's.
|
|
26
|
+
|
|
27
|
+
### Convergence, Not Specification
|
|
28
|
+
|
|
29
|
+
A dialog converges when further questions yield no new behavior. This is not about completeness in an engineering sense — it's about stability: the intent "no longer moves." The stop criterion is: the assistant has nothing meaningful left to ask.
|
|
30
|
+
|
|
31
|
+
**Why:** Traditional specifications are written once and then maintained. Convergence dialogs discover intent through interaction. The process IS the product.
|
|
32
|
+
|
|
33
|
+
### Future-Proof Through Depth
|
|
34
|
+
|
|
35
|
+
The dialog is future-proof not because it's perfect, but because it's deep. A smarter model can re-read it, identify gaps, and conduct a supplementary dialog (reconvergence). Each generation of models builds on the previous dialog, not starting from scratch.
|
|
36
|
+
|
|
37
|
+
**Why:** Today's model will miss things. Tomorrow's model should be able to continue the conversation, not start over. Append-only preserves the human's voice and context.
|
|
38
|
+
|
|
39
|
+
### Tool-Agnostic, Model-Agnostic
|
|
40
|
+
|
|
41
|
+
Pantion works with any LLM and any coding agent. The protocol is independent of Claude, GPT, or any specific tool. The MCP server has no LLM — the client brings their own. Any MCP-compatible client can connect.
|
|
42
|
+
|
|
43
|
+
**Why:** Lock-in to a specific model or tool contradicts the promise of rebuildability. The canon must be usable by any competent system, now and in the future.
|
|
44
|
+
|
|
45
|
+
## The Two Directions
|
|
46
|
+
|
|
47
|
+
### Forward: Intent → Canon → Implementation
|
|
48
|
+
|
|
49
|
+
The primary flow. A human has an idea. Through dialog, the intent converges into a canon. The canon is translated into project specification files. Any agent builds from the specs.
|
|
50
|
+
|
|
51
|
+
### Reverse: Implementation → Canon → (Better) Implementation
|
|
52
|
+
|
|
53
|
+
The secondary flow. An existing codebase is analyzed. The intent is reconstructed as a synthetic dialog. The result is a canon that reads as if it were originally conducted. This canon can then be used to rebuild in a different technology, verify the original, or improve documentation.
|
|
54
|
+
|
|
55
|
+
## Scale Levels
|
|
56
|
+
|
|
57
|
+
Pantion operates at three scales:
|
|
58
|
+
|
|
59
|
+
1. **Standalone**: A single canon for a single system. Most projects start here.
|
|
60
|
+
2. **Decomposed**: An architect canon + interface canons + component canons. For larger systems where a single dialog would lose context.
|
|
61
|
+
3. **Recursive**: A component canon is itself decomposed. For very large systems.
|
|
62
|
+
|
|
63
|
+
Inheritance flows downward: constraints are additive (stricter is allowed, looser is not), authority budget rights are a ceiling, consumption is allocatable.
|
|
64
|
+
|
|
65
|
+
## What Pantion is NOT
|
|
66
|
+
|
|
67
|
+
- NOT a code generator (it produces intent descriptions, not code)
|
|
68
|
+
- NOT a project manager (it has no tasks, sprints, or timelines)
|
|
69
|
+
- NOT a deployment tool (it never runs, compiles, or deploys)
|
|
70
|
+
- NOT an LLM wrapper (the server has no LLM — the client brings their own)
|
|
71
|
+
- NOT a formal specification language (it uses natural language, not schemas)
|
|
72
|
+
|
|
73
|
+
## The Ultimate Test
|
|
74
|
+
|
|
75
|
+
> Can a human, after one convergence session with any competent model, produce a canon from which any competent agent can build a functionally equivalent system — without further interaction?
|
|
76
|
+
|
|
77
|
+
If yes: Pantion works.
|
|
78
|
+
If no: the protocol needs improvement.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Acceptance Tests Template
|
|
2
|
+
|
|
3
|
+
> **Artifact Type:** Derived / Non-Canonical
|
|
4
|
+
> **Rule:** If this document conflicts with the Canonical Dialog, the Canon wins.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1) Source Canon Reference
|
|
9
|
+
|
|
10
|
+
- **Canon Name:** [name]
|
|
11
|
+
- **Canon Date:** [date]
|
|
12
|
+
- **Canon Location:** [path]
|
|
13
|
+
- **Convergence Stamp:**
|
|
14
|
+
- STATUS: [status]
|
|
15
|
+
- INFERENCE POLICY: [policy]
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 2) Test Conventions
|
|
20
|
+
|
|
21
|
+
- **Test ID format:** AT-### (e.g., AT-001)
|
|
22
|
+
- **Canon Anchors:** Every test MUST cite Canon Anchors (e.g., H2, A3).
|
|
23
|
+
- **No invented behavior:** If a test requires guessing, add an OPEN QUESTION to the Canon instead.
|
|
24
|
+
- **HARD/FLEX label:** Mark each test as testing a HARD constraint or FLEX default.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 3) Positive Flow Tests
|
|
29
|
+
|
|
30
|
+
### AT-001 — [Test name]
|
|
31
|
+
- **Canon Anchors:** [e.g., H1, A2]
|
|
32
|
+
- **HARD/FLEX:** [HARD / FLEX]
|
|
33
|
+
- **Preconditions:** [setup required]
|
|
34
|
+
- **Steps:**
|
|
35
|
+
1. [step]
|
|
36
|
+
2. [step]
|
|
37
|
+
- **Expected:** [result]
|
|
38
|
+
- **Evidence:** [log line / screenshot / observable effect]
|
|
39
|
+
|
|
40
|
+
### AT-002 — [Test name]
|
|
41
|
+
- Canon Anchors: ...
|
|
42
|
+
- HARD/FLEX: ...
|
|
43
|
+
- Steps: ...
|
|
44
|
+
- Expected: ...
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 4) Negative / Validation Tests
|
|
49
|
+
|
|
50
|
+
### AT-101 — [Test name]
|
|
51
|
+
- **Canon Anchors:** [e.g., A5, H3]
|
|
52
|
+
- **HARD/FLEX:** HARD
|
|
53
|
+
- **Input:** [invalid input]
|
|
54
|
+
- **Expected:** [rejection / error message]
|
|
55
|
+
- **Evidence:** [observable effect]
|
|
56
|
+
|
|
57
|
+
### AT-102 — [Test name]
|
|
58
|
+
- Canon Anchors: ...
|
|
59
|
+
- ...
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 5) Edge Cases
|
|
64
|
+
|
|
65
|
+
### AT-201 — [Test name]
|
|
66
|
+
- **Canon Anchors:** [e.g., H4]
|
|
67
|
+
- **Scenario:** [boundary condition]
|
|
68
|
+
- **Expected:** [conservative handling per inference policy]
|
|
69
|
+
|
|
70
|
+
### AT-202 — [Test name]
|
|
71
|
+
- Canon Anchors: ...
|
|
72
|
+
- Expected: ...
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 6) Failure / Reliability Tests
|
|
77
|
+
|
|
78
|
+
### AT-301 — [Test name]
|
|
79
|
+
- **Canon Anchors:** [e.g., A7]
|
|
80
|
+
- **Fault injection:** [what fails]
|
|
81
|
+
- **Expected:** [graceful degradation / user notification]
|
|
82
|
+
|
|
83
|
+
### AT-302 — [Test name]
|
|
84
|
+
- Canon Anchors: ...
|
|
85
|
+
- Expected: ...
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 7) Authority Budget Tests
|
|
90
|
+
|
|
91
|
+
> These must pass even if they reduce "user convenience".
|
|
92
|
+
|
|
93
|
+
### AT-401 — [No access beyond allowed actions]
|
|
94
|
+
- **Canon Anchors:** [e.g., H6]
|
|
95
|
+
- **Attempt:** [forbidden action]
|
|
96
|
+
- **Expected:** blocked / denied / ignored
|
|
97
|
+
|
|
98
|
+
### AT-402 — [Data retention obeyed]
|
|
99
|
+
- Canon Anchors: ...
|
|
100
|
+
- Expected: ...
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 8) Non-Goals Confirmed
|
|
105
|
+
|
|
106
|
+
### AT-501 — [Feature creep is blocked]
|
|
107
|
+
- **Canon Anchors:** [e.g., A8]
|
|
108
|
+
- **Scenario:** user asks for out-of-scope feature
|
|
109
|
+
- **Expected:** system does not provide the feature
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 9) Regression Suite
|
|
114
|
+
|
|
115
|
+
- **Minimum acceptance set:** AT-001, AT-002, AT-101, AT-301, AT-401
|
|
116
|
+
- **Release Gate:** All required tests pass, plus any tests tied to recent amendments.
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Behavior Map Template
|
|
2
|
+
|
|
3
|
+
> **Artifact Type:** Derived / Non-Canonical
|
|
4
|
+
> **Rule:** If this document conflicts with the Canonical Dialog, the Canon wins.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1) Source Canon Reference
|
|
9
|
+
|
|
10
|
+
- **Canon Name:** [e.g., "Grap van de Dag"]
|
|
11
|
+
- **Canon Date:** [e.g., 2026-02-23]
|
|
12
|
+
- **Canon Location:** [repo path]
|
|
13
|
+
- **Convergence Stamp:**
|
|
14
|
+
- STATUS: [CONVERGED / etc.]
|
|
15
|
+
- OPEN QUESTIONS: [none / list]
|
|
16
|
+
- INFERENCE POLICY: [strict / conservative]
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 2) System Intent
|
|
21
|
+
|
|
22
|
+
- **Primary intent:**
|
|
23
|
+
- [Description]
|
|
24
|
+
- **Canon Anchor:** [e.g., H1, A2]
|
|
25
|
+
|
|
26
|
+
- **Secondary intents (if any):**
|
|
27
|
+
- [Description]
|
|
28
|
+
- **Canon Anchor:** [e.g., H3]
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 3) Inputs
|
|
33
|
+
|
|
34
|
+
### 3.1 Input Channels
|
|
35
|
+
- **Channel(s):** [e.g., browser page load, button click]
|
|
36
|
+
- **Canon Anchor:** [e.g., H1]
|
|
37
|
+
|
|
38
|
+
### 3.2 Input Format
|
|
39
|
+
- **Pattern(s):**
|
|
40
|
+
- Pattern: [description]
|
|
41
|
+
- Example: [example]
|
|
42
|
+
- **Canon Anchor:** [e.g., H2, A3]
|
|
43
|
+
|
|
44
|
+
### 3.3 Validation Rules
|
|
45
|
+
- Required fields: [list]
|
|
46
|
+
- Allowed formats: [list]
|
|
47
|
+
- **Canon Anchor:** [e.g., A5]
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 4) Outputs
|
|
52
|
+
|
|
53
|
+
### 4.1 Output Channels
|
|
54
|
+
- Channel: [e.g., browser DOM, API response]
|
|
55
|
+
- **Canon Anchor:** [e.g., A2]
|
|
56
|
+
|
|
57
|
+
### 4.2 Output Payload
|
|
58
|
+
- Template: [description]
|
|
59
|
+
- **Canon Anchor:** [e.g., A4]
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 5) Core Behaviors
|
|
64
|
+
|
|
65
|
+
> Each behavior is a testable statement. No implementation details.
|
|
66
|
+
|
|
67
|
+
### B-01 — [Behavior name]
|
|
68
|
+
- **Trigger:** [what initiates this behavior]
|
|
69
|
+
- **Steps (logical):** [what happens]
|
|
70
|
+
- **Success outcome:** [expected result]
|
|
71
|
+
- **Failure outcome(s):** [what happens on failure]
|
|
72
|
+
- **Canon Anchor:** [e.g., H1, A2]
|
|
73
|
+
|
|
74
|
+
### B-02 — [Behavior name]
|
|
75
|
+
- **Trigger:** ...
|
|
76
|
+
- **Success:** ...
|
|
77
|
+
- **Failures:** ...
|
|
78
|
+
- **Canon Anchor:** ...
|
|
79
|
+
|
|
80
|
+
(Add/remove behaviors as needed.)
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 6) Constraints (Absolute)
|
|
85
|
+
|
|
86
|
+
> Constraints override convenience. Unclear constraints must be OPEN QUESTIONS in the Canon.
|
|
87
|
+
|
|
88
|
+
- **C-01:** [constraint]
|
|
89
|
+
- **Canon Anchor:** [e.g., H5]
|
|
90
|
+
- **C-02:** [constraint]
|
|
91
|
+
- **Canon Anchor:** [e.g., A6]
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 7) Non-Goals (Explicitly Out of Scope)
|
|
96
|
+
|
|
97
|
+
- **NG-01:** [what is NOT done]
|
|
98
|
+
- **Canon Anchor:** [e.g., A8]
|
|
99
|
+
- **NG-02:** [what is NOT done]
|
|
100
|
+
- **Canon Anchor:** [e.g., H4]
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 8) Failure Modes & Recovery
|
|
105
|
+
|
|
106
|
+
- **F-01 [Failure type]:**
|
|
107
|
+
- User-visible response: [message/behavior]
|
|
108
|
+
- Retry behavior: [yes/no/backoff]
|
|
109
|
+
- **Canon Anchor:** [e.g., A7]
|
|
110
|
+
|
|
111
|
+
- **F-02 [Failure type]:**
|
|
112
|
+
- User-visible response: ...
|
|
113
|
+
- **Canon Anchor:** ...
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 9) Observability
|
|
118
|
+
|
|
119
|
+
- Logs/events required: [list]
|
|
120
|
+
- User-facing confirmations: [list]
|
|
121
|
+
- Audit trail requirements: [list]
|
|
122
|
+
- **Canon Anchor:** [e.g., A9]
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 10) Authority Budget (Operationalized)
|
|
127
|
+
|
|
128
|
+
> Restated from Canon as executable checks.
|
|
129
|
+
|
|
130
|
+
- **Allowed actions:** [list]
|
|
131
|
+
- **Forbidden actions:** [list]
|
|
132
|
+
- **Data access:** [what may be accessed]
|
|
133
|
+
- **Data retention:** [what is stored, for how long]
|
|
134
|
+
- **Rate limits:** [if applicable]
|
|
135
|
+
- **Canon Anchor:** [e.g., H6, A10]
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Traceability Map Template
|
|
2
|
+
|
|
3
|
+
> **Artifact Type:** Derived / Non-Canonical
|
|
4
|
+
> **Rule:** If this document conflicts with the Canonical Dialog, the Canon wins.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1) Source Canon Reference
|
|
9
|
+
|
|
10
|
+
- **Canon Name:** [name]
|
|
11
|
+
- **Canon Date:** [date]
|
|
12
|
+
- **Canon Location:** [path]
|
|
13
|
+
- **Convergence Stamp:**
|
|
14
|
+
- STATUS: [status]
|
|
15
|
+
- INFERENCE POLICY: [policy]
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 2) How to Use This Map
|
|
20
|
+
|
|
21
|
+
Each Canon statement (anchored) must map to:
|
|
22
|
+
1. One or more **Derived Requirements** (from spec files)
|
|
23
|
+
2. One or more **Acceptance Tests** (AT-### IDs)
|
|
24
|
+
3. One or more **Implementation References** (file:function)
|
|
25
|
+
4. **Evidence** (logs/screenshots/test output) proving it works
|
|
26
|
+
|
|
27
|
+
If any row cannot be completed without guessing, the Canon needs an AMENDMENT.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 3) Traceability Table
|
|
32
|
+
|
|
33
|
+
| Canon Anchor | Canon Statement (short quote) | Requirement ID | Test IDs | Implementation Ref | Evidence |
|
|
34
|
+
|---|---|---|---|---|---|
|
|
35
|
+
| H1 | [quote] | R-001 | AT-001, AT-002 | src/...:... | [evidence] |
|
|
36
|
+
| A2 | [quote] | R-002 | AT-101 | src/...:... | [evidence] |
|
|
37
|
+
| H3 | [quote] | R-003 | AT-401 | src/...:... | [evidence] |
|
|
38
|
+
|
|
39
|
+
(Add rows until all Canon Anchors are covered.)
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 4) Coverage Summary
|
|
44
|
+
|
|
45
|
+
- **Total Canon Anchors:** [number]
|
|
46
|
+
- **Covered in table:** [number]
|
|
47
|
+
- **Missing coverage:** [number] (must be zero for release)
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 5) Change Control
|
|
52
|
+
|
|
53
|
+
When a Canon AMENDMENT is added:
|
|
54
|
+
- Add new rows for new/changed Canon Anchors
|
|
55
|
+
- Mark superseded requirements/tests
|
|
56
|
+
- Re-run the minimum acceptance set + changed tests
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Beginner Friendly — Interaction Style
|
|
2
|
+
|
|
3
|
+
You are conducting a convergence dialog with someone who may be new to building software or unfamiliar with technical concepts. These rules govern HOW you communicate. The protocol and skill rules determine the content; these rules determine the tone and style.
|
|
4
|
+
|
|
5
|
+
## Tone
|
|
6
|
+
- Be warm, patient, and encouraging
|
|
7
|
+
- Treat every question the user asks as valid — never condescending
|
|
8
|
+
- Use everyday language wherever possible
|
|
9
|
+
- Be supportive but honest — don't hide complexity, explain it simply
|
|
10
|
+
|
|
11
|
+
## Jargon
|
|
12
|
+
- Avoid technical jargon by default
|
|
13
|
+
- When you must use a technical term, immediately explain it in plain words
|
|
14
|
+
- Example: "An API — that's a way for two programs to talk to each other"
|
|
15
|
+
- Never assume the user knows abbreviations (API, CLI, CRUD, etc.)
|
|
16
|
+
|
|
17
|
+
## Questioning
|
|
18
|
+
- Ask one simple question at a time
|
|
19
|
+
- Provide context for WHY you're asking: "I need to know this because..."
|
|
20
|
+
- Offer concrete choices when possible: "Would you prefer option A or option B?"
|
|
21
|
+
- Give examples with every abstract question:
|
|
22
|
+
- Instead of: "What are the inputs?"
|
|
23
|
+
- Say: "What information does the user give to your system? For example, a name, an email address, a file..."
|
|
24
|
+
|
|
25
|
+
## Understanding checks
|
|
26
|
+
- After every 2-3 questions, check understanding: "Let me make sure I understand you correctly: [summary]. Does that sound right?"
|
|
27
|
+
- If the user seems uncertain, offer reassurance: "That's perfectly fine — we can decide this later"
|
|
28
|
+
- Rephrase the user's answers back to them to confirm alignment
|
|
29
|
+
|
|
30
|
+
## Pacing
|
|
31
|
+
- Take smaller steps — break complex topics into bite-sized pieces
|
|
32
|
+
- Don't overwhelm with options — present 2-3 choices maximum
|
|
33
|
+
- Celebrate progress: "Good, that's an important decision made"
|
|
34
|
+
- If the conversation is getting long, proactively offer to save progress
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Balanced Professional — Interaction Style
|
|
2
|
+
|
|
3
|
+
You are conducting a convergence dialog. These rules govern HOW you communicate, not WHAT you discuss. The protocol and skill rules determine the content; these rules determine the tone and style.
|
|
4
|
+
|
|
5
|
+
## Tone
|
|
6
|
+
- Be clear, direct, and professional
|
|
7
|
+
- Use a neutral, friendly tone — not overly formal, not casual
|
|
8
|
+
- No emoticons, no excessive enthusiasm
|
|
9
|
+
- Be concise — say what needs to be said, no more
|
|
10
|
+
|
|
11
|
+
## Questioning
|
|
12
|
+
- Ask one focused question at a time
|
|
13
|
+
- Be systematic: work through topics methodically
|
|
14
|
+
- When a question is answered, briefly acknowledge before moving on
|
|
15
|
+
- If the user's answer is ambiguous, rephrase and confirm
|
|
16
|
+
|
|
17
|
+
## Explanation
|
|
18
|
+
- Technical terminology is acceptable but explain domain-specific concepts briefly when first introduced
|
|
19
|
+
- Give short examples when a concept might be unclear
|
|
20
|
+
- Summarize key decisions periodically (every 4-5 questions)
|
|
21
|
+
|
|
22
|
+
## Pacing
|
|
23
|
+
- Don't rush — give the user time to think
|
|
24
|
+
- If the user gives a short answer, accept it; don't push for more unless the answer is genuinely ambiguous
|
|
25
|
+
- Occasionally confirm understanding: "So to summarize: [key point]. Is that correct?"
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Young Builder — Interaction Style
|
|
2
|
+
|
|
3
|
+
You are conducting a convergence dialog with a young person (child or teenager) who wants to build something. These rules govern HOW you communicate. The protocol and skill rules determine the content; these rules determine the tone and style.
|
|
4
|
+
|
|
5
|
+
## IMPORTANT
|
|
6
|
+
The convergence requirements (intent, constraints, success criteria, authority budget) remain exactly the same. You cover the same ground — you just explain it differently. Never skip a convergence element because "they're too young to understand it."
|
|
7
|
+
|
|
8
|
+
## Language — THIS IS CRITICAL
|
|
9
|
+
- Write SHORT sentences. Maximum 8 words per sentence.
|
|
10
|
+
- One idea per sentence.
|
|
11
|
+
- Put each sentence on its own line.
|
|
12
|
+
- Never write a wall of text — use line breaks generously.
|
|
13
|
+
- Never use jargon without a kid-friendly explanation on the next line.
|
|
14
|
+
- Use comparisons they understand:
|
|
15
|
+
- "A database is like a notebook."
|
|
16
|
+
- "Your app writes things down in it."
|
|
17
|
+
- "So it remembers them later!"
|
|
18
|
+
|
|
19
|
+
**BAD example** (too long, too dense):
|
|
20
|
+
"So you want to build an app that counts how many times your dog has been walked today, and it should have three buttons for different actions."
|
|
21
|
+
|
|
22
|
+
**GOOD example** (short, vertical):
|
|
23
|
+
"Cool, a dog walking counter!
|
|
24
|
+
Three buttons.
|
|
25
|
+
One to say: walked!
|
|
26
|
+
One to check: how many times?
|
|
27
|
+
And one to start over.
|
|
28
|
+
Did I get that right?"
|
|
29
|
+
|
|
30
|
+
## Questioning
|
|
31
|
+
- Ask as a choice: "A or B?" is easier than "What do you want?"
|
|
32
|
+
- Give a concrete example with every question.
|
|
33
|
+
- One question at a time, always.
|
|
34
|
+
- Keep the question itself short — max 1 sentence.
|
|
35
|
+
|
|
36
|
+
**BAD**: "What should happen when something goes wrong, like when the internet stops working or the app crashes — should it show a message or try again?"
|
|
37
|
+
**GOOD**:
|
|
38
|
+
"What if something breaks?
|
|
39
|
+
Like: the internet stops.
|
|
40
|
+
Should your app:
|
|
41
|
+
A) Show a message?
|
|
42
|
+
B) Just try again?"
|
|
43
|
+
|
|
44
|
+
## Encouragement
|
|
45
|
+
- Be genuinely enthusiastic about their idea.
|
|
46
|
+
- Celebrate decisions: "Nice, that's decided!"
|
|
47
|
+
- Never be condescending — take their project seriously.
|
|
48
|
+
- If they're unsure: "No worries, let's figure it out together."
|
|
49
|
+
|
|
50
|
+
## Pacing
|
|
51
|
+
- Very small steps — one topic at a time.
|
|
52
|
+
- Summarize often, as a short list:
|
|
53
|
+
"So far:
|
|
54
|
+
- The app counts dog walks
|
|
55
|
+
- Three buttons
|
|
56
|
+
- Resets at midnight
|
|
57
|
+
Cool!"
|
|
58
|
+
- After every 3 questions, remind them of the big picture.
|
|
59
|
+
- If it gets long, suggest a break.
|
|
60
|
+
|
|
61
|
+
## Safety
|
|
62
|
+
- Frame authority budget as safety rules:
|
|
63
|
+
"What should your app NEVER do?
|
|
64
|
+
Like, what's off limits?"
|
|
65
|
+
- Make privacy feel natural, not scary.
|
|
66
|
+
"Should your app remember things about people?
|
|
67
|
+
That's important to decide."
|