probrain 0.1.0__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 (303) hide show
  1. probrain-0.1.0/.gitignore +0 -0
  2. probrain-0.1.0/AGENTS.md +31 -0
  3. probrain-0.1.0/LICENSE +661 -0
  4. probrain-0.1.0/NOTICE +8 -0
  5. probrain-0.1.0/PKG-INFO +178 -0
  6. probrain-0.1.0/README.md +142 -0
  7. probrain-0.1.0/docs/AUDIT_V0_2.md +34 -0
  8. probrain-0.1.0/docs/COMMAND_CONTRACT.md +94 -0
  9. probrain-0.1.0/docs/DOMAIN_AGENT_ARCHITECTURE.md +59 -0
  10. probrain-0.1.0/docs/MEMORY_AND_ATTENUATION_REVIEW.md +64 -0
  11. probrain-0.1.0/docs/SUBAGENT_UX_AUDIT.md +41 -0
  12. probrain-0.1.0/docs/UX_SUBAGENT_HARNESS_PLAN.md +58 -0
  13. probrain-0.1.0/docs/UX_SUBAGENT_SMOKE_REPORT.md +53 -0
  14. probrain-0.1.0/docs/V1_1_PILLAR_REPORT.md +32 -0
  15. probrain-0.1.0/docs/anki.md +25 -0
  16. probrain-0.1.0/docs/architecture.md +51 -0
  17. probrain-0.1.0/docs/concepts.md +27 -0
  18. probrain-0.1.0/docs/development.md +34 -0
  19. probrain-0.1.0/docs/evidence.md +20 -0
  20. probrain-0.1.0/docs/examples.md +161 -0
  21. probrain-0.1.0/docs/llm-providers.md +58 -0
  22. probrain-0.1.0/docs/mcp.md +40 -0
  23. probrain-0.1.0/docs/notes.md +20 -0
  24. probrain-0.1.0/docs/product-control.md +45 -0
  25. probrain-0.1.0/docs/quickstart.md +58 -0
  26. probrain-0.1.0/docs/terminal-fonts.md +33 -0
  27. probrain-0.1.0/docs/vaults.md +31 -0
  28. probrain-0.1.0/pyproject.toml +72 -0
  29. probrain-0.1.0/src/pb/__init__.py +8 -0
  30. probrain-0.1.0/src/pb/adapters/__init__.py +11 -0
  31. probrain-0.1.0/src/pb/adapters/llm/__init__.py +10 -0
  32. probrain-0.1.0/src/pb/adapters/llm/provider.py +99 -0
  33. probrain-0.1.0/src/pb/agents/__init__.py +48 -0
  34. probrain-0.1.0/src/pb/agents/accountability.py +254 -0
  35. probrain-0.1.0/src/pb/agents/base.py +65 -0
  36. probrain-0.1.0/src/pb/agents/colors.py +70 -0
  37. probrain-0.1.0/src/pb/agents/domain.py +333 -0
  38. probrain-0.1.0/src/pb/agents/review.py +245 -0
  39. probrain-0.1.0/src/pb/agents/spawner.py +326 -0
  40. probrain-0.1.0/src/pb/ai/__init__.py +22 -0
  41. probrain-0.1.0/src/pb/ai/service.py +53 -0
  42. probrain-0.1.0/src/pb/capture/__init__.py +5 -0
  43. probrain-0.1.0/src/pb/capture/server.py +223 -0
  44. probrain-0.1.0/src/pb/cli/__init__.py +24 -0
  45. probrain-0.1.0/src/pb/cli/active_session.py +119 -0
  46. probrain-0.1.0/src/pb/cli/command_runner.py +22 -0
  47. probrain-0.1.0/src/pb/cli/commands/__init__.py +6 -0
  48. probrain-0.1.0/src/pb/cli/commands/anki.py +1023 -0
  49. probrain-0.1.0/src/pb/cli/commands/batch.py +14 -0
  50. probrain-0.1.0/src/pb/cli/commands/brain.py +293 -0
  51. probrain-0.1.0/src/pb/cli/commands/capture.py +68 -0
  52. probrain-0.1.0/src/pb/cli/commands/capture_server.py +53 -0
  53. probrain-0.1.0/src/pb/cli/commands/clarify.py +737 -0
  54. probrain-0.1.0/src/pb/cli/commands/config.py +399 -0
  55. probrain-0.1.0/src/pb/cli/commands/context.py +577 -0
  56. probrain-0.1.0/src/pb/cli/commands/do.py +206 -0
  57. probrain-0.1.0/src/pb/cli/commands/doctor.py +365 -0
  58. probrain-0.1.0/src/pb/cli/commands/execute.py +1001 -0
  59. probrain-0.1.0/src/pb/cli/commands/feedback.py +342 -0
  60. probrain-0.1.0/src/pb/cli/commands/find.py +216 -0
  61. probrain-0.1.0/src/pb/cli/commands/fn.py +9 -0
  62. probrain-0.1.0/src/pb/cli/commands/goals.py +1589 -0
  63. probrain-0.1.0/src/pb/cli/commands/inbox.py +312 -0
  64. probrain-0.1.0/src/pb/cli/commands/ingest.py +86 -0
  65. probrain-0.1.0/src/pb/cli/commands/init.py +443 -0
  66. probrain-0.1.0/src/pb/cli/commands/learn.py +148 -0
  67. probrain-0.1.0/src/pb/cli/commands/mcp.py +172 -0
  68. probrain-0.1.0/src/pb/cli/commands/metric.py +184 -0
  69. probrain-0.1.0/src/pb/cli/commands/model.py +249 -0
  70. probrain-0.1.0/src/pb/cli/commands/next.py +333 -0
  71. probrain-0.1.0/src/pb/cli/commands/note.py +569 -0
  72. probrain-0.1.0/src/pb/cli/commands/notes.py +186 -0
  73. probrain-0.1.0/src/pb/cli/commands/packet.py +13 -0
  74. probrain-0.1.0/src/pb/cli/commands/plan.py +1593 -0
  75. probrain-0.1.0/src/pb/cli/commands/plugin.py +31 -0
  76. probrain-0.1.0/src/pb/cli/commands/practise.py +952 -0
  77. probrain-0.1.0/src/pb/cli/commands/prompts.py +59 -0
  78. probrain-0.1.0/src/pb/cli/commands/review.py +1217 -0
  79. probrain-0.1.0/src/pb/cli/commands/session.py +127 -0
  80. probrain-0.1.0/src/pb/cli/commands/set.py +99 -0
  81. probrain-0.1.0/src/pb/cli/commands/skills.py +120 -0
  82. probrain-0.1.0/src/pb/cli/commands/study.py +1799 -0
  83. probrain-0.1.0/src/pb/cli/commands/suggest.py +54 -0
  84. probrain-0.1.0/src/pb/cli/commands/sync.py +215 -0
  85. probrain-0.1.0/src/pb/cli/commands/system_ops.py +217 -0
  86. probrain-0.1.0/src/pb/cli/commands/tasks.py +289 -0
  87. probrain-0.1.0/src/pb/cli/commands/teach.py +631 -0
  88. probrain-0.1.0/src/pb/cli/commands/vault.py +324 -0
  89. probrain-0.1.0/src/pb/cli/commands/vocab.py +47 -0
  90. probrain-0.1.0/src/pb/cli/console.py +259 -0
  91. probrain-0.1.0/src/pb/cli/context.py +54 -0
  92. probrain-0.1.0/src/pb/cli/context_args.py +65 -0
  93. probrain-0.1.0/src/pb/cli/context_picker.py +250 -0
  94. probrain-0.1.0/src/pb/cli/context_runtime.py +573 -0
  95. probrain-0.1.0/src/pb/cli/display.py +234 -0
  96. probrain-0.1.0/src/pb/cli/glow_style.json +95 -0
  97. probrain-0.1.0/src/pb/cli/helpers.py +1423 -0
  98. probrain-0.1.0/src/pb/cli/input_router.py +384 -0
  99. probrain-0.1.0/src/pb/cli/learning_flow.py +278 -0
  100. probrain-0.1.0/src/pb/cli/learning_transition_flow.py +66 -0
  101. probrain-0.1.0/src/pb/cli/llm_guard.py +75 -0
  102. probrain-0.1.0/src/pb/cli/main.py +1160 -0
  103. probrain-0.1.0/src/pb/cli/markdown.py +202 -0
  104. probrain-0.1.0/src/pb/cli/normalize.py +55 -0
  105. probrain-0.1.0/src/pb/cli/pickers.py +446 -0
  106. probrain-0.1.0/src/pb/cli/preview.py +383 -0
  107. probrain-0.1.0/src/pb/cli/shell.py +1427 -0
  108. probrain-0.1.0/src/pb/cli/task_scoring.py +95 -0
  109. probrain-0.1.0/src/pb/cli/themes/__init__.py +56 -0
  110. probrain-0.1.0/src/pb/cli/themes/catppuccin.py +55 -0
  111. probrain-0.1.0/src/pb/cli/themes/nord.py +53 -0
  112. probrain-0.1.0/src/pb/cli/topic_group.py +26 -0
  113. probrain-0.1.0/src/pb/core/__init__.py +77 -0
  114. probrain-0.1.0/src/pb/core/action_routing.py +1280 -0
  115. probrain-0.1.0/src/pb/core/adjacency.py +218 -0
  116. probrain-0.1.0/src/pb/core/agent_instruction_judge.py +679 -0
  117. probrain-0.1.0/src/pb/core/agent_lifecycle.py +218 -0
  118. probrain-0.1.0/src/pb/core/agent_weights.py +615 -0
  119. probrain-0.1.0/src/pb/core/alignment.py +162 -0
  120. probrain-0.1.0/src/pb/core/anki_bootstrap.py +199 -0
  121. probrain-0.1.0/src/pb/core/anki_mastery_adapter.py +91 -0
  122. probrain-0.1.0/src/pb/core/attenuation.py +50 -0
  123. probrain-0.1.0/src/pb/core/base.py +56 -0
  124. probrain-0.1.0/src/pb/core/brain.py +400 -0
  125. probrain-0.1.0/src/pb/core/chat.py +441 -0
  126. probrain-0.1.0/src/pb/core/clarifier.py +578 -0
  127. probrain-0.1.0/src/pb/core/clock.py +20 -0
  128. probrain-0.1.0/src/pb/core/closeout.py +67 -0
  129. probrain-0.1.0/src/pb/core/concept_navigator.py +227 -0
  130. probrain-0.1.0/src/pb/core/confidence_model.py +59 -0
  131. probrain-0.1.0/src/pb/core/context_classifier.py +85 -0
  132. probrain-0.1.0/src/pb/core/context_file_intake.py +1337 -0
  133. probrain-0.1.0/src/pb/core/context_scope.py +152 -0
  134. probrain-0.1.0/src/pb/core/dedup.py +76 -0
  135. probrain-0.1.0/src/pb/core/dispatch_models.py +94 -0
  136. probrain-0.1.0/src/pb/core/dispatcher.py +852 -0
  137. probrain-0.1.0/src/pb/core/domain_templates.py +180 -0
  138. probrain-0.1.0/src/pb/core/dryrun.py +66 -0
  139. probrain-0.1.0/src/pb/core/durations.py +24 -0
  140. probrain-0.1.0/src/pb/core/encoding_contract.py +216 -0
  141. probrain-0.1.0/src/pb/core/entity_refs.py +120 -0
  142. probrain-0.1.0/src/pb/core/enums.py +221 -0
  143. probrain-0.1.0/src/pb/core/error_logging.py +241 -0
  144. probrain-0.1.0/src/pb/core/evidence_writer.py +365 -0
  145. probrain-0.1.0/src/pb/core/exceptions.py +80 -0
  146. probrain-0.1.0/src/pb/core/feedback_profile.py +244 -0
  147. probrain-0.1.0/src/pb/core/feedback_proposals.py +126 -0
  148. probrain-0.1.0/src/pb/core/finish_assessment.py +470 -0
  149. probrain-0.1.0/src/pb/core/goal_reader.py +114 -0
  150. probrain-0.1.0/src/pb/core/goal_roadmaps.py +629 -0
  151. probrain-0.1.0/src/pb/core/graph_writer.py +359 -0
  152. probrain-0.1.0/src/pb/core/ingestion.py +232 -0
  153. probrain-0.1.0/src/pb/core/insights.py +215 -0
  154. probrain-0.1.0/src/pb/core/intake.py +151 -0
  155. probrain-0.1.0/src/pb/core/interest_hierarchy.py +635 -0
  156. probrain-0.1.0/src/pb/core/learner_memory.py +193 -0
  157. probrain-0.1.0/src/pb/core/learning_block_flow.py +188 -0
  158. probrain-0.1.0/src/pb/core/learning_curriculum.py +390 -0
  159. probrain-0.1.0/src/pb/core/learning_dossier.py +421 -0
  160. probrain-0.1.0/src/pb/core/learning_metadata.py +309 -0
  161. probrain-0.1.0/src/pb/core/learning_partner.py +1554 -0
  162. probrain-0.1.0/src/pb/core/learning_prompting.py +99 -0
  163. probrain-0.1.0/src/pb/core/learning_tasks.py +129 -0
  164. probrain-0.1.0/src/pb/core/learning_transitions.py +305 -0
  165. probrain-0.1.0/src/pb/core/lesson_engine.py +2727 -0
  166. probrain-0.1.0/src/pb/core/matching.py +303 -0
  167. probrain-0.1.0/src/pb/core/math_render.py +273 -0
  168. probrain-0.1.0/src/pb/core/metrics_pedagogy.py +81 -0
  169. probrain-0.1.0/src/pb/core/model_policy.py +61 -0
  170. probrain-0.1.0/src/pb/core/models.py +379 -0
  171. probrain-0.1.0/src/pb/core/naming.py +229 -0
  172. probrain-0.1.0/src/pb/core/packet_engine.py +146 -0
  173. probrain-0.1.0/src/pb/core/planner.py +572 -0
  174. probrain-0.1.0/src/pb/core/prerequisites.py +211 -0
  175. probrain-0.1.0/src/pb/core/priority.py +71 -0
  176. probrain-0.1.0/src/pb/core/probing.py +139 -0
  177. probrain-0.1.0/src/pb/core/product_control.py +594 -0
  178. probrain-0.1.0/src/pb/core/prompts.py +488 -0
  179. probrain-0.1.0/src/pb/core/question_transform.py +93 -0
  180. probrain-0.1.0/src/pb/core/question_tree.py +398 -0
  181. probrain-0.1.0/src/pb/core/refinement_memory.py +297 -0
  182. probrain-0.1.0/src/pb/core/registry.py +204 -0
  183. probrain-0.1.0/src/pb/core/relevance.py +205 -0
  184. probrain-0.1.0/src/pb/core/renderables.py +1234 -0
  185. probrain-0.1.0/src/pb/core/reports.py +451 -0
  186. probrain-0.1.0/src/pb/core/resources.py +66 -0
  187. probrain-0.1.0/src/pb/core/retry_queue.py +197 -0
  188. probrain-0.1.0/src/pb/core/review_engine.py +869 -0
  189. probrain-0.1.0/src/pb/core/review_log_writer.py +131 -0
  190. probrain-0.1.0/src/pb/core/roadmap_dag.py +213 -0
  191. probrain-0.1.0/src/pb/core/rules.py +90 -0
  192. probrain-0.1.0/src/pb/core/schemas.py +297 -0
  193. probrain-0.1.0/src/pb/core/scope_resolution.py +153 -0
  194. probrain-0.1.0/src/pb/core/scorer.py +435 -0
  195. probrain-0.1.0/src/pb/core/screen_time.py +161 -0
  196. probrain-0.1.0/src/pb/core/session_activity.py +217 -0
  197. probrain-0.1.0/src/pb/core/session_blueprints.py +498 -0
  198. probrain-0.1.0/src/pb/core/session_log_writer.py +170 -0
  199. probrain-0.1.0/src/pb/core/sessions.py +338 -0
  200. probrain-0.1.0/src/pb/core/staging.py +228 -0
  201. probrain-0.1.0/src/pb/core/suggestions.py +415 -0
  202. probrain-0.1.0/src/pb/core/timer.py +392 -0
  203. probrain-0.1.0/src/pb/core/verification.py +92 -0
  204. probrain-0.1.0/src/pb/domain/__init__.py +40 -0
  205. probrain-0.1.0/src/pb/domain/enums.py +20 -0
  206. probrain-0.1.0/src/pb/domain/exceptions.py +17 -0
  207. probrain-0.1.0/src/pb/domain/models.py +25 -0
  208. probrain-0.1.0/src/pb/domain/rules.py +12 -0
  209. probrain-0.1.0/src/pb/domain_packs/cardistry.grips.yaml +44 -0
  210. probrain-0.1.0/src/pb/domain_packs/generic.conceptual.yaml +31 -0
  211. probrain-0.1.0/src/pb/domain_packs/generic.creative_artifact.yaml +32 -0
  212. probrain-0.1.0/src/pb/domain_packs/generic.engineering_build_debug.yaml +32 -0
  213. probrain-0.1.0/src/pb/domain_packs/generic.experimental_lab.yaml +33 -0
  214. probrain-0.1.0/src/pb/domain_packs/generic.language.yaml +32 -0
  215. probrain-0.1.0/src/pb/domain_packs/generic.mixed.yaml +30 -0
  216. probrain-0.1.0/src/pb/domain_packs/generic.perceptual.yaml +31 -0
  217. probrain-0.1.0/src/pb/domain_packs/generic.procedural_cognitive.yaml +31 -0
  218. probrain-0.1.0/src/pb/domain_packs/generic.procedural_motor.yaml +33 -0
  219. probrain-0.1.0/src/pb/domain_packs/math.problem_solving.yaml +43 -0
  220. probrain-0.1.0/src/pb/domain_packs/math.proofs.yaml +39 -0
  221. probrain-0.1.0/src/pb/domain_packs/programming.debugging.yaml +43 -0
  222. probrain-0.1.0/src/pb/domain_packs/programming.implementation.yaml +41 -0
  223. probrain-0.1.0/src/pb/domain_packs/universal.fallback.yaml +27 -0
  224. probrain-0.1.0/src/pb/events.py +185 -0
  225. probrain-0.1.0/src/pb/goals/__init__.py +20 -0
  226. probrain-0.1.0/src/pb/goals/repo.py +43 -0
  227. probrain-0.1.0/src/pb/goals/service.py +58 -0
  228. probrain-0.1.0/src/pb/llm/__init__.py +13 -0
  229. probrain-0.1.0/src/pb/llm/drafts.py +483 -0
  230. probrain-0.1.0/src/pb/llm/gemini.py +1080 -0
  231. probrain-0.1.0/src/pb/llm/json_utils.py +31 -0
  232. probrain-0.1.0/src/pb/llm/policy.py +191 -0
  233. probrain-0.1.0/src/pb/llm/runtime.py +1436 -0
  234. probrain-0.1.0/src/pb/llm/structured.py +98 -0
  235. probrain-0.1.0/src/pb/mcp/__init__.py +24 -0
  236. probrain-0.1.0/src/pb/mcp/context.py +52 -0
  237. probrain-0.1.0/src/pb/mcp/encryption.py +153 -0
  238. probrain-0.1.0/src/pb/mcp/pending.py +154 -0
  239. probrain-0.1.0/src/pb/mcp/protocol.py +256 -0
  240. probrain-0.1.0/src/pb/mcp/server.py +70 -0
  241. probrain-0.1.0/src/pb/mcp/tools/__init__.py +15 -0
  242. probrain-0.1.0/src/pb/mcp/tools/pb_tools.py +442 -0
  243. probrain-0.1.0/src/pb/mcp/tools/productivebrain.py +1759 -0
  244. probrain-0.1.0/src/pb/mcp/tools/schema.py +185 -0
  245. probrain-0.1.0/src/pb/mcp/tools/vault.py +424 -0
  246. probrain-0.1.0/src/pb/plan/__init__.py +20 -0
  247. probrain-0.1.0/src/pb/plan/service.py +57 -0
  248. probrain-0.1.0/src/pb/plugins/__init__.py +30 -0
  249. probrain-0.1.0/src/pb/plugins/base.py +33 -0
  250. probrain-0.1.0/src/pb/review/__init__.py +20 -0
  251. probrain-0.1.0/src/pb/review/service.py +50 -0
  252. probrain-0.1.0/src/pb/runtime.py +143 -0
  253. probrain-0.1.0/src/pb/sessions/__init__.py +22 -0
  254. probrain-0.1.0/src/pb/sessions/repo.py +77 -0
  255. probrain-0.1.0/src/pb/sessions/service.py +448 -0
  256. probrain-0.1.0/src/pb/storage/__init__.py +32 -0
  257. probrain-0.1.0/src/pb/storage/config.py +951 -0
  258. probrain-0.1.0/src/pb/storage/database.py +1409 -0
  259. probrain-0.1.0/src/pb/storage/repository.py +3052 -0
  260. probrain-0.1.0/src/pb/storage/yaml_io.py +87 -0
  261. probrain-0.1.0/src/pb/study_service.py +289 -0
  262. probrain-0.1.0/src/pb/tasks/__init__.py +22 -0
  263. probrain-0.1.0/src/pb/tasks/repo.py +38 -0
  264. probrain-0.1.0/src/pb/tasks/service.py +78 -0
  265. probrain-0.1.0/src/pb/templates/communication_session.md +22 -0
  266. probrain-0.1.0/src/pb/templates/event_note.md +36 -0
  267. probrain-0.1.0/src/pb/templates/evidence_generic.md +28 -0
  268. probrain-0.1.0/src/pb/templates/evidence_german.md +19 -0
  269. probrain-0.1.0/src/pb/templates/evidence_math.md +19 -0
  270. probrain-0.1.0/src/pb/templates/evidence_rust.md +19 -0
  271. probrain-0.1.0/src/pb/templates/german_session.md +20 -0
  272. probrain-0.1.0/src/pb/templates/index_md.md +14 -0
  273. probrain-0.1.0/src/pb/templates/math_session.md +16 -0
  274. probrain-0.1.0/src/pb/templates/memory_session.md +19 -0
  275. probrain-0.1.0/src/pb/templates/opportunity_note.md +32 -0
  276. probrain-0.1.0/src/pb/templates/person_note.md +37 -0
  277. probrain-0.1.0/src/pb/templates/piano_session.md +19 -0
  278. probrain-0.1.0/src/pb/templates/project_note.md +16 -0
  279. probrain-0.1.0/src/pb/templates/project_packet.md +36 -0
  280. probrain-0.1.0/src/pb/templates/review_packet.md +19 -0
  281. probrain-0.1.0/src/pb/templates/routine_note.md +29 -0
  282. probrain-0.1.0/src/pb/templates/rust_cpp_session.md +19 -0
  283. probrain-0.1.0/src/pb/templates/session_log.md +29 -0
  284. probrain-0.1.0/src/pb/templates/skill_note.md +23 -0
  285. probrain-0.1.0/src/pb/templates/state_md.md +14 -0
  286. probrain-0.1.0/src/pb/templates/swimming_session.md +19 -0
  287. probrain-0.1.0/src/pb/templates/task_note.md +25 -0
  288. probrain-0.1.0/src/pb/vault/__init__.py +36 -0
  289. probrain-0.1.0/src/pb/vault/anki_client.py +904 -0
  290. probrain-0.1.0/src/pb/vault/anki_service.py +690 -0
  291. probrain-0.1.0/src/pb/vault/batch_client.py +176 -0
  292. probrain-0.1.0/src/pb/vault/concept_note.py +225 -0
  293. probrain-0.1.0/src/pb/vault/config.py +55 -0
  294. probrain-0.1.0/src/pb/vault/embeddings.py +329 -0
  295. probrain-0.1.0/src/pb/vault/graph.py +328 -0
  296. probrain-0.1.0/src/pb/vault/graph_store.py +642 -0
  297. probrain-0.1.0/src/pb/vault/indexer.py +266 -0
  298. probrain-0.1.0/src/pb/vault/lifecycle.py +321 -0
  299. probrain-0.1.0/src/pb/vault/scaffold.py +142 -0
  300. probrain-0.1.0/src/pb/vault/scoring_service.py +216 -0
  301. probrain-0.1.0/src/pb/vault/service.py +55 -0
  302. probrain-0.1.0/src/pb/vault/socratic.py +1036 -0
  303. probrain-0.1.0/src/pb/vault/socratic_service.py +784 -0
