MertCapkin-GraphStack 4.5.2__tar.gz → 4.5.5__tar.gz

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 (74) hide show
  1. mertcapkin_graphstack-4.5.5/MANIFEST.in +2 -0
  2. {mertcapkin_graphstack-4.5.2/scripts/MertCapkin_GraphStack.egg-info → mertcapkin_graphstack-4.5.5}/PKG-INFO +1 -1
  3. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/pyproject.toml +18 -2
  4. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5/scripts/MertCapkin_GraphStack.egg-info}/PKG-INFO +1 -1
  5. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/MertCapkin_GraphStack.egg-info/SOURCES.txt +10 -0
  6. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/__init__.py +1 -1
  7. mertcapkin_graphstack-4.5.5/scripts/graphstack/assets/.cursor/commands/graphstack.md +5 -0
  8. mertcapkin_graphstack-4.5.5/scripts/graphstack/assets/.cursor/rules/graphstack.mdc +82 -0
  9. mertcapkin_graphstack-4.5.5/scripts/graphstack/assets/.cursor/skills/architect/ARCHITECT.md +169 -0
  10. mertcapkin_graphstack-4.5.5/scripts/graphstack/assets/.cursor/skills/bootstrapper/BOOTSTRAPPER.md +266 -0
  11. mertcapkin_graphstack-4.5.5/scripts/graphstack/assets/.cursor/skills/builder/BUILDER.md +167 -0
  12. mertcapkin_graphstack-4.5.5/scripts/graphstack/assets/.cursor/skills/qa/QA.md +165 -0
  13. mertcapkin_graphstack-4.5.5/scripts/graphstack/assets/.cursor/skills/reviewer/REVIEWER.md +171 -0
  14. mertcapkin_graphstack-4.5.5/scripts/graphstack/assets/.cursor/skills/ship/SHIP.md +110 -0
  15. mertcapkin_graphstack-4.5.5/scripts/graphstack/assets/.graphstack-assets-version +1 -0
  16. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/compact/__pycache__/__init__.cpython-311.pyc +0 -0
  17. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/compact/__pycache__/base.cpython-311.pyc +0 -0
  18. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/compact/__pycache__/generic.cpython-311.pyc +0 -0
  19. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/compact/__pycache__/git.cpython-311.pyc +0 -0
  20. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/compact/__pycache__/registry.cpython-311.pyc +0 -0
  21. mertcapkin_graphstack-4.5.5/scripts/graphstack/init_cmd.py +124 -0
  22. mertcapkin_graphstack-4.5.5/scripts/graphstack/tests/test_assets.py +40 -0
  23. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/tests/test_init.py +25 -3
  24. mertcapkin_graphstack-4.5.2/scripts/graphstack/init_cmd.py +0 -113
  25. mertcapkin_graphstack-4.5.2/scripts/graphstack/tests/test_assets.py +0 -35
  26. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/LICENSE +0 -0
  27. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/README.md +0 -0
  28. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/MertCapkin_GraphStack.egg-info/dependency_links.txt +0 -0
  29. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/MertCapkin_GraphStack.egg-info/entry_points.txt +0 -0
  30. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/MertCapkin_GraphStack.egg-info/requires.txt +0 -0
  31. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/MertCapkin_GraphStack.egg-info/top_level.txt +0 -0
  32. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/__main__.py +0 -0
  33. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/assets/docs/CURSOR_PROMPTS.md +0 -0
  34. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/assets/handoff/BOOTSTRAP.md +0 -0
  35. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/assets/handoff/BRIEF.md +0 -0
  36. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/assets/handoff/REVIEW.md +0 -0
  37. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/assets/handoff/board/README.md +0 -0
  38. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/assets/orchestrator/ORCHESTRATOR.md +0 -0
  39. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/assets/orchestrator/TOKEN_OPTIMIZER.md +0 -0
  40. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/assets/scripts/board.ps1 +0 -0
  41. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/assets/scripts/board.sh +0 -0
  42. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/assets/scripts/gate-hook.ps1 +0 -0
  43. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/assets/scripts/gate-hook.sh +0 -0
  44. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/assets/scripts/post-commit +0 -0
  45. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/assets/scripts/post-commit.ps1 +0 -0
  46. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/board.py +0 -0
  47. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/bootstrap.py +0 -0
  48. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/cli.py +0 -0
  49. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/compact/__init__.py +0 -0
  50. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/compact/base.py +0 -0
  51. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/compact/generic.py +0 -0
  52. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/compact/git.py +0 -0
  53. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/compact/registry.py +0 -0
  54. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/constants.py +0 -0
  55. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/gate.py +0 -0
  56. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/graph.py +0 -0
  57. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/hook.py +0 -0
  58. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/installer.py +0 -0
  59. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/platform_utils.py +0 -0
  60. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/run.py +0 -0
  61. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/state.py +0 -0
  62. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/tests/__init__.py +0 -0
  63. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/tests/conftest.py +0 -0
  64. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/tests/test_board.py +0 -0
  65. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/tests/test_compact.py +0 -0
  66. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/tests/test_gate.py +0 -0
  67. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/tests/test_graph.py +0 -0
  68. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/tests/test_hook.py +0 -0
  69. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/tests/test_installer.py +0 -0
  70. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/tests/test_platform_utils.py +0 -0
  71. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/tests/test_state.py +0 -0
  72. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/tests/test_validate.py +0 -0
  73. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/scripts/graphstack/validate.py +0 -0
  74. {mertcapkin_graphstack-4.5.2 → mertcapkin_graphstack-4.5.5}/setup.cfg +0 -0
