@mriekki/project-forge 0.0.0-stage → 2.0.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 (117) hide show
  1. package/README.md +134 -2
  2. package/assets/components.json +33 -0
  3. package/assets/core/distribution.json +66 -0
  4. package/assets/deployment/distribution.json +54 -0
  5. package/assets/generated/ASSEMBLY.json +557 -0
  6. package/assets/generated/core/core/agents/coach.agent.md +69 -0
  7. package/assets/generated/core/core/agents/reviewer.agent.md +85 -0
  8. package/assets/generated/core/core/instructions/project-forge-docs.instructions.md +45 -0
  9. package/assets/generated/core/core/instructions/project-forge-workflow.instructions.md +79 -0
  10. package/assets/generated/core/core/learning/CODING_DRILLS.md +35 -0
  11. package/assets/generated/core/core/learning/DIAGRAM_GUIDE.md +59 -0
  12. package/assets/generated/core/core/learning/ENGINEERING_LEARNING_WORKBOOK.md +108 -0
  13. package/assets/generated/core/core/learning/LEARNING_MAP.md +108 -0
  14. package/assets/generated/core/core/learning/LEARNING_PROGRESS.md +39 -0
  15. package/assets/generated/core/core/learning/RESOURCE_CATALOG.md +25 -0
  16. package/assets/generated/core/core/learning/SQL_DRILLS.md +90 -0
  17. package/assets/generated/core/core/learning/SYSTEM_DESIGN_DRILLS.md +301 -0
  18. package/assets/generated/core/core/process/COACHING_GUIDE.md +92 -0
  19. package/assets/generated/core/core/process/DATABASE_LEARNING_WORKBENCH.md +397 -0
  20. package/assets/generated/core/core/process/DEPLOYMENT_ENABLEMENT.md +166 -0
  21. package/assets/generated/core/core/process/GUIDED_NEXT_STEPS.md +48 -0
  22. package/assets/generated/core/core/process/HUMAN_GATES.md +83 -0
  23. package/assets/generated/core/core/process/INTERACTIVE_SESSION_GUIDE.md +64 -0
  24. package/assets/generated/core/core/process/PROJECT_DOCUMENTATION_FRAMEWORK.md +326 -0
  25. package/assets/generated/core/core/process/PROJECT_FORGE_ENGINEERING_GUIDE.md +308 -0
  26. package/assets/generated/core/core/process/PR_WORKFLOW.md +55 -0
  27. package/assets/generated/core/core/process/SETUP_ACCEPTANCE_CHECKLIST.md +72 -0
  28. package/assets/generated/core/core/process/SYSTEM_DESIGN_LEARNING_WORKBENCH.md +520 -0
  29. package/assets/generated/core/core/process/WORK_ITEM_MODEL.md +56 -0
  30. package/assets/generated/core/core/skills/cleanup-branches/SKILL.md +190 -0
  31. package/assets/generated/core/core/skills/coach/SKILL.md +174 -0
  32. package/assets/generated/core/core/skills/code-walkthrough/SKILL.md +197 -0
  33. package/assets/generated/core/core/skills/core-sync/SKILL.md +178 -0
  34. package/assets/generated/core/core/skills/db-lab/SKILL.md +245 -0
  35. package/assets/generated/core/core/skills/define-feature/SKILL.md +144 -0
  36. package/assets/generated/core/core/skills/deliver/SKILL.md +397 -0
  37. package/assets/generated/core/core/skills/deploy/SKILL.md +188 -0
  38. package/assets/generated/core/core/skills/deployment-readiness/SKILL.md +234 -0
  39. package/assets/generated/core/core/skills/developer-env-mode/SKILL.md +231 -0
  40. package/assets/generated/core/core/skills/docs/SKILL.md +116 -0
  41. package/assets/generated/core/core/skills/grill-me/SKILL.md +77 -0
  42. package/assets/generated/core/core/skills/grill-with-docs/SKILL.md +90 -0
  43. package/assets/generated/core/core/skills/learning-review/SKILL.md +90 -0
  44. package/assets/generated/core/core/skills/next-step/SKILL.md +221 -0
  45. package/assets/generated/core/core/skills/progress/SKILL.md +207 -0
  46. package/assets/generated/core/core/skills/project-forge-update/SKILL.md +228 -0
  47. package/assets/generated/core/core/skills/pull-latest/SKILL.md +166 -0
  48. package/assets/generated/core/core/skills/refine-requirements/SKILL.md +207 -0
  49. package/assets/generated/core/core/skills/setup/SKILL.md +362 -0
  50. package/assets/generated/core/core/skills/start-work/SKILL.md +190 -0
  51. package/assets/generated/core/core/skills/system-lab/SKILL.md +333 -0
  52. package/assets/generated/core/core/skills/tear-down/SKILL.md +140 -0
  53. package/assets/generated/core/core/skills/upstream-fix/SKILL.md +221 -0
  54. package/assets/generated/core/core/skills/wait-what/SKILL.md +86 -0
  55. package/assets/generated/core/core/templates/ADR_TEMPLATE.md +41 -0
  56. package/assets/generated/core/core/templates/FEATURE_BRIEF_TEMPLATE.md +27 -0
  57. package/assets/generated/core/core/templates/PRODUCT_BRIEF_TEMPLATE.md +27 -0
  58. package/assets/generated/core/core/templates/PULL_REQUEST_TEMPLATE.md +37 -0
  59. package/assets/generated/core/core/templates/REQUIREMENTS_TEMPLATE.md +17 -0
  60. package/assets/generated/core/profiles/greenfield/project-forge-workspace.json +12 -0
  61. package/assets/generated/core/tools/db_lab/sqlite_workbench.py +463 -0
  62. package/assets/generated/core/tools/docs_site/docs_site.py +512 -0
  63. package/assets/generated/core/tools/package/check_baseline.py +102 -0
  64. package/assets/generated/core/tools/package/check_upstream.py +171 -0
  65. package/assets/generated/core/tools/system_lab/system_workbench.py +243 -0
  66. package/assets/generated/deployment/distribution/project-forge-deploy.py +8 -0
  67. package/assets/generated/deployment/docs/DEVELOPER_ENVIRONMENTS.md +335 -0
  68. package/assets/generated/deployment/docs/ENVIRONMENT_PROOF.md +95 -0
  69. package/assets/generated/deployment/docs/WORKSPACE_INSTANCES.md +154 -0
  70. package/assets/generated/deployment/docs/images/developer-environment-journey.svg +56 -0
  71. package/assets/generated/deployment/docs/images/personal-environment-architecture.svg +54 -0
  72. package/assets/generated/deployment/docs/images/poc-environment-model.svg +61 -0
  73. package/assets/generated/deployment/src/project_forge_deployment/__init__.py +3 -0
  74. package/assets/generated/deployment/src/project_forge_deployment/__main__.py +3 -0
  75. package/assets/generated/deployment/src/project_forge_deployment/app_cli.py +163 -0
  76. package/assets/generated/deployment/src/project_forge_deployment/app_runtime.py +455 -0
  77. package/assets/generated/deployment/src/project_forge_deployment/app_runtime_remote.py +416 -0
  78. package/assets/generated/deployment/src/project_forge_deployment/app_runtime_workstation.py +136 -0
  79. package/assets/generated/deployment/src/project_forge_deployment/box_platform.py +208 -0
  80. package/assets/generated/deployment/src/project_forge_deployment/box_platform_assets.py +100 -0
  81. package/assets/generated/deployment/src/project_forge_deployment/box_platform_remote.py +271 -0
  82. package/assets/generated/deployment/src/project_forge_deployment/cli.py +437 -0
  83. package/assets/generated/deployment/src/project_forge_deployment/doctor.py +121 -0
  84. package/assets/generated/deployment/src/project_forge_deployment/entrypoint.py +37 -0
  85. package/assets/generated/deployment/src/project_forge_deployment/environment_cli.py +271 -0
  86. package/assets/generated/deployment/src/project_forge_deployment/environment_probe.py +228 -0
  87. package/assets/generated/deployment/src/project_forge_deployment/errors.py +5 -0
  88. package/assets/generated/deployment/src/project_forge_deployment/home_lab.py +328 -0
  89. package/assets/generated/deployment/src/project_forge_deployment/image_transfer.py +105 -0
  90. package/assets/generated/deployment/src/project_forge_deployment/keys.py +171 -0
  91. package/assets/generated/deployment/src/project_forge_deployment/local_cli.py +189 -0
  92. package/assets/generated/deployment/src/project_forge_deployment/local_runtime.py +526 -0
  93. package/assets/generated/deployment/src/project_forge_deployment/local_spec.py +82 -0
  94. package/assets/generated/deployment/src/project_forge_deployment/local_sqlite.py +205 -0
  95. package/assets/generated/deployment/src/project_forge_deployment/portable_profile.py +181 -0
  96. package/assets/generated/deployment/src/project_forge_deployment/profile_migration.py +70 -0
  97. package/assets/generated/deployment/src/project_forge_deployment/profile_repository.py +348 -0
  98. package/assets/generated/deployment/src/project_forge_deployment/profiles.py +204 -0
  99. package/assets/generated/deployment/src/project_forge_deployment/registry_access.py +114 -0
  100. package/assets/generated/deployment/src/project_forge_deployment/registry_cli.py +51 -0
  101. package/assets/generated/deployment/src/project_forge_deployment/route_registry.py +367 -0
  102. package/assets/generated/deployment/src/project_forge_deployment/route_registry_remote.py +443 -0
  103. package/assets/generated/deployment/src/project_forge_deployment/security.py +290 -0
  104. package/assets/generated/deployment/src/project_forge_deployment/sqlite_adapter.py +335 -0
  105. package/assets/generated/deployment/src/project_forge_deployment/sqlite_adapter_remote.py +340 -0
  106. package/assets/generated/deployment/src/project_forge_deployment/sqlite_cli.py +86 -0
  107. package/assets/generated/deployment/src/project_forge_deployment/sqlite_import_recovery.py +437 -0
  108. package/assets/generated/deployment/src/project_forge_deployment/ssh.py +119 -0
  109. package/assets/generated/deployment/src/project_forge_deployment/teardown.py +300 -0
  110. package/assets/generated/deployment/src/project_forge_deployment/teardown_cli.py +139 -0
  111. package/assets/generated/deployment/src/project_forge_deployment/teardown_remote.py +100 -0
  112. package/assets/generated/deployment/src/project_forge_deployment/trust.py +278 -0
  113. package/bin/project-forge.mjs +9 -0
  114. package/package.json +31 -4
  115. package/src/cli.mjs +150 -0
  116. package/src/engine.mjs +243 -0
  117. package/src/package-data.mjs +18 -0