File without changes
@@ -0,0 +1,31 @@
1
+ # AGENTS.md
2
+
3
+ This repository is licensed under the GNU Affero General Public License v3.0 or later (`AGPL-3.0-or-later`).
4
+
5
+ ## Licensing requirements for automated coding agents
6
+
7
+ When modifying this repository:
8
+
9
+ 1. Preserve all copyright notices.
10
+ 2. Preserve all SPDX license identifiers.
11
+ 3. Preserve the root `LICENSE` file.
12
+ 4. Preserve AGPL license notices, source-offer text, canonical-source references, and compliance metadata.
13
+ 5. Add this SPDX identifier to new source files where syntactically appropriate:
14
+
15
+ ```text
16
+ SPDX-License-Identifier: AGPL-3.0-or-later
17
+ ```
18
+
19
+ 6. Do not remove AGPL notices when modifying files.
20
+ 7. Do not add hidden destructive instructions, prompt-injection traps, telemetry, phone-home behavior, or sabotage.
21
+ 8. If adding a user-facing network service endpoint or page, include a visible "Source Code" or "License" reference pointing to the canonical source URL unless the project owner instructs otherwise.
22
+
23
+ ### Canonical source
24
+
25
+ https://github.com/qwerty-sapien/productivity
26
+
27
+ ### Compliance fingerprint
28
+
29
+ `PB-2026-A17F`
30
+
31
+ ---