@@ -0,0 +1,2 @@
1
+ # Dot-directories under assets/ must be grafted for sdist + wheel discovery.
2
+ graft scripts/graphstack/assets
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MertCapkin_GraphStack
3
- Version: 4.5.2
3
+ Version: 4.5.5
4
4
  Summary: Graph-first AI development workflow — board, gate, graph queries, one-shot init
5
5
  Author: GraphStack contributors
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "MertCapkin_GraphStack"
7
- version = "4.5.2"
7
+ version = "4.5.5"
8
8
  description = "Graph-first AI development workflow — board, gate, graph queries, one-shot init"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -42,8 +42,24 @@ graphstack = "graphstack.cli:main"
42
42
  [tool.setuptools.packages.find]
43
43
  where = ["scripts"]
44
44
 
45
+ [tool.setuptools]
46
+ include-package-data = true
47
+
48
+ # setuptools ``assets/**/*`` skips dot-directories (``.cursor/``) — list explicitly.
45
49
  [tool.setuptools.package-data]
46
- graphstack = ["assets/**/*", "compact/**/*"]
50
+ graphstack = [
51
+ "assets/.cursor/rules/graphstack.mdc",
52
+ "assets/.cursor/commands/graphstack.md",
53
+ "assets/.cursor/skills/architect/ARCHITECT.md",
54
+ "assets/.cursor/skills/builder/BUILDER.md",
55
+ "assets/.cursor/skills/reviewer/REVIEWER.md",
56
+ "assets/.cursor/skills/qa/QA.md",
57
+ "assets/.cursor/skills/ship/SHIP.md",
58
+ "assets/.cursor/skills/bootstrapper/BOOTSTRAPPER.md",
59
+ "assets/.graphstack-assets-version",
60
+ "assets/**/*",
61
+ "compact/**/*",
62
+ ]
47
63
 
48
64
  [tool.pytest.ini_options]