@@ -0,0 +1,64 @@
1
+ # Continuous Interactive Sessions
2
+
3
+ The following modes are continuous after the human explicitly enters them:
4
+
5
+ ```text
6
+ /grill-me
7
+ /grill-with-docs
8
+ /refine-requirements
9
+ /coach
10
+ /learning-review
11
+ /deployment-readiness
12
+ ```
13
+
14
+ Default cadence:
15
+
16
+ ```text
17
+ question
18
+ → human answer
19
+ → critique / teach / reconcile / update as permitted
20
+ → next material question
21
+ ```
22
+
23
+ ## Question presentation
24
+
25
+ Choose the question shape based on what the interaction is trying to learn or decide.
26
+
27
+ When a material question has a reasonable bounded answer space and the human is choosing or confirming a decision, prefer a concise choice-first presentation:
28
+
29
+ - offer a small set of plausible choices, normally 3-6;
30
+ - mark a materially preferred option as `RECOMMENDED` when current evidence or repository guidance justifies it;
31
+ - include `Other / specify` when the choices are not exhaustive;
32
+ - include `Not sure — recommend one` when the human can reasonably delegate the choice;
33
+ - accept a choice label/text or a free-form answer;
34
+ - treat choices as interaction aids, not additional requirements.
35
+
36
+ Keep questions open-ended when predefined choices would weaken the purpose of the interaction. This includes:
37
+
38
+ - user-authored problem/outcome/workflow framing where the human's own wording matters;
39
+ - factual values such as a hostname, IP address, path, account, observed error, or environment-specific fact;
40
+ - learning/understanding assessment where the human should explain or reason in their own words;
41
+ - debugging, design, or grilling questions whose purpose is to expose the human's reasoning before options or hints are introduced.
42
+
43
+ If an open-ended reasoning question stalls, options/hints may be introduced as scaffolding after the initial attempt. Do not manufacture bounded choices merely to make every question look structured.
44
+
45
+ For deployment readiness, discover existing local/repository configuration before asking factual questions. Show known simple environment/machine facts for confirmation and ask only for missing or conflicting facts. Do not lead with deployment-tool implementation identifiers such as `targetName`, SSH aliases, profile paths, or trust-file paths when the workflow can discover, reuse, or derive them.
46
+
47
+ Do not repeatedly ask `Do you want to continue?`.
48
+
49
+ Stop when:
50
+ - the human says stop/done/pause,
51
+ - the objective naturally completes,
52
+ - no material questions remain,
53
+ - a genuine approval/scope/action gate appears,
54
+ - the human switches workflows.
55
+
56
+ Continuous conversation never implies permission for unrelated file, Git, external-system, remote, or production writes.
57
+
58
+ For modifying sessions such as requirement refinement or deployment-readiness documentation, one explicit session-level authorization may cover focused updates within the defined scope; do not re-ask after every answer.
59
+
60
+ Compound action skills may also define their own bounded authorization. In particular, manually invoking `/deliver` after its prerequisites are satisfied authorizes routine branch/stage/commit/push/PR/CI mechanics within the accepted delivery scope. Do not interrupt that compound action with repeated ceremonial permission prompts. `/deliver` still stops for changed evidence, ambiguity/risk, and the explicit merge/finalize decision.
61
+
62
+ If a tool/channel interruption leaves a compound workflow partially complete, a later invocation should inspect current state and resume from the furthest safe point rather than assuming nothing happened or requiring the same routine authorization again.
63
+
64
+ `/wait-what` is different. It is a one-turn, read-only communication repair for the immediately preceding explanation. It re-establishes context and clarity, then returns control to the current workflow without silently continuing a pending action or approval gate.
@@ -0,0 +1,326 @@
1
+ # Project Forge Project Documentation Framework
2
+
3
+ Project Forge project documentation is a small, evidence-aware engineering system rather than a pile of unrelated Markdown files.
4
+
5
+ ## Goals
6
+
7
+ - Keep a short, obvious root-level front door.
8
+ - Keep Markdown as the canonical human-readable source.
9
+ - Preserve one authority for product and work-item requirements.
10
+ - Separate project-owned prose from Project Forge-managed process material and disposable generated evidence.
11
+ - Make architecture, database, operations, learning, and decision context easy to find.
12
+ - Provide a local documentation website without requiring a documentation framework dependency.
13
+ - Make stale generated views visible instead of asking developers to maintain diagrams manually.
14
+ - Keep documentation support non-blocking for normal engineering delivery.
15
+
16
+ ## Canonical shape
17
+
18
+ Greenfield POCs should normally converge on:
19
+
20
+ ```text
21
+ README.md
22
+ PROJECT_BRIEF.md
23
+
24
+ docs/
25
+ index.md
26
+ project-forge-docs.json
27
+
28
+ product/
29
+ PRODUCT_BRIEF.md
30
+ IMPLEMENTATION_ROADMAP.md
31
+
32
+ architecture/
33
+ OVERVIEW.md
34
+ DATA.md
35
+ RUNTIME_FLOWS.md
36
+ decisions/
37
+ README.md
38
+ ADR-*.md
39
+
40
+ engineering/
41
+ DEVELOPMENT.md
42
+ TESTING.md
43
+ DELIVERY.md
44
+
45
+ operations/
46
+ ENVIRONMENTS.md
47
+ DEPLOYMENT.md
48
+ TROUBLESHOOTING.md
49
+
50
+ learning/
51
+ OVERVIEW.md
52
+ DATABASE.md
53
+ SYSTEM_DESIGN.md
54
+
55
+ generated/
56
+ README.md
57
+
58
+ project-forge/
59
+ PROJECT_FORGE_ENGINEERING_GUIDE.md
60
+
61
+ tools/
62
+ project-forge-docs/
63
+ docs-site.py
64
+ ```
65
+
66
+ The exact set may vary for an adopted repository, but ownership and authority rules should remain explicit.
67
+
68
+ ## Root-level front doors
69
+
70
+ ### `README.md`
71
+
72
+ Keep it short. It should answer:
73
+
74
+ - what the repository is;
75
+ - where to start;
76
+ - how to set up/run the project;
77
+ - where the authoritative product/work-item docs live;
78
+ - how to open project documentation;
79
+ - what the first approved work item is when applicable.
80
+
81
+ ### `PROJECT_BRIEF.md`
82
+
83
+ `PROJECT_BRIEF.md` is the integrated project briefing and navigation surface. It may summarize approved product scope, stack, environments, initial work items, learning goals, and important documentation links.
84
+
85
+ It is **not** a second requirements authority. In a normal Project Forge greenfield POC:
86
+
87
+ - `docs/product/PRODUCT_BRIEF.md` remains product authority;
88
+ - approved work-item briefs/requirements remain work-item authority;
89
+ - `PROJECT_BRIEF.md` summarizes and links to those authorities.
90
+
91
+ If a repository already has a different accepted authority model, preserve it.
92
+
93
+ ## Ownership classes
94
+
95
+ Each document in `docs/project-forge-docs.json` should identify one of these ownership classes.
96
+
97
+ ### `project`
98
+
99
+ Project-owned material. It may be created by Bootstrap and then evolve with the application.
100
+
101
+ Examples:
102
+
103
+ - `PROJECT_BRIEF.md`
104
+ - product/architecture/engineering/operations/learning docs
105
+ - ADRs
106
+
107
+ Do not overwrite project-owned prose during Project Forge package updates merely because a newer template exists.
108
+
109
+ ### `project-forge`
110
+
111
+ Reusable Project Forge-managed material whose source lives in a reusable platform repository and whose accepted bytes/provenance are controlled through the package/baseline mechanism.
112
+
113
+ Examples:
114
+
115
+ - Project Forge process guides
116
+ - `docs/project-forge/PROJECT_FORGE_ENGINEERING_GUIDE.md`
117
+ - the local documentation viewer
118
+ - reusable templates
119
+
120
+ ### `generated-evidence`
121
+
122
+ Disposable projections reconstructed from current repository/database evidence.
123
+
124
+ Examples:
125
+
126
+ - System Lab workbench snapshots
127
+ - DB Lab workbench snapshots
128
+ - local documentation site output
129
+
130
+ Generated evidence is not authoritative prose and should not normally be committed. The default local cache is:
131
+
132
+ ```text
133
+ .project-forge/docs-cache/
134
+ ```
135
+
136
+ ## Documentation manifest
137
+
138
+ `docs/project-forge-docs.json` is a small project-owned index, not a competing content store.
139
+
140
+ Recommended schema:
141
+
142
+ ```json
143
+ {
144
+ "schemaVersion": 1,
145
+ "site": {
146
+ "title": "Example POC",
147
+ "entry": "PROJECT_BRIEF.md"
148
+ },
149
+ "documents": [
150
+ {
151
+ "path": "PROJECT_BRIEF.md",
152
+ "section": "Overview",
153
+ "type": "project-brief",
154
+ "ownership": "project",
155
+ "authority": "navigation"
156
+ },
157
+ {
158
+ "path": "docs/product/PRODUCT_BRIEF.md",
159
+ "section": "Product",
160
+ "type": "product-brief",
161
+ "ownership": "project",
162
+ "authority": "product"
163
+ },
164
+ {
165
+ "path": "docs/project-forge/PROJECT_FORGE_ENGINEERING_GUIDE.md",
166
+ "section": "Project Forge",
167
+ "type": "platform-guide",
168
+ "ownership": "project-forge",
169
+ "authority": "reference"
170
+ }
171
+ ]
172
+ }
173
+ ```
174
+
175
+ The site renderer should tolerate missing optional documents so Bootstrap and reusable-package application can remain separate deterministic phases.
176
+
177
+ ## Local documentation website
178
+
179
+ The reusable viewer is intentionally dependency-free and local-only.
180
+
181
+ Normal command:
182
+
183
+ ```powershell
184
+ python .\tools\project-forge-docs\docs-site.py serve --root .
185
+ ```
186
+
187
+ Build-only mode:
188
+
189
+ ```powershell
190
+ python .\tools\project-forge-docs\docs-site.py build --root . --out .\.project-forge\docs-site
191
+ ```
192
+
193
+ The builder protects existing data: it refuses the repository root, paths overlapping either lab cache, linked paths, and non-empty output directories without its `.project-forge-docs-site` ownership marker. Existing unmarked output from an older viewer must be inspected and moved or a new output path selected before rebuilding.
194
+
195
+ The viewer should:
196
+
197
+ - bind to loopback only;
198
+ - discover `docs/project-forge-docs.json` when present;
199
+ - fall back to safe Markdown discovery for adopted repositories;
200
+ - provide section navigation and full-text search;
201
+ - render common Markdown without external dependencies;
202
+ - render the simple `flowchart` Mermaid subset used by the Project Forge engineering guide and preserve unsupported Mermaid source visibly rather than failing;
203
+ - show document ownership/authority metadata when known;
204
+ - show the current Git commit when available;
205
+ - show DB/System Lab cache availability and freshness where evidence permits;
206
+ - never mutate project prose merely by being opened.
207
+
208
+ The HTML/site is a projection. Markdown remains canonical.
209
+
210
+ ## Lab integration
211
+
212
+ Use the standard local cache paths:
213
+
214
+ ```text
215
+ .project-forge/docs-cache/system/
216
+ .project-forge/docs-cache/database/
217
+ ```
218
+
219
+ ### System Lab
220
+
221
+ Because System Lab can reconstruct its model from repository evidence, the docs viewer may best-effort prepare the current System Lab projection when it starts and the tool is available:
222
+
223
+ ```powershell
224
+ python .\tools\project-forge-system-lab\system-workbench.py export --repo . --out .\.project-forge\docs-cache\system
225
+ ```
226
+
227
+ This is read-only and non-blocking.
228
+
229
+ ### DB Lab
230
+
231
+ Do not guess a database path. The docs viewer may surface an existing DB Lab projection and the `/db-lab` entry point. Automatic DB Lab generation is allowed only when a safe local development/test database path is already explicit in project configuration/evidence.
232
+
233
+ Never create a database, apply migrations, mutate data, or inspect Production to make documentation look current.
234
+
235
+ ## Freshness model
236
+
237
+ Generated views should report one of:
238
+
239
+ ```text
240
+ CURRENT
241
+ STALE
242
+ AVAILABLE / FRESHNESS UNKNOWN
243
+ NOT GENERATED
244
+ ```
245
+
246
+ For System Lab, compare its recorded repository commit/fingerprint with the current checkout when possible.
247
+
248
+ For DB Lab, freshness is evidence-dependent. Do not call a DB projection current merely because the HTML exists when no repository/schema binding proves it.
249
+
250
+ Tracked narrative docs are not automatically rewritten based on file timestamps. Instead, delivery/change analysis should identify likely documentation impact.
251
+
252
+ ## Delivery-completion behavior
253
+
254
+ After engineering delivery is complete, classify documentation impact separately from delivery state.
255
+
256
+ Examples of likely impact:
257
+
258
+ - public API/contract change → architecture/API/runtime docs;
259
+ - new service/dependency/queue/cache → architecture/runtime/system evidence;
260
+ - schema/migration/query/index change → data/database evidence;
261
+ - environment/deployment change → operations docs;
262
+ - new architectural tradeoff → possible ADR;
263
+ - test strategy or developer workflow change → engineering docs.
264
+
265
+ Safe generated projections may be rebuilt automatically. Human/project-authored prose should not be silently rewritten merely because the code changed.
266
+
267
+ A useful completion surface is:
268
+
269
+ ```text
270
+ DOCUMENTATION IMPACT
271
+
272
+ ✓ Project brief: no material change detected
273
+ ★ System evidence: changed; current projection prepared
274
+ ★ Database evidence: changed; /db-lab recommended
275
+ ○ ADR consideration: new synchronous external dependency introduced
276
+ ```
277
+
278
+ This is informative and non-blocking.
279
+
280
+ ## ADRs
281
+
282
+ Use ADRs for consequential architecture decisions that benefit from preserving context and tradeoffs.
283
+
284
+ An ADR should record:
285
+
286
+ - status;
287
+ - context;
288
+ - decision;
289
+ - alternatives considered;
290
+ - tradeoffs/consequences;
291
+ - evidence/links.
292
+
293
+ Do not create an ADR for every implementation detail. Do not silently invent a decision on the human's behalf. When delivery evidence reveals a material architectural choice without an ADR, surface the opportunity rather than auto-approving prose.
294
+
295
+ ## Evidence and safety
296
+
297
+ - Never put secret values in tracked Markdown or generated site data.
298
+ - Do not infer runtime behavior from architecture prose alone.
299
+ - Label architecture claims with evidence provenance where appropriate.
300
+ - Repository and runtime/database evidence outrank stale generated diagrams.
301
+ - A generated site build failure must not invalidate otherwise successful engineering delivery.
302
+ - Production access is never required merely to render documentation.
303
+
304
+ ## Relationship to learning
305
+
306
+ Project documentation is a learning surface, not just reference material.
307
+
308
+ The site should keep these entry points visible when available:
309
+
310
+ ```text
311
+ /db-lab
312
+ /system-lab
313
+ /code-walkthrough
314
+ /learning-review
315
+ /coach
316
+ ```
317
+
318
+ System/database diagrams remain current-by-default projections. The learner should think “open the lab,” not “maintain the diagram.”
319
+
320
+ ## Relationship to Project Forge updates
321
+
322
+ Project Forge-managed files may be updated through the controlled Project Forge package/baseline path.
323
+
324
+ Project-owned docs and ADRs must be preserved unless a change explicitly owns them. Generated evidence/cache is reconstructed instead of merged.
325
+
326
+ This keeps package updates deterministic without turning documentation into a regeneration hazard.