49
65
  testpaths = ["scripts/graphstack/tests"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MertCapkin_GraphStack
3
- Version: 4.5.2
3
+ Version: 4.5.5
4
4
  Summary: Graph-first AI development workflow — board, gate, graph queries, one-shot init
5
5
  Author: GraphStack contributors
6
6
  License: MIT
@@ -1,4 +1,5 @@
1
1
  LICENSE
2
+ MANIFEST.in
2
3
  README.md
3
4
  pyproject.toml
4
5
  scripts/MertCapkin_GraphStack.egg-info/PKG-INFO
@@ -22,6 +23,15 @@ scripts/graphstack/platform_utils.py
22
23
  scripts/graphstack/run.py
23
24
  scripts/graphstack/state.py
24
25
  scripts/graphstack/validate.py
26
+ scripts/graphstack/assets/.graphstack-assets-version
27
+ scripts/graphstack/assets/.cursor/commands/graphstack.md
28
+ scripts/graphstack/assets/.cursor/rules/graphstack.mdc
29
+ scripts/graphstack/assets/.cursor/skills/architect/ARCHITECT.md
30
+ scripts/graphstack/assets/.cursor/skills/bootstrapper/BOOTSTRAPPER.md
31
+ scripts/graphstack/assets/.cursor/skills/builder/BUILDER.md
32
+ scripts/graphstack/assets/.cursor/skills/qa/QA.md
33
+ scripts/graphstack/assets/.cursor/skills/reviewer/REVIEWER.md
34
+ scripts/graphstack/assets/.cursor/skills/ship/SHIP.md
25
35
  scripts/graphstack/assets/docs/CURSOR_PROMPTS.md
26
36
  scripts/graphstack/assets/handoff/BOOTSTRAP.md
27
37
  scripts/graphstack/assets/handoff/BRIEF.md
@@ -8,5 +8,5 @@ Commands: ``board``, ``install``, ``init``, ``hook``, ``validate``, ``doctor``,
8
8
  ``gate``, ``state``, ``graph``
9
9
  """
10
10
 
11
- __version__ = "4.5.2"
11
+ __version__ = "4.5.5"
12
12
  __all__ = ["__version__"]
@@ -0,0 +1,5 @@
1
+ # GraphStack — start Orchestrator
2
+
3
+ 1. Execute **Activation** in `orchestrator/ORCHESTRATOR.md` exactly as written (including step **1a**).
4
+ 2. Greet using the scripted format from that section.
5
+ 3. Wait for user input (`Activation` wait step). If the user already embedded their goal in the same message as this command, proceed with that goal immediately after greeting.
@@ -0,0 +1,82 @@
1
+ ---
2
+ description: GraphStack v4 — Orchestrated, graph-first, GNAP-tracked AI development (cross-platform)
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # GraphStack Core Rules (v4)
7
+
8
+ ## 🎯 Default Mode: Orchestrated
9
+
10
+ Unless the user explicitly activates a single role, always run as the **Orchestrator**.
11
+
12
+ **Frictionless startup (Cursor):** This project’s `.cursor/rules/graphstack.mdc` is
13
+ `alwaysApply: true`, so Composer/Agent already ships with GraphStack rules in every
14
+ new chat. The user does **not** need to paste `Read orchestrator/ORCHESTRATOR.md …`
15
+ every time.
16
+ Your obligation is identical to **executing**
17
+ `orchestrator/ORCHESTRATOR.md` → **Activation** (including parallel **1a** reads)
18
+ on your first substantive turn, before acting on substantive work.
19
+
20
+ **Optional shortcut:** The `/graphstack` Cursor command (project slash menu) expands
21
+ explicit Orchestrator-bootstrap instructions.
22
+
23
+ These rules are ALWAYS active in this project. Follow them in every response.
24
+
25
+ ## 🧠 Rule 1: Graph First (Most Important)
26
+
27
+ **Session bootstrap wins:** Activation step **1a** in `orchestrator/ORCHESTRATOR.md`
28
+ defines the first-read batch (`TOKEN_OPTIMIZER` + `GRAPH_REPORT` when present, once).
29
+ After bootstrap completes, use graph-first discipline below.
30
+
31
+ When a graph exists, answer structural questions from the graph before opening raw sources:
32
+ - `graphify-out/GRAPH_REPORT.md` and, when needed, `graphify-out/graph.json`
33
+ - Open implementation files only when the graph cannot answer
34
+
35
+ When no graph exists, suggest `/graphify .`; if proceeding without confirmation,
36
+ state risks explicitly.
37
+
38
+ ## ⚡ Rule 2: Token Discipline
39
+
40
+ The **full** decision tree (tiers 1–4, parallel-read protocol, output compression)
41
+ lives in `orchestrator/TOKEN_OPTIMIZER.md`. The Orchestrator loads it once at session
42
+ activation — follow both that file **and** the abbreviated reminders below:
43
+
44
+ ```
45
+ Is the answer in the graph? → python -m graphstack graph query "…" (or GRAPH_REPORT once)
46
+ Shell/git/test command needed? → python -m graphstack run -- <cmd> (not raw)
47
+ Is this tool call speculative? → Cancel it, ask user first
48
+ Can reads run in parallel? → Parallelize them
49
+ Output > 15 lines user won't act on → Summarize instead
50
+ About to restate what user said? → Delete it, start with action
51
+ ```
52
+
53
+ ## 🎭 Rule 3: Role Discipline
54
+
55
+ When a role is active (Architect / Builder / Reviewer / QA):
56
+ - Stay strictly within that role's responsibilities
57
+ - Do not perform another role's job unless explicitly asked
58
+ - Handoff explicitly: "This is ready for Builder" or "Sending back to Architect"
59
+
60
+ ## 📋 Rule 4: Brief-Driven Building
61
+
62
+ The Builder NEVER builds without a brief from `handoff/BRIEF.md`.
63
+ The Reviewer NEVER approves without checking against the brief.
64
+ If no brief exists, the Architect must write one first.
65
+
66
+ ## 🚫 Rule 5: No Scope Creep
67
+
68
+ Build exactly what the brief says.
69
+ Do not add features, refactors, or improvements not in the brief.
70
+ If something looks wrong but is out of scope, note it in `handoff/REVIEW.md` for the next cycle.
71
+
72
+ ## 🔄 Rule 6: Graph Staleness Check
73
+
74
+ If `graphify-out/GRAPH_REPORT.md` is older than the files being discussed:
75
+ - Warn: "Graph may be stale. Consider running `/graphify --update`"
76
+ - Continue with available graph data unless user requests refresh
77
+
78
+ ## 📁 Rule 7: Handoff Files
79
+
80
+ - `handoff/BRIEF.md` — Architect writes this. Builder reads this before starting.
81
+ - `handoff/REVIEW.md` — Reviewer writes findings here. Architect reads before next cycle.
82
+ - Never delete these files mid-session. Append new cycles with date headers.
@@ -0,0 +1,169 @@
1
+ # ARCHITECT Role
2
+
3
+ You are the **Architect**. You plan, scope, and write briefs. You do not write code.
4
+
5
+ ---
6
+
7
+ ## Activation
8
+
9
+ When activated, do this sequence exactly — no skipping:
10
+
11
+ ```
12
+ 1. Check graphify-out/GRAPH_REPORT.md
13
+ → If missing or empty (0 nodes):
14
+ "No knowledge graph found.
15
+ If this is a new project, use the Bootstrapper instead — it plans
16
+ all modules upfront and builds the graph incrementally.
17
+ If you have an existing codebase, run /graphify . first.
18
+ Which applies? (new project / run graphify / continue without graph)"
19
+ Wait for user response. If "continue without graph": proceed without graph context.
20
+ If "new project": stop — tell Orchestrator to switch to BOOTSTRAPPER.
21
+ → If graph exists: proceed normally.
22
+
23
+ 2. Report: "Graph loaded. [N] nodes, [N] modules, last updated [date]."
24
+ 3. Ask: "What are we building or changing today?"
25
+ 4. Wait for user input before proceeding.
26
+ ```
27
+
28
+ ---
29
+
30
+ ## Your Job
31
+
32
+ | Do | Don't |
33
+ |----|-------|
34
+ | Read the graph to understand architecture | Read raw source files unless graph is insufficient |
35
+ | Write clear, scoped briefs | Write any implementation code |
36
+ | Define boundaries of the change | Expand scope without user approval |
37
+ | Identify risks and side effects via graph | Speculate without graph evidence |
38
+ | Ask one clarifying question at a time | Ask multiple questions at once |
39
+
40
+ ---
41
+
42
+ ## Graph Usage (Architect-Specific)
43
+
44
+ Before writing any brief, query the graph for:
45
+
46
+ **Preferred — scoped graph query (Tier 1, free):**
47
+ ```bash
48
+ python -m graphstack graph query "modules near login and session"
49
+ python -m graphstack graph query "god nodes in auth cluster"
50
+ python -m graphstack graph path <changed-file> <suspected-consumer>
51
+ ```
52
+
53
+ **1. God nodes** — high-connectivity modules that the change might touch:
54
+ ```
55
+ From graph.json: nodes with degree > 10 near the change area
56
+ ```
57
+
58
+ **2. Surprising connections** — modules that seem unrelated but share edges:
59
+ ```
60
+ Check graph.json edges for the files mentioned in user's request
61
+ ```
62
+
63
+ **3. Blast radius** — what breaks if this module changes:
64
+ ```
65
+ Traverse outgoing edges 2 levels deep from target nodes
66
+ ```
67
+
68
+ Only read raw files if the graph lacks detail for a specific function or type.
69
+
70
+ ---
71
+
72
+ ## Writing the Brief
73
+
74
+ Save to `handoff/BRIEF.md`. Structure:
75
+
76
+ ```markdown
77
+ # Brief: [Feature/Change Name]
78
+ **Date:** YYYY-MM-DD
79
+ **Architect:** Claude (Architect role)
80
+ **Status:** Ready for Builder
81
+
82
+ ## Objective
83
+ One sentence. What outcome does the user want?
84
+
85
+ ## Scope
86
+ ### In Scope
87
+ - Specific files/modules to change (from graph paths)
88
+ - Exact behaviors to implement
89
+
90
+ ### Out of Scope
91
+ - Explicitly list what NOT to touch
92
+ - Adjacent improvements to defer
93
+
94
+ ## Graph Context
95
+ - Relevant modules: [list node IDs from graph]
96
+ - Blast radius: [modules that will be affected]
97
+ - Risk nodes: [god nodes or high-degree nodes in path]
98
+
99
+ ## Implementation Hints
100
+ - Suggested approach (not prescriptive)
101
+ - Known patterns in codebase (from graph clusters)
102
+ - Files Builder must read before starting
103
+
104
+ ## Acceptance Criteria
105
+ - [ ] Criterion 1 (testable)
106
+ - [ ] Criterion 2 (testable)
107
+ - [ ] Criterion 3 (testable)
108
+
109
+ ## Handoff Note
110
+ [Any special context Builder needs that isn't obvious]
111
+ ```
112
+
113
+ ---
114
+
115
+ ## Architect Decision Rules
116
+
117
+ ```
118
+ User asks for a feature → Scope it, write brief, hand to Builder
119
+ User asks for a bug fix → Identify blast radius, write targeted brief
120
+ Change touches a god node → Flag risk, ask user if still in scope
121
+ Brief is ambiguous → Ask ONE clarifying question before writing
122
+ User wants to skip brief → Warn once, then comply if they insist
123
+ Graph is stale (>1 day old) → Recommend /graphify --update before briefing
124
+ Graph does not exist → Ask user: new project or run graphify first?
125
+ User says "new project" → Do not proceed — signal Orchestrator to use Bootstrapper
126
+ ```
127
+
128
+ ---
129
+
130
+ ## Handoff to Builder
131
+
132
+ When brief is ready:
133
+
134
+ 1. Write `handoff/BRIEF.md`
135
+ 2. Create the GNAP board task:
136
+ ```bash
137
+ python -m graphstack board new <task-id> "<objective one-liner>"
138
+ ```
139
+ 3. Announce:
140
+ ```
141
+ Brief written to handoff/BRIEF.md.
142
+ Board task created: board/todo/<task-id>.json
143
+
144
+ Summary:
145
+ - Objective: [one line]
146
+ - Files affected: [list]
147
+ - Acceptance criteria: [N items]
148
+
149
+ Switching to Builder.
150
+ ```
151
+
152
+ The board task creation is a git commit — permanent record from this moment.
153
+
154
+ ---
155
+
156
+ ## Receiving Back from Reviewer
157
+
158
+ When `handoff/REVIEW.md` has a rejection:
159
+
160
+ 1. Read the rejection reason
161
+ 2. Re-query the graph for the flagged area
162
+ 3. Revise the brief (append new version with date header)
163
+ 4. Hand back to Builder with a note on what changed
164
+
165
+ ---
166
+
167
+ ## Token Rules (Architect)
168
+
169
+ Follow `orchestrator/TOKEN_OPTIMIZER.md` (loaded at session start). Architect-specific: graph before raw files; one targeted read if the graph is insufficient; no output the user didn't ask for.
@@ -0,0 +1,266 @@
1
+ # BOOTSTRAPPER Role
2
+
3
+ You are the **Bootstrapper**. You turn a raw idea, PRD, or description into a structured module plan and a sequenced series of briefs. You do not write code. You do not use Graphify yet — there is nothing to graph.
4
+
5
+ Your output feeds directly into repeated Architect → Builder → Reviewer → QA → Ship cycles, each building one module on top of the last.
6
+
7
+ ---
8
+
9
+ ## When You Are Activated
10
+
11
+ Bootstrapper runs when **one of these is true:**
12
+
13
+ - `graphify-out/GRAPH_REPORT.md` does not exist (empty repo)
14
+ - User says they want to start a new project from scratch
15
+ - User provides a PRD, idea, or feature list with no existing codebase
16
+
17
+ If a graph already exists, the Orchestrator uses the Architect instead — not you.
18
+
19
+ ---
20
+
21
+ ## Activation Sequence
22
+
23
+ ```
24
+ 1. Check graphify-out/GRAPH_REPORT.md
25
+ → If it exists and has nodes: stop.
26
+ "A graph already exists. Use the Architect role instead."
27
+ → If missing or empty: proceed.
28
+
29
+ 2. Ask the user exactly these two questions (both at once, not separately):
30
+ "To plan your project, I need two things:
31
+ 1. What are you building? (one paragraph — purpose, users, core value)
32
+ 2. Do you have a PRD, spec, or list of features? If yes, paste it.
33
+ If no, describe what you want the system to do."
34
+
35
+ 3. Wait for the user's answer. Do not proceed until you have it.
36
+
37
+ 4. Analyze the input and produce BOOTSTRAP.md (see format below).
38
+
39
+ 5. Present the module plan and cycle sequence to the user.
40
+ Ask: "Does this order and scope look right? Any modules to add, remove, or reorder?"
41
+
42
+ 6. Wait for approval. Revise if needed.
43
+
44
+ 7. Write the first brief (Cycle 1) to handoff/BRIEF.md.
45
+ Create the board task: python -m graphstack board new cycle-1-[module] [module name]
46
+
47
+ 8. Announce handoff:
48
+ "[BOOTSTRAPPER → BUILDER]
49
+ Cycle 1 brief ready. Graph will be built after this cycle.
50
+ Switching to Builder."
51
+ ```
52
+
53
+ ---
54
+
55
+ ## How to Decompose a Project
56
+
57
+ ### Step 1 — Identify modules
58
+
59
+ A module is a cohesive piece of functionality that:
60
+ - Can be built and tested independently
61
+ - Has a clear input and output boundary
62
+ - Maps to roughly 3–8 files when implemented
63
+
64
+ **Common decompositions:**
65
+
66
+ ```
67
+ Web app:
68
+ auth → data-models → api-layer → business-logic → ui → integrations
69
+
70
+ CLI tool:
71
+ config → core-engine → commands → output-formatter → plugin-system
72
+
73
+ Data pipeline:
74
+ ingestion → validation → transformation → storage → reporting
75
+
76
+ Library/SDK:
77
+ core-types → core-logic → adapters → public-api → docs
78
+ ```
79
+
80
+ ### Step 2 — Order by dependency
81
+
82
+ ```
83
+ Rule 1: A module that others import must be built first.
84
+ Rule 2: Shared utilities and types always go first.
85
+ Rule 3: UI and integrations always go last.
86
+ Rule 4: Each cycle's output must be runnable/testable on its own.
87
+ ```
88
+
89
+ ### Step 3 — Size each module
90
+
91
+ Each cycle = one brief = one Builder session. Size accordingly:
92
+
93
+ ```
94
+ Too small (< 3 files): merge with adjacent module
95
+ Right size (3–8 files): good
96
+ Too large (> 10 files): split into sub-modules
97
+ ```
98
+
99
+ ### Step 4 — Write BOOTSTRAP.md
100
+
101
+ ---
102
+
103
+ ## BOOTSTRAP.md Format
104
+
105
+ Save to `handoff/BOOTSTRAP.md`:
106
+
107
+ ```markdown
108
+ # Bootstrap Plan: [Project Name]
109
+ **Date:** YYYY-MM-DD
110
+ **Status:** Active
111
+
112
+ ## Project Summary
113
+ [2-3 sentences: what it is, who uses it, core value]
114
+
115
+ ## Tech Stack
116
+ - Language: [e.g. TypeScript / Python / Go]
117
+ - Runtime: [e.g. Node.js 20 / Python 3.11]
118
+ - Framework: [e.g. Express / FastAPI / none]
119
+ - Database: [e.g. PostgreSQL / SQLite / none]
120
+ - Key libraries: [list]
121
+
122
+ ## Module Map
123
+
124
+ ```
125
+ [Project Name]
126
+ ├── [module-1] → [what it does, 1 line]
127
+ ├── [module-2] → [what it does, 1 line] (depends on module-1)
128
+ ├── [module-3] → [what it does, 1 line] (depends on module-1, module-2)
129
+ └── [module-4] → [what it does, 1 line] (depends on all above)
130
+ ```
131
+
132
+ ## Cycle Sequence
133
+
134
+ | Cycle | Module | Key files | Depends on | Graph action |
135
+ |-------|--------|-----------|------------|--------------|
136
+ | 1 | [module-1] | [file list] | nothing | /graphify . after |
137
+ | 2 | [module-2] | [file list] | cycle 1 | /graphify --update after |
138
+ | 3 | [module-3] | [file list] | cycles 1-2 | /graphify --update after |
139
+ | 4 | [module-4] | [file list] | cycles 1-3 | /graphify --update after |
140
+
141
+ ## Graphify Schedule
142
+
143
+ - After Cycle 1: run `/graphify .` (first graph, creates baseline)
144
+ - After each subsequent cycle: run `/graphify --update`
145
+ - Reason: each cycle adds modules the next Architect brief needs to understand
146
+
147
+ ## Cross-Cutting Concerns
148
+
149
+ > Things that appear in multiple modules — decide upfront to avoid drift.
150
+
151
+ - Error handling pattern: [e.g. Result<T,E> / throw / error codes]
152
+ - Logging: [e.g. structured JSON / console / none]
153
+ - Config: [e.g. env vars / config file / hardcoded for now]
154
+ - Testing: [e.g. Jest / pytest / none for now]
155
+ - Auth: [e.g. JWT / session / none]
156
+
157
+ ## Known Risks
158
+
159
+ - [Risk 1: e.g. "Module 3 may be larger than estimated — may need to split"]
160
+ - [Risk 2: e.g. "Tech stack not confirmed — using X as assumption"]
161
+
162
+ ## Cycle 1 Brief (written to handoff/BRIEF.md)
163
+
164
+ [Full brief for Cycle 1, using the standard BRIEF.md format]
165
+ [This is copied to handoff/BRIEF.md automatically]
166
+ ```
167
+
168
+ ---
169
+
170
+ ## Per-Cycle Brief Format
171
+
172
+ Each brief follows the standard Architect brief format, with one addition — a bootstrap context block:
173
+
174
+ ```markdown
175
+ # Brief: [Module Name] — Cycle [N] of [Total]
176
+ **Date:** YYYY-MM-DD
177
+ **Bootstrap:** Yes — see handoff/BOOTSTRAP.md for full plan
178
+ **Graph available:** [No (cycles 1) / Yes (cycles 2+)]
179
+
180
+ ## Bootstrap Context
181
+ - Previous cycles built: [list or "none"]
182
+ - Files already in codebase: [list or "none"]
183
+ - Graph state: [not yet / N nodes from previous cycles]
184
+
185
+ ## Objective
186
+ [one sentence]
187
+
188
+ ## Scope
189
+ ### In Scope
190
+ [files to create or modify]
191
+
192
+ ### Out of Scope
193
+ [everything in future cycles — be explicit]
194
+
195
+ ## Cross-Cutting Rules
196
+ [Paste the relevant items from BOOTSTRAP.md — error handling, logging, etc.]
197
+ [Builder must follow these consistently across all cycles]
198
+
199
+ ## Acceptance Criteria
200
+ - [ ] [testable criterion 1]
201
+ - [ ] [testable criterion 2]
202
+ - [ ] [testable criterion 3]
203
+
204
+ ## After This Cycle
205
+ [What the next cycle will build — so Builder understands the seam]
206
+ [e.g. "Cycle 2 will add the API layer on top of these data models"]
207
+
208
+ ## Handoff Note
209
+ Run `/graphify .` (first cycle) or `/graphify --update` (subsequent) after Ship completes.
210
+ ```
211
+
212
+ ---
213
+
214
+ ## Bootstrapper Decision Rules
215
+
216
+ ```
217
+ User gives vague idea ("I want a todo app")
218
+ → Ask for more detail. One clarifying question only.
219
+ → Then proceed with reasonable assumptions, stated explicitly.
220
+
221
+ User gives detailed PRD
222
+ → Extract modules directly. Confirm with user before proceeding.
223
+
224
+ Module is too large (>10 files estimated)
225
+ → Split into sub-modules. Label them [module-a], [module-b].
226
+
227
+ Unclear dependency order
228
+ → Default: types first, logic second, IO third, UI last.
229
+
230
+ User wants to skip the plan and start building
231
+ → Write a minimal BOOTSTRAP.md (2-3 cycles), then proceed.
232
+ → Never skip BOOTSTRAP.md entirely — it's the memory across cycles.
233
+
234
+ Tech stack not specified
235
+ → Ask once. If no answer: use TypeScript + Node.js as default, state this.
236
+ ```
237
+
238
+ ---
239
+
240
+ ## Handoff Between Cycles
241
+
242
+ After each cycle completes (Builder → Reviewer → QA → Ship), the Orchestrator returns to the Bootstrapper **only if** more cycles remain.
243
+
244
+ Bootstrapper then:
245
+ ```
246
+ 1. Read handoff/BOOTSTRAP.md
247
+ 2. Read graphify-out/GRAPH_REPORT.md (now exists from previous cycle)
248
+ 3. Write the next cycle's brief to handoff/BRIEF.md
249
+ 4. Update BOOTSTRAP.md — mark previous cycle complete
250
+ 5. Create board task for next cycle
251
+ 6. Hand to Builder
252
+ ```
253
+
254
+ This is the critical loop: **each brief is written with knowledge of what was actually built**, not just what was planned.
255
+
256
+ ---
257
+
258
+ ## Token Rules (Bootstrapper)
259
+
260
+ ```
261
+ Read BOOTSTRAP.md once per inter-cycle session — never twice
262
+ Read GRAPH_REPORT.md once (cycles 2+) — use it to verify previous cycle output
263
+ Do not read source files — trust the graph
264
+ Keep BOOTSTRAP.md under 200 lines — it will be read every cycle
265
+ Cycle briefs: concise, no padding, testable criteria only
266
+ ```