@a-company/paradigm 5.38.0 → 6.0.4
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/dist/{accept-orchestration-OATWIRHP.js → accept-orchestration-TIXUQQGR.js} +1 -1
- package/dist/add-UOR4INIV.js +8 -0
- package/dist/agent-MB3H5EZA.js +33 -0
- package/dist/{agent-loader-RIVI6QPP.js → agent-loader-VGBPL3TH.js} +1 -1
- package/dist/{agent-loader-RJRVO5GQ.js → agent-loader-W3RQJVW7.js} +1 -1
- package/dist/{agents-suggest-HYTFMQD3.js → agents-suggest-IKY6VD2R.js} +1 -1
- package/dist/{ambient-WTLYUAQM.js → ambient-AI42BOM5.js} +12 -12
- package/dist/{ambient-76YMUA5Q.js → ambient-FNNFB4AP.js} +1 -1
- package/dist/{assess-UFPYEJKP.js → assess-63WXHWJV.js} +1 -1
- package/dist/authority-FA3HLEOA.js +2 -0
- package/dist/{calibration-OLJYB5HN.js → calibration-BDHGYJOK.js} +1 -1
- package/dist/chunk-23T6UG73.js +605 -0
- package/dist/{chunk-4L7665QV.js → chunk-2AU5L333.js} +1 -1
- package/dist/{chunk-BOYQAMGC.js → chunk-4N56FRNE.js} +1 -1
- package/dist/{chunk-5QOCKWK5.js → chunk-4PSD5R7N.js} +2 -2
- package/dist/{chunk-MQIG6SMF.js → chunk-6QXBXZF6.js} +1 -1
- package/dist/{chunk-ORDKEGII.js → chunk-AMLD7IYC.js} +1 -1
- package/dist/{chunk-3DZK54RU.js → chunk-DBEWOKD6.js} +32 -7
- package/dist/{chunk-AGFPVSX5.js → chunk-F6E3HW45.js} +1 -1
- package/dist/{chunk-X3U3IGYT.js → chunk-GD4F2HC6.js} +2 -2
- package/dist/chunk-GRZQIKST.js +2 -0
- package/dist/{chunk-HOBHJPTL.js → chunk-IOVHF4SR.js} +1 -1
- package/dist/{chunk-RLCH7DXQ.js → chunk-K7X3Z3GL.js} +1 -1
- package/dist/{chunk-74SGKSRQ.js → chunk-KAFQA7HV.js} +2 -2
- package/dist/{chunk-NEJ4ZLCY.js → chunk-LAYBUKMB.js} +1 -1
- package/dist/{chunk-4VKSEOXZ.js → chunk-LPBCQM5Y.js} +3 -3
- package/dist/chunk-Q527BPUF.js +2 -0
- package/dist/{chunk-AO7ZSRME.js → chunk-TQOT2LBO.js} +2 -2
- package/dist/{chunk-3XGNXXCT.js → chunk-UZ5H7K6Q.js} +1 -1
- package/dist/chunk-VIG5LSGZ.js +2 -0
- package/dist/chunk-VNIX5KBT.js +3 -0
- package/dist/chunk-WXF5VFB4.js +111 -0
- package/dist/chunk-XQLO5URP.js +11 -0
- package/dist/{chunk-DOCDDDTD.js → chunk-YNDPSWOE.js} +5 -5
- package/dist/chunk-Z5QW6USC.js +2 -0
- package/dist/{compliance-D7GD6ZYC.js → compliance-J3VOV445.js} +1 -1
- package/dist/config-schema-FLHRVZMI.js +2 -0
- package/dist/{context-audit-XRPT3OU2.js → context-audit-JVCA6GSV.js} +1 -1
- package/dist/{cursorrules-U5O4G5T4.js → cursorrules-ZXPXPZ3P.js} +1 -1
- package/dist/decision-loader-HELL2AMX.js +2 -0
- package/dist/{delete-P5VULXR4.js → delete-2C6ALLYY.js} +1 -1
- package/dist/{diff-YGHBIJY5.js → diff-75MABOSL.js} +1 -1
- package/dist/{dist-KGRCLBJP-2QAPFYNF.js → dist-GQ42YS5N-4HIJZVBB.js} +10 -10
- package/dist/{docs-USDAF26F.js → docs-TSAAS4W3.js} +1 -1
- package/dist/doctor-L5XZENCF.js +2 -0
- package/dist/{edit-GUU3HBVW.js → edit-P3MDAZLU.js} +1 -1
- package/dist/{flow-FVZR3YJ4.js → flow-BGXOVE2V.js} +1 -1
- package/dist/{hooks-TFMMMB2H.js → hooks-KUEE5KMM.js} +1 -1
- package/dist/index.js +6 -6
- package/dist/init-M44SO65G.js +2 -0
- package/dist/{init-XYB62Q3X.js → init-V4KSEKPK.js} +1 -1
- package/dist/{list-YKIQNKGB.js → list-2XIWUEMA.js} +1 -1
- package/dist/list-CFHINXIS.js +12 -0
- package/dist/lore-loader-D2ISOASW.js +2 -0
- package/dist/lore-loader-PXFKMKAN.js +2 -0
- package/dist/mcp.js +4 -4
- package/dist/metrics-UESGUHTA.js +2 -0
- package/dist/{migrate-Z5UQN57G.js → migrate-ZPNYDNM4.js} +1 -1
- package/dist/migrate-assessments-YSITX7KM.js +4 -0
- package/dist/migrate-decisions-NPLQOEEH.js +6 -0
- package/dist/migrate-plsat-EM2ACIQ3.js +6 -0
- package/dist/migration-notices-BHLEYC4T.js +4 -0
- package/dist/{nomination-engine-EALA5MGI.js → nomination-engine-NCLTGMAK.js} +1 -1
- package/dist/{notebook-loader-PXNRBBXD.js → notebook-loader-3J2OFMS3.js} +1 -1
- package/dist/{orchestrate-M5PBZBJQ.js → orchestrate-K4KBTBYK.js} +1 -1
- package/dist/{platform-server-DNAMH4YI.js → platform-server-ANOALDPL.js} +1 -1
- package/dist/{portal-check-ZMLVBIGW.js → portal-check-DV2VSJ5E.js} +1 -1
- package/dist/portal-compliance-JONQ4SOP.js +2 -0
- package/dist/{probe-3FTG6LYO.js → probe-5HAXULAD.js} +1 -1
- package/dist/{providers-AWA7WLLM.js → providers-TBPOE4DI.js} +1 -1
- package/dist/quiz-WYIZJG5K.js +10 -0
- package/dist/{record-YXPB34MY.js → record-N3VNYYKJ.js} +1 -1
- package/dist/registry-OUTA3DXW.js +20 -0
- package/dist/reindex-IZCD2JGD.js +2 -0
- package/dist/{retag-N5XF3KXP.js → retag-72R2OSZV.js} +1 -1
- package/dist/{review-77QI6VOC.js → review-2INNWLTW.js} +1 -1
- package/dist/{sentinel-HYAZ3CO5.js → sentinel-EFPEX246.js} +1 -1
- package/dist/{sentinel-bridge-VR357PKL.js → sentinel-bridge-UR2MKARY.js} +1 -1
- package/dist/{serve-U47GULB6.js → serve-3FMUWW5K.js} +1 -1
- package/dist/serve-OQYUO7CR.js +12 -0
- package/dist/{server-4YNUIK4W.js → server-4D77LCST.js} +1 -1
- package/dist/server-FGUL2FWQ.js +7 -0
- package/dist/session-tracker-HHNY6J4I.js +2 -0
- package/dist/{session-work-log-ZP45TREI.js → session-work-log-MEJ33TYD.js} +1 -1
- package/dist/{session-work-log-PAKXOFGL.js → session-work-log-ZVVJGO7X.js} +1 -1
- package/dist/{setup-FEWSYS3Y.js → setup-ZSEC72BS.js} +1 -1
- package/dist/shift-WGMZGWOC.js +60 -0
- package/dist/{show-PJ5LFLIL.js → show-JH7LJ5MT.js} +1 -1
- package/dist/show-WVHAL4VU.js +7 -0
- package/dist/{spawn-M5BAV252.js → spawn-KKDDR6UR.js} +1 -1
- package/dist/status-S7Z5FVIE.js +6 -0
- package/dist/{summary-PYTEIJ4U.js → summary-WLI3NF4G.js} +2 -2
- package/dist/{sweep-HU74OPVW.js → sweep-7TZFN5NS.js} +1 -1
- package/dist/sync-55U6QPIA.js +2 -0
- package/dist/{sync-llms-7CAI74QL.js → sync-llms-GF7DDQDI.js} +1 -1
- package/dist/{team-PDK64JXI.js → team-2LGZQRP4.js} +1 -1
- package/dist/{timeline-K3ZFKJ3R.js → timeline-RK7O2SCM.js} +1 -1
- package/dist/tools-4RRFTU5H.js +2 -0
- package/dist/university-content/notes/N-para-001-build-something.md +126 -0
- package/dist/university-content/notes/N-para-001-meet-the-team.md +85 -0
- package/dist/university-content/notes/N-para-001-shift-setup.md +74 -0
- package/dist/university-content/notes/N-para-101-component-types.md +99 -0
- package/dist/university-content/notes/N-para-101-first-steps.md +134 -0
- package/dist/university-content/notes/N-para-101-five-symbols.md +128 -0
- package/dist/university-content/notes/N-para-101-paradigm-logger.md +89 -0
- package/dist/university-content/notes/N-para-101-portal-yaml.md +112 -0
- package/dist/university-content/notes/N-para-101-project-structure.md +143 -0
- package/dist/university-content/notes/N-para-101-purpose-files.md +121 -0
- package/dist/university-content/notes/N-para-101-tags-and-classification.md +93 -0
- package/dist/university-content/notes/N-para-101-welcome.md +51 -0
- package/dist/university-content/notes/N-para-201-architecture-review.md +175 -0
- package/dist/university-content/notes/N-para-201-aspect-graph.md +79 -0
- package/dist/university-content/notes/N-para-201-aspects-and-anchors.md +112 -0
- package/dist/university-content/notes/N-para-201-component-patterns.md +138 -0
- package/dist/university-content/notes/N-para-201-cross-cutting-concerns.md +145 -0
- package/dist/university-content/notes/N-para-201-disciplines.md +187 -0
- package/dist/university-content/notes/N-para-201-flows-deep-dive.md +119 -0
- package/dist/university-content/notes/N-para-201-gates-deep-dive.md +165 -0
- package/dist/university-content/notes/N-para-201-portal-protocol.md +133 -0
- package/dist/university-content/notes/N-para-201-signal-patterns.md +159 -0
- package/dist/university-content/notes/N-para-201-symbol-naming.md +149 -0
- package/dist/university-content/notes/N-para-301-context-management.md +53 -0
- package/dist/university-content/notes/N-para-301-decisions.md +99 -0
- package/dist/university-content/notes/N-para-301-doctor-and-validation.md +70 -0
- package/dist/university-content/notes/N-para-301-enforcement-levels.md +102 -0
- package/dist/university-content/notes/N-para-301-fragility-tracking.md +50 -0
- package/dist/university-content/notes/N-para-301-history-system.md +42 -0
- package/dist/university-content/notes/N-para-301-navigation-system.md +55 -0
- package/dist/university-content/notes/N-para-301-operations-review.md +55 -0
- package/dist/university-content/notes/N-para-301-paradigm-shift.md +93 -0
- package/dist/university-content/notes/N-para-301-protocols.md +113 -0
- package/dist/university-content/notes/N-para-301-ripple-analysis.md +53 -0
- package/dist/university-content/notes/N-para-301-sentinel-observability.md +87 -0
- package/dist/university-content/notes/N-para-301-sync-and-maintenance.md +57 -0
- package/dist/university-content/notes/N-para-301-wisdom-system.md +89 -0
- package/dist/university-content/notes/N-para-401-agent-identity.md +99 -0
- package/dist/university-content/notes/N-para-401-agent-interop.md +87 -0
- package/dist/university-content/notes/N-para-401-agent-roles.md +107 -0
- package/dist/university-content/notes/N-para-401-commit-conventions.md +82 -0
- package/dist/university-content/notes/N-para-401-mastery-review.md +71 -0
- package/dist/university-content/notes/N-para-401-mcp-tools-overview.md +102 -0
- package/dist/university-content/notes/N-para-401-multi-agent-coordination.md +80 -0
- package/dist/university-content/notes/N-para-401-notebooks-permissions.md +66 -0
- package/dist/university-content/notes/N-para-401-orchestration-workflow.md +101 -0
- package/dist/university-content/notes/N-para-401-pm-governance.md +71 -0
- package/dist/university-content/notes/N-para-401-provider-cascade.md +75 -0
- package/dist/university-content/notes/N-para-401-quick-check.md +95 -0
- package/dist/university-content/notes/N-para-451-agent-routing.md +117 -0
- package/dist/university-content/notes/N-para-451-archetypes-vs-instances.md +82 -0
- package/dist/university-content/notes/N-para-451-identity-layers.md +76 -0
- package/dist/university-content/notes/N-para-451-orchestration-modes.md +85 -0
- package/dist/university-content/notes/N-para-451-paradigm-shift.md +95 -0
- package/dist/university-content/notes/N-para-451-partners-primitive.md +107 -0
- package/dist/university-content/notes/N-para-451-roster-management.md +132 -0
- package/dist/university-content/notes/N-para-451-roster-reference.md +106 -0
- package/dist/university-content/notes/N-para-451-the-team-pattern.md +87 -0
- package/dist/university-content/notes/N-para-451-tiers.md +81 -0
- package/dist/university-content/notes/N-para-451-welcome.md +55 -0
- package/dist/university-content/notes/N-para-451-what-is-an-agent.md +73 -0
- package/dist/university-content/notes/N-para-501-advanced-workflows.md +122 -0
- package/dist/university-content/notes/N-para-501-aspect-graph-advanced.md +195 -0
- package/dist/university-content/notes/N-para-501-aspect-graph-internals.md +97 -0
- package/dist/university-content/notes/N-para-501-assessment-loops.md +116 -0
- package/dist/university-content/notes/N-para-501-conductor-workspace.md +77 -0
- package/dist/university-content/notes/N-para-501-habits-practice.md +164 -0
- package/dist/university-content/notes/N-para-501-hook-enforcement.md +100 -0
- package/dist/university-content/notes/N-para-501-lore-system.md +155 -0
- package/dist/university-content/notes/N-para-501-platform-agent-ui.md +108 -0
- package/dist/university-content/notes/N-para-501-review-compliance.md +72 -0
- package/dist/university-content/notes/N-para-501-sentinel-deep-dive.md +173 -0
- package/dist/university-content/notes/N-para-501-session-intelligence.md +104 -0
- package/dist/university-content/notes/N-para-501-symphony-a-mail.md +120 -0
- package/dist/university-content/notes/N-para-501-symphony-networking.md +119 -0
- package/dist/university-content/notes/N-para-501-task-management.md +100 -0
- package/dist/university-content/notes/N-para-601-agent-renaissance.md +121 -0
- package/dist/university-content/notes/N-para-601-attention-scoring.md +129 -0
- package/dist/university-content/notes/N-para-601-context-composition.md +146 -0
- package/dist/university-content/notes/N-para-601-data-sovereignty.md +140 -0
- package/dist/university-content/notes/N-para-601-event-stream.md +126 -0
- package/dist/university-content/notes/N-para-601-knowledge-streams.md +144 -0
- package/dist/university-content/notes/N-para-601-learning-loop.md +68 -0
- package/dist/university-content/notes/N-para-601-maestro-team-collab.md +136 -0
- package/dist/university-content/notes/N-para-601-nominations-debates.md +115 -0
- package/dist/university-content/notes/N-para-701-agent-notebooks.md +131 -0
- package/dist/university-content/notes/N-para-701-agent-pods-nevrland.md +182 -0
- package/dist/university-content/notes/N-para-701-agent-profiles.md +197 -0
- package/dist/university-content/notes/N-para-701-agent-roster.md +82 -0
- package/dist/university-content/notes/N-para-701-agent-state.md +180 -0
- package/dist/university-content/notes/N-para-701-learning-feedback-loop.md +188 -0
- package/dist/university-content/notes/N-para-701-model-tier-resolution.md +204 -0
- package/dist/university-content/notes/N-para-701-orchestration-enforcement.md +169 -0
- package/dist/university-content/notes/N-para-701-per-project-rosters.md +198 -0
- package/dist/university-content/notes/N-para-701-symphony-visibility.md +142 -0
- package/dist/university-content/paths/LP-para-001.yaml +29 -0
- package/dist/university-content/paths/LP-para-101.yaml +59 -0
- package/dist/university-content/paths/LP-para-201.yaml +69 -0
- package/dist/university-content/paths/LP-para-301.yaml +84 -0
- package/dist/university-content/paths/LP-para-401.yaml +74 -0
- package/dist/university-content/paths/LP-para-451.yaml +69 -0
- package/dist/university-content/paths/LP-para-501.yaml +89 -0
- package/dist/university-content/paths/LP-para-601.yaml +59 -0
- package/dist/university-content/paths/LP-para-701.yaml +64 -0
- package/dist/university-content/quizzes/Q-para-001-build-something.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-001-meet-the-team.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-001-shift-setup.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-101-component-types.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-101-first-steps.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-five-symbols.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-101-paradigm-logger.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-portal-yaml.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-project-structure.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-101-purpose-files.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-tags-and-classification.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-welcome.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-architecture-review.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-201-aspect-graph.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-201-aspects-and-anchors.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-component-patterns.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-cross-cutting-concerns.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-disciplines.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-201-flows-deep-dive.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-201-gates-deep-dive.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-201-portal-protocol.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-signal-patterns.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-symbol-naming.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-301-context-management.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-decisions.yaml +76 -0
- package/dist/university-content/quizzes/Q-para-301-doctor-and-validation.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-301-enforcement-levels.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-fragility-tracking.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-history-system.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-navigation-system.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-operations-review.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-301-paradigm-shift.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-protocols.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-ripple-analysis.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-sentinel-observability.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-sync-and-maintenance.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-wisdom-system.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-401-agent-identity.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-agent-interop.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-401-agent-roles.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-401-commit-conventions.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-401-mastery-review.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-mcp-tools-overview.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-multi-agent-coordination.yaml +76 -0
- package/dist/university-content/quizzes/Q-para-401-notebooks-permissions.yaml +61 -0
- package/dist/university-content/quizzes/Q-para-401-orchestration-workflow.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-pm-governance.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-provider-cascade.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-401-quick-check.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-451-foundations.yaml +154 -0
- package/dist/university-content/quizzes/Q-para-451-when-to-invoke.yaml +182 -0
- package/dist/university-content/quizzes/Q-para-501-advanced-workflows.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-aspect-graph-advanced.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-aspect-graph-internals.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-assessment-loops.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-501-conductor-workspace.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-501-habits-practice.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-501-hook-enforcement.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-lore-system.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-platform-agent-ui.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-review-compliance.yaml +61 -0
- package/dist/university-content/quizzes/Q-para-501-sentinel-deep-dive.yaml +86 -0
- package/dist/university-content/quizzes/Q-para-501-session-intelligence.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-symphony-a-mail.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-symphony-networking.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-task-management.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-601-agent-renaissance.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-601-attention-scoring.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-601-context-composition.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-601-data-sovereignty.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-601-event-stream.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-601-knowledge-streams.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-601-learning-loop.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-601-maestro-team-collab.yaml +86 -0
- package/dist/university-content/quizzes/Q-para-601-nominations-debates.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-notebooks.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-pods-nevrland.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-profiles.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-roster.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-state.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-learning-feedback-loop.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-model-tier-resolution.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-orchestration-enforcement.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-per-project-rosters.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-symphony-visibility.yaml +66 -0
- package/dist/university-content/quizzes/Q-plsat-v2.yaml +904 -0
- package/dist/university-content/quizzes/Q-plsat-v3.yaml +2909 -0
- package/dist/university-content/reference.json +2 -2
- package/dist/university-ui/assets/{index-CecQrfSn.js → index-nNgzO1il.js} +2 -2
- package/dist/university-ui/assets/{index-CecQrfSn.js.map → index-nNgzO1il.js.map} +1 -1
- package/dist/university-ui/index.html +1 -1
- package/dist/{upgrade-GX56QE3C.js → upgrade-NKN63VTY.js} +2 -2
- package/dist/validate-XUQZTF3H.js +9 -0
- package/dist/{watch-YCODNIET.js → watch-25GJHQYT.js} +1 -1
- package/lore-ui/dist/assets/{index-Bk-K0qgN.js → index-DKhNxgtW.js} +10 -10
- package/lore-ui/dist/index.html +1 -1
- package/package.json +2 -2
- package/platform-ui/dist/assets/{AmbientSection-BYjt75R1.js → AmbientSection-CwatqcBD.js} +1 -1
- package/platform-ui/dist/assets/{CanvasSection-rKvA_vZj.js → CanvasSection-dFAthehN.js} +1 -1
- package/platform-ui/dist/assets/{DocsSection-CI9K73M-.js → DocsSection-BZ2SFJBZ.js} +1 -1
- package/platform-ui/dist/assets/{GitSection-DSGj_c6S.js → GitSection-MNNYU1tO.js} +1 -1
- package/platform-ui/dist/assets/{GraphSection-CawN7pC5.js → GraphSection-COYjb4Pt.js} +1 -1
- package/platform-ui/dist/assets/LoreSection-B0hUbfsJ.js +1 -0
- package/platform-ui/dist/assets/{SentinelSection-DNgoYMH0.js → SentinelSection-BCxW1DCp.js} +1 -1
- package/platform-ui/dist/assets/{SymphonySection-C0zfcqv3.js → SymphonySection-BsucZRqy.js} +1 -1
- package/platform-ui/dist/assets/{TeamSection-Bzd3Dt9Q.js → TeamSection-C0QNTudW.js} +1 -1
- package/platform-ui/dist/assets/{UniversitySection-tBr62R0S.js → UniversitySection-DN1-g9pw.js} +1 -1
- package/platform-ui/dist/assets/{index-BaOmyn11.js → index-DwUT8pju.js} +2 -2
- package/platform-ui/dist/index.html +1 -1
- package/dist/add-P76GEMGF.js +0 -8
- package/dist/agent-X6I2YWOB.js +0 -33
- package/dist/chunk-JQKKVAAN.js +0 -2
- package/dist/chunk-NQ47TA6C.js +0 -111
- package/dist/chunk-ODVKPZZ4.js +0 -2
- package/dist/chunk-Q2J542ST.js +0 -2
- package/dist/chunk-RBLK34IA.js +0 -11
- package/dist/chunk-RN4VE6P3.js +0 -521
- package/dist/chunk-WS2N27RX.js +0 -3
- package/dist/config-schema-GUQY2QN7.js +0 -2
- package/dist/decision-loader-2XPZE4EZ.js +0 -2
- package/dist/doctor-WMVULMQD.js +0 -2
- package/dist/list-5IUGP3ZB.js +0 -7
- package/dist/lore-loader-RVQI5GXL.js +0 -2
- package/dist/lore-loader-XY5MZRR2.js +0 -2
- package/dist/migrate-assessments-GEI5WMI2.js +0 -4
- package/dist/portal-compliance-6YR27IQU.js +0 -2
- package/dist/quiz-FE5UGAY2.js +0 -10
- package/dist/registry-KOOKFUWD.js +0 -20
- package/dist/reindex-I6LPAKCC.js +0 -2
- package/dist/serve-OY6XYL7F.js +0 -12
- package/dist/server-2MNROHF6.js +0 -7
- package/dist/session-tracker-MWJAJA6Z.js +0 -2
- package/dist/shift-PC6C7NUX.js +0 -60
- package/dist/show-BOAVWZPZ.js +0 -7
- package/dist/status-A37ECYNJ.js +0 -6
- package/dist/sync-DLUBV5HQ.js +0 -2
- package/dist/tools-5ITPEPSV.js +0 -2
- package/dist/university-content/courses/.purpose +0 -492
- package/dist/university-content/courses/para-001.json +0 -166
- package/dist/university-content/courses/para-101.json +0 -615
- package/dist/university-content/courses/para-201.json +0 -794
- package/dist/university-content/courses/para-301.json +0 -830
- package/dist/university-content/courses/para-401.json +0 -868
- package/dist/university-content/courses/para-501.json +0 -1166
- package/dist/university-content/courses/para-601.json +0 -719
- package/dist/university-content/courses/para-701.json +0 -807
- package/dist/university-content/plsat/.purpose +0 -162
- package/dist/university-content/plsat/v2.0.json +0 -760
- package/dist/university-content/plsat/v3.0.json +0 -3453
- package/dist/validate-C6SMKGYD.js +0 -9
- package/platform-ui/dist/assets/LoreSection-oO5dCe6O.js +0 -1
- /package/dist/{chunk-BV5PRPLB.js → chunk-HXGYVS2N.js} +0 -0
- /package/templates/paradigm/specs/{scan.md → probe.md} +0 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-501-assessment-loops
|
|
3
|
+
title: Lore as Unified Project Memory
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-501
|
|
11
|
+
- lore-is-the
|
|
12
|
+
- eight-entry-types
|
|
13
|
+
- arc-tags-arc
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 4
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-501.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Lore: The Single Source of Project Memory
|
|
24
|
+
|
|
25
|
+
Paradigm uses lore as its unified project memory system. Every piece of project knowledge — session records, retrospectives, insights, decisions, milestones — lives in lore entries, differentiated by `type` and classified by tags.
|
|
26
|
+
|
|
27
|
+
The model is simple: **one system, tags drive classification.**
|
|
28
|
+
|
|
29
|
+
| Entry Type | When to Use |
|
|
30
|
+
|---|---|
|
|
31
|
+
| `agent-session` | Automated record of an AI-assisted work session |
|
|
32
|
+
| `human-note` | Manual note from a human developer |
|
|
33
|
+
| `decision` | Strategic or architectural decision with rationale |
|
|
34
|
+
| `review` | Quality review of a previous entry |
|
|
35
|
+
| `incident` | Production issue or bug report |
|
|
36
|
+
| `milestone` | Significant project achievement |
|
|
37
|
+
| `retro` | Retrospective — looking back at completed work |
|
|
38
|
+
| `insight` | A realization or pattern discovered across sessions |
|
|
39
|
+
|
|
40
|
+
Lore entries are stored as YAML files in `.paradigm/lore/entries/{date}/` with the `.lore` extension. Each entry has a unique ID: `L-{date}-{author}-{HHMMSS}-{NNN}`.
|
|
41
|
+
|
|
42
|
+
## Tags Drive Classification
|
|
43
|
+
|
|
44
|
+
Tags are the primary classification mechanism in lore. Any string can be a tag, but certain prefixes carry special meaning:
|
|
45
|
+
|
|
46
|
+
| Tag Prefix | Meaning | Example |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| `arc:` | Groups entries into a thematic arc | `arc:auth-hardening`, `arc:v2-migration` |
|
|
49
|
+
| `assessment:` | Marks the reflection type | `assessment:retro`, `assessment:insight` |
|
|
50
|
+
| `arc-closed` | Arc is no longer active | Added when an arc is complete |
|
|
51
|
+
| `arc-status:` | Arc status metadata | `arc-status:complete`, `arc-status:archived` |
|
|
52
|
+
|
|
53
|
+
Arcs are simply tag prefixes — no separate storage or management needed. To create an arc, just start tagging lore entries with `arc:my-arc-name`. To close an arc, add `arc-closed` and `arc-status:complete` tags to its entries.
|
|
54
|
+
|
|
55
|
+
## The Body Field
|
|
56
|
+
|
|
57
|
+
For entries that need more than a 2-3 sentence summary, lore entries support a `body` field for long-form content. This is where retrospective narratives, detailed decision rationale, and multi-paragraph reflections live:
|
|
58
|
+
|
|
59
|
+
```yaml
|
|
60
|
+
id: L-2026-03-02-ascend-164500-001
|
|
61
|
+
type: retro
|
|
62
|
+
title: "JWT refresh token rotation — what we learned"
|
|
63
|
+
summary: Completed refresh token rotation with httpOnly cookie storage.
|
|
64
|
+
body: |
|
|
65
|
+
After three sessions implementing refresh token rotation,
|
|
66
|
+
the key insight is that storing refresh tokens in httpOnly
|
|
67
|
+
cookies eliminates an entire class of XSS vulnerabilities.
|
|
68
|
+
symbols_touched: ["#refresh-token-handler", "^authenticated"]
|
|
69
|
+
linked_lore: [L-2026-02-10-003, L-2026-02-12-001]
|
|
70
|
+
linked_commits: [a1b2c3d, e4f5g6h]
|
|
71
|
+
tags: [arc:auth-hardening, assessment:retro, security, auth, jwt]
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Cross-Referencing
|
|
75
|
+
|
|
76
|
+
Lore entries can link to other project artifacts:
|
|
77
|
+
|
|
78
|
+
- **`linked_lore`** — References to other lore entry IDs, creating a web of related records
|
|
79
|
+
- **`linked_tasks`** — References to paradigm task IDs
|
|
80
|
+
- **`linked_commits`** — Git commit SHAs related to this entry
|
|
81
|
+
|
|
82
|
+
These links create traceability. A retrospective entry can point to the three session records that produced it and the five commits that implemented it.
|
|
83
|
+
|
|
84
|
+
## Working with Lore
|
|
85
|
+
|
|
86
|
+
**Recording:** Use `paradigm_lore_record` with `type`, `title`, `summary`, and `symbols_touched`. Add `body` for long-form content, `tags` with `arc:*` prefixes for arc grouping, and `linked_lore`/`linked_commits` for cross-references.
|
|
87
|
+
|
|
88
|
+
**Searching:** Use `paradigm_lore_search` with filters:
|
|
89
|
+
- `tag: "arc:auth-hardening"` — Find all entries in an arc
|
|
90
|
+
- `type: "retro"` — Find all retrospectives
|
|
91
|
+
- `hasBody: true` — Find entries with detailed content
|
|
92
|
+
- `symbol: "#payment-service"` — Find entries touching a symbol
|
|
93
|
+
|
|
94
|
+
## The Reflection Loop
|
|
95
|
+
|
|
96
|
+
Lore supports a natural reflection cycle:
|
|
97
|
+
|
|
98
|
+
1. **Session records** — Automatically captured during work sessions (type: `agent-session`)
|
|
99
|
+
2. **Reflection entries** — Manually recorded at natural pause points (type: `retro`, `insight`, `decision`, `milestone`)
|
|
100
|
+
3. **Arc grouping** — Related reflections tagged with `arc:*` for thematic organization
|
|
101
|
+
4. **Cross-referencing** — Reflection entries link back to the sessions that produced them
|
|
102
|
+
|
|
103
|
+
When a task is marked complete via `paradigm_task_done`, the system suggests recording a lore entry as a natural reflection point.
|
|
104
|
+
|
|
105
|
+
## When to Record Reflective Entries
|
|
106
|
+
|
|
107
|
+
- **After completing a multi-session feature** — What did we learn? (`retro` with `arc:feature-name`)
|
|
108
|
+
- **When a pattern emerges** — "Every time we touch auth, we find token edge cases" (`insight`)
|
|
109
|
+
- **When making a strategic choice** — "Switching from REST to GraphQL" (`decision`)
|
|
110
|
+
- **When reaching a milestone** — "v2.0 shipped to production" (`milestone`)
|
|
111
|
+
|
|
112
|
+
The general rule: if the knowledge would be valuable in 3 months, record it as a reflective lore entry with appropriate tags.
|
|
113
|
+
|
|
114
|
+
## Migration from Assessments
|
|
115
|
+
|
|
116
|
+
Projects that used the older separate assessment system can migrate with `paradigm lore migrate-assessments`. This converts assessment entries to lore entries with `arc:{arc_id}` and `assessment:{type}` tags, preserving all data.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-501-conductor-workspace
|
|
3
|
+
title: 'Conductor: Visual Mission Control'
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-501
|
|
11
|
+
- conductor-is-a
|
|
12
|
+
- workspace-mode-provides
|
|
13
|
+
- symphony-integration-shows
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 3
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-501.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## What Is Conductor?
|
|
24
|
+
|
|
25
|
+
Conductor is a native macOS application that serves as the visual mission control for Paradigm. While the CLI and MCP tools handle the automation, Conductor gives you a real-time view of what your agent team is doing — and lets you interact with them visually.
|
|
26
|
+
|
|
27
|
+
Think of it as the difference between managing a team over email versus walking into a mission control room. Both work, but the room gives you instant awareness.
|
|
28
|
+
|
|
29
|
+
### Core Capabilities
|
|
30
|
+
|
|
31
|
+
**Workspace Mode** — A full-screen tiling window manager for Claude Code sessions. Launch multiple terminals side by side, split horizontally or vertically, drag dividers to resize. Six layout presets (single, split-h, split-v, quad, triple, grid) let you quickly arrange your workspace.
|
|
32
|
+
|
|
33
|
+
**Symphony Integration** — Conductor connects to Symphony, the inter-agent messaging system. When agents communicate during orchestration (handing off context, requesting approval, debating approaches), those messages appear in Conductor's thread view in real time. You can read the full conversation without switching to the CLI.
|
|
34
|
+
|
|
35
|
+
**Task Protocol** — A structured protocol for human-agent coordination with 7 intents:
|
|
36
|
+
- `task` — assign work to an agent
|
|
37
|
+
- `task-ack` — agent acknowledges receipt
|
|
38
|
+
- `progress` — agent reports progress
|
|
39
|
+
- `approval-request` — agent asks for human approval
|
|
40
|
+
- `approval-response` — human approves or rejects
|
|
41
|
+
- `task-complete` — agent reports success
|
|
42
|
+
- `task-failed` — agent reports failure
|
|
43
|
+
|
|
44
|
+
This protocol makes agent work visible and controllable. You see when agents are working, what they are asking, and whether they succeeded.
|
|
45
|
+
|
|
46
|
+
**Agent Health Dashboard** — Per-agent metrics: success rates, average time-per-task, acceptance rates for contributions. Sparklines show trends over time. When an agent's performance drops, you see it immediately.
|
|
47
|
+
|
|
48
|
+
**Live Sentinel** — Real-time event viewer with symbol filtering. When Sentinel detects an incident or pattern, it appears in Conductor's event feed with full detail and suggested resolution.
|
|
49
|
+
|
|
50
|
+
### Architecture
|
|
51
|
+
|
|
52
|
+
Conductor is built with Swift and SwiftUI — a native macOS application, not an Electron wrapper. Key design decisions:
|
|
53
|
+
|
|
54
|
+
- **Single-owner pattern** — AppDelegate owns the orchestrator, workspace, project store, and agent process manager. No shared mutable state.
|
|
55
|
+
- **Local-only ML** — Gaze tracking, gesture recognition, and voice commands all run locally via CoreML. Zero cloud, zero cost, zero latency.
|
|
56
|
+
- **SwiftTerm embedding** — Terminal sessions use SwiftTerm, a native Swift terminal emulator. Each session is a real PTY with full ANSI support.
|
|
57
|
+
- **7 platform protocols** — Abstraction layer for future portability (the same protocol set would power a Windows or Linux version).
|
|
58
|
+
|
|
59
|
+
### Getting Started
|
|
60
|
+
|
|
61
|
+
Build and install Conductor:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
cd packages/conductor
|
|
65
|
+
./build-conductor.sh --install
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
This produces `Conductor.app` in `/Applications`. Launch it, and it connects to your Paradigm project automatically.
|
|
69
|
+
|
|
70
|
+
### When to Use Conductor
|
|
71
|
+
|
|
72
|
+
- **During orchestration** — watch agents work in real time, approve contributions, read debates
|
|
73
|
+
- **Multi-session development** — tile 2-4 Claude Code sessions side by side, each working on different parts of the codebase
|
|
74
|
+
- **Monitoring** — keep Conductor visible on a secondary display to catch Sentinel events and agent health changes
|
|
75
|
+
- **Team collaboration** — when multiple developers use Symphony, Conductor shows cross-session threads and file approval requests
|
|
76
|
+
|
|
77
|
+
Conductor is optional — everything it shows is also available via CLI and MCP tools. But for teams that want visual awareness of their agent team, it is the command center.
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-501-habits-practice
|
|
3
|
+
title: Habits & Practice
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-501
|
|
11
|
+
- six-categories-discovery
|
|
12
|
+
- four-triggers-preflight
|
|
13
|
+
- three-severity-levels
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 6
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-501.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Instinct vs Habit
|
|
24
|
+
|
|
25
|
+
When you first learn to drive, you consciously think about every action — check mirrors, signal, check blind spot, change lanes. After thousands of miles, these become habits: automatic behaviors you execute without conscious effort. The Habits system brings this concept to AI-assisted development.
|
|
26
|
+
|
|
27
|
+
Without habits, an agent must be told every time: "check ripple before modifying," "validate flows after changing gates," "record lore for significant sessions." With habits, these checks become automatic behavioral triggers — the system evaluates them at defined points and reports compliance. Over time, agents internalize the patterns, and the habit checks become confirmation rather than correction.
|
|
28
|
+
|
|
29
|
+
## Habit Definitions
|
|
30
|
+
|
|
31
|
+
Each habit is a structured rule with six fields:
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
id: ripple-before-modify
|
|
35
|
+
name: Check Ripple Before Modifying
|
|
36
|
+
description: Always call paradigm_ripple before modifying any symbol
|
|
37
|
+
category: discovery
|
|
38
|
+
trigger: preflight
|
|
39
|
+
severity: advisory
|
|
40
|
+
check:
|
|
41
|
+
type: tool-called
|
|
42
|
+
params:
|
|
43
|
+
tools: [paradigm_ripple]
|
|
44
|
+
enabled: true
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Categories** classify what kind of discipline the habit enforces. There are six:
|
|
48
|
+
- `discovery` — Exploring before acting (ripple, navigate, search)
|
|
49
|
+
- `verification` — Validating after implementing (postflight, reindex)
|
|
50
|
+
- `testing` — Ensuring test coverage for new code
|
|
51
|
+
- `documentation` — Keeping .purpose files and lore entries current
|
|
52
|
+
- `collaboration` — Checking team wisdom and expert knowledge
|
|
53
|
+
- `security` — Validating gates and portal.yaml compliance
|
|
54
|
+
|
|
55
|
+
**Triggers** define when the habit is evaluated. There are four:
|
|
56
|
+
- `preflight` — Before starting implementation
|
|
57
|
+
- `postflight` — After completing implementation
|
|
58
|
+
- `on-commit` — Before committing changes
|
|
59
|
+
- `on-stop` — Before the session ends (stop hook)
|
|
60
|
+
|
|
61
|
+
**Severity** determines what happens when a habit is violated:
|
|
62
|
+
- `advisory` — Log a note, don't block anything
|
|
63
|
+
- `warn` — Show a warning to the agent/user
|
|
64
|
+
- `block` — Prevent session completion until resolved (enforced by stop hook)
|
|
65
|
+
|
|
66
|
+
## Check Types
|
|
67
|
+
|
|
68
|
+
Habits verify compliance through twelve check types:
|
|
69
|
+
|
|
70
|
+
| Check Type | What It Verifies |
|
|
71
|
+
|---|---|
|
|
72
|
+
| `tool-called` | Specified MCP tools were invoked during the session |
|
|
73
|
+
| `file-exists` | Files matching glob patterns exist (e.g., test files) |
|
|
74
|
+
| `file-modified` | Files matching patterns were modified during session |
|
|
75
|
+
| `lore-recorded` | A lore entry was created (for 3+ file sessions) |
|
|
76
|
+
| `symbols-registered` | New code is registered in .purpose files |
|
|
77
|
+
| `gates-declared` | Routes have corresponding gates in portal.yaml |
|
|
78
|
+
| `tests-exist` | Test files exist for modified components |
|
|
79
|
+
| `git-clean` | Git working tree is clean — all changes committed |
|
|
80
|
+
| `commit-message-format` | Commit messages match regex patterns (default: conventional commit prefix + Symbols: trailer) |
|
|
81
|
+
| `flow-coverage` | Changes spanning 3+ components have a documented $flow |
|
|
82
|
+
| `context-checked` | Session context/recovery tools (paradigm_session_health, paradigm_session_recover) were called |
|
|
83
|
+
| `aspect-anchored` | Touched aspects (~) have valid code anchors verified via paradigm_aspect_check |
|
|
84
|
+
|
|
85
|
+
## The 14 Seed Habits
|
|
86
|
+
|
|
87
|
+
Paradigm ships with 14 built-in habits that establish baseline discipline:
|
|
88
|
+
|
|
89
|
+
1. **explore-before-implement** (preflight/advisory/discovery) — Called paradigm_ripple, paradigm_navigate, paradigm_search, or paradigm_related before coding
|
|
90
|
+
2. **ripple-before-modify** (preflight/advisory/discovery) — Called paradigm_ripple specifically before modifying symbols
|
|
91
|
+
3. **check-fragility** (preflight/advisory/discovery) — Called paradigm_history_fragility before touching symbols
|
|
92
|
+
4. **wisdom-before-implement** (preflight/advisory/collaboration) — Checked paradigm_wisdom_context or paradigm_wisdom_expert
|
|
93
|
+
5. **verify-before-done** (on-stop/warn/verification) — Called paradigm_pm_postflight before finishing
|
|
94
|
+
6. **postflight-compliance** (on-stop/advisory/verification) — Ran postflight and reindex
|
|
95
|
+
7. **test-new-components** (postflight/advisory/testing) — Test files exist for new components
|
|
96
|
+
8. **purpose-coverage** (postflight/warn/documentation) — .purpose files cover modified directories
|
|
97
|
+
9. **record-lore-for-significant** (on-stop/warn/documentation) — Lore recorded for 3+ file sessions
|
|
98
|
+
10. **gates-for-routes** (postflight/warn/security) — Routes have portal.yaml gate coverage
|
|
99
|
+
11. **commit-message-symbols** (on-commit/advisory/documentation) — Commit messages follow type(#symbol): format with Symbols: trailer
|
|
100
|
+
12. **flow-coverage-for-multi-component** (postflight/advisory/documentation) — Changes spanning 3+ components have a documented $flow
|
|
101
|
+
13. **context-session-awareness** (preflight/advisory/discovery) — Session recovery or context check tools were called for continuity
|
|
102
|
+
14. **aspect-anchors-valid** (postflight/advisory/verification) — Aspects touched during the session have valid code anchors
|
|
103
|
+
|
|
104
|
+
## Habit Loading and Overrides
|
|
105
|
+
|
|
106
|
+
Habits load from three sources, merged in order (later wins):
|
|
107
|
+
|
|
108
|
+
1. **Seed habits** — The 10 built-in habits (always present)
|
|
109
|
+
2. **Global habits** — `~/.paradigm/habits.yaml` (optional, applies to all projects)
|
|
110
|
+
3. **Project habits** — `.paradigm/habits.yaml` (optional, project-specific)
|
|
111
|
+
|
|
112
|
+
Overrides let you adjust severity or disable habits without redefining them:
|
|
113
|
+
|
|
114
|
+
```yaml
|
|
115
|
+
# .paradigm/habits.yaml
|
|
116
|
+
overrides:
|
|
117
|
+
ripple-before-modify:
|
|
118
|
+
severity: block # Upgrade from advisory to blocking
|
|
119
|
+
test-new-components:
|
|
120
|
+
enabled: false # Disable for this project
|
|
121
|
+
custom:
|
|
122
|
+
- id: check-migrations
|
|
123
|
+
name: Verify DB Migrations
|
|
124
|
+
category: verification
|
|
125
|
+
trigger: on-commit
|
|
126
|
+
severity: warn
|
|
127
|
+
check:
|
|
128
|
+
type: file-exists
|
|
129
|
+
params:
|
|
130
|
+
patterns: ["migrations/*.sql"]
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Practice Profiles
|
|
134
|
+
|
|
135
|
+
Every habit evaluation is recorded as a practice event with a result: `followed`, `skipped`, or `partial`. These events accumulate into practice profiles that show compliance rates over time.
|
|
136
|
+
|
|
137
|
+
`paradigm_habits_status` returns a practice profile with: overall compliance rate, strongest and weakest categories, per-category breakdowns, trend analysis (improving/declining/stable), and incident correlations — habits whose skipped evaluations correlate with higher incident rates.
|
|
138
|
+
|
|
139
|
+
The incident correlation is powerful: if skipping `ripple-before-modify` correlates with a 3x higher incident rate for the modified symbols, that is concrete evidence for upgrading the habit's severity.
|
|
140
|
+
|
|
141
|
+
## MCP Tools
|
|
142
|
+
|
|
143
|
+
**`paradigm_habits_check`** — Evaluate habits for a trigger point. Pass the trigger (`preflight`, `postflight`, `on-stop`), optionally with `filesModified` and `symbolsTouched` for context. Returns evaluations with follow/skip/partial results and whether any blocking violations exist.
|
|
144
|
+
|
|
145
|
+
**`paradigm_habits_status`** — Get the practice profile for an engineer over a time period (7d, 30d, 90d, or all). Shows compliance rates, category breakdowns, trends, and incident correlations.
|
|
146
|
+
|
|
147
|
+
**`paradigm_practice_context`** — Before modifying symbols, get habit-aware warnings. Pass the symbols you are about to touch, and it returns relevant habits, recent compliance rates, and suggestions based on your weak areas.
|
|
148
|
+
|
|
149
|
+
## CLI Commands
|
|
150
|
+
|
|
151
|
+
The CLI provides full habit management:
|
|
152
|
+
|
|
153
|
+
- `paradigm habits list` — List all habits with trigger, severity, and enabled status
|
|
154
|
+
- `paradigm habits add` — Add a custom habit with check type, patterns, and tools
|
|
155
|
+
- `paradigm habits edit <id>` — Edit habit fields (for seed habits: severity and enabled only)
|
|
156
|
+
- `paradigm habits remove <id>` — Remove a custom habit
|
|
157
|
+
- `paradigm habits enable/disable <id>` — Toggle a habit on or off
|
|
158
|
+
- `paradigm habits check --trigger <trigger>` — Evaluate compliance for a specific trigger
|
|
159
|
+
- `paradigm habits status` — Practice profile with compliance rates and trends
|
|
160
|
+
- `paradigm habits init` — Initialize a habits.yaml file for the project
|
|
161
|
+
|
|
162
|
+
## Platform Targeting
|
|
163
|
+
|
|
164
|
+
Habits support a `platforms` field to restrict evaluation to specific platforms. For example, a habit with `platforms: ['claude', 'cursor']` will only be evaluated when running in those environments. A habit with `platforms: ['cli']` will only fire during CLI-driven workflows. When `platforms` is omitted, the habit applies everywhere.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-501-hook-enforcement
|
|
3
|
+
title: Hook Enforcement & Automation
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-501
|
|
11
|
+
- stop-hook-blocks
|
|
12
|
+
- post-write-hook-tracks
|
|
13
|
+
- pre-commit-hook-auto-rebuilds
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 4
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-501.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## The Compliance Gap
|
|
24
|
+
|
|
25
|
+
Paradigm's value depends on discipline. Purpose files must be updated when code changes. Portal.yaml must reflect route additions. Lore must be recorded for significant sessions. Aspect anchors must point to real code. Without enforcement, these requirements become suggestions that erode over time.
|
|
26
|
+
|
|
27
|
+
Hooks close this gap. They are automated checks that run at specific points in the development workflow, catching violations before they become technical debt. Paradigm uses three hooks, each with a distinct role and severity.
|
|
28
|
+
|
|
29
|
+
## The Stop Hook
|
|
30
|
+
|
|
31
|
+
The stop hook is the primary enforcer. It runs before an agent session completes and can **block** the session from finishing if compliance checks fail.
|
|
32
|
+
|
|
33
|
+
**Trigger**: Before agent session end (Claude Code: Stop hook, Cursor: pre-finish)
|
|
34
|
+
|
|
35
|
+
**Seven checks, in order:**
|
|
36
|
+
|
|
37
|
+
1. **Source files modified without .purpose updates** — If 2+ source files were modified but zero paradigm metadata files (.purpose, portal.yaml, etc.) were updated, the hook blocks. This catches the "implement and forget" pattern.
|
|
38
|
+
|
|
39
|
+
2. **Modified directories missing .purpose coverage** — The hook walks up the directory tree from each modified source file looking for a covering .purpose file. If no .purpose exists anywhere in the ancestor chain (including the project root), it blocks.
|
|
40
|
+
|
|
41
|
+
3. **Route patterns without portal.yaml** — The hook scans modified files for route declaration patterns (Express `.get()`, `.post()`, decorators like `@Get()`, Rust macros like `#[actix_web::get]`). If routes are detected and portal.yaml was neither present nor modified, it blocks.
|
|
42
|
+
|
|
43
|
+
4. **Stale aspect anchors** — The hook parses .purpose files for `anchors:` sections and validates that each referenced file still exists. If an anchor points to a deleted file, it blocks.
|
|
44
|
+
|
|
45
|
+
5. **Pending .purpose freshness** — The post-write hook tracks files edited without .purpose updates in `.paradigm/.pending-review`. The stop hook checks this list: if source files are pending and their covering .purpose was not also modified during the session, it blocks.
|
|
46
|
+
|
|
47
|
+
6. **Aspect coverage advisory** — If the project uses `~aspects`, the hook advises (non-blocking) to verify that anchor line numbers are still accurate after code changes.
|
|
48
|
+
|
|
49
|
+
7. **Lore entry for significant sessions** — If 3+ source files were modified and no lore entry was recorded in `.paradigm/lore/entries/`, the hook blocks.
|
|
50
|
+
|
|
51
|
+
**When blocked**, the hook outputs a clear list of violations with remediation steps. Fix the violations, then complete the session.
|
|
52
|
+
|
|
53
|
+
## The Post-Write Hook
|
|
54
|
+
|
|
55
|
+
The post-write hook runs after every file edit (Edit or Write tool calls). It is **advisory only** — it never blocks.
|
|
56
|
+
|
|
57
|
+
**Trigger**: After Edit or Write tool completes
|
|
58
|
+
|
|
59
|
+
**Actions:**
|
|
60
|
+
1. Extracts the edited file path
|
|
61
|
+
2. Skips non-source files (.purpose, portal.yaml, .md, .lock, .json, .yaml, .gitignore, .env files) and paradigm directories (.paradigm/, .claude/, .cursor/)
|
|
62
|
+
3. Appends source file paths to `.paradigm/.pending-review` (deduplicated)
|
|
63
|
+
4. Checks if a .purpose file covers the edited directory
|
|
64
|
+
5. If no .purpose exists: reminds "No .purpose file covers {dir}/ — Create one"
|
|
65
|
+
6. Every 3 source files edited: general reminder to update .purpose files
|
|
66
|
+
|
|
67
|
+
The `.pending-review` file is the bridge between the post-write hook and the stop hook. Post-write accumulates the list; stop hook validates against it.
|
|
68
|
+
|
|
69
|
+
## The Pre-Commit Hook
|
|
70
|
+
|
|
71
|
+
The pre-commit hook runs before `git commit` and handles index maintenance. It **never blocks**.
|
|
72
|
+
|
|
73
|
+
**Trigger**: Before Bash commands containing `git commit`
|
|
74
|
+
|
|
75
|
+
**Actions:**
|
|
76
|
+
1. Runs `paradigm index --quiet` to rebuild scan-index.json, navigator.yaml, and flow-index.json
|
|
77
|
+
2. Stages the rebuilt files so they are included in the commit
|
|
78
|
+
3. Exits 0 (always succeeds)
|
|
79
|
+
|
|
80
|
+
This ensures that every commit has a fresh symbol index. Without this hook, the index would drift from the actual codebase between manual `paradigm scan` runs.
|
|
81
|
+
|
|
82
|
+
## Hook Installation
|
|
83
|
+
|
|
84
|
+
Hooks are installed automatically by `paradigm shift` (full setup) or manually with `paradigm hooks install`. The installer detects the IDE (Claude Code or Cursor) and writes the appropriate hook format.
|
|
85
|
+
|
|
86
|
+
For Claude Code, hooks are configured in `.claude/settings.json` using the hooks API — stop hooks, PreToolUse matchers (for Bash commands matching `git commit`), and PostToolUse matchers (for Edit/Write tool calls).
|
|
87
|
+
|
|
88
|
+
## Remediation Workflow
|
|
89
|
+
|
|
90
|
+
When the stop hook blocks you:
|
|
91
|
+
|
|
92
|
+
1. **Read the violation list** — Each violation names the specific check that failed
|
|
93
|
+
2. **Update .purpose files** — For modified directories without coverage, create or update the nearest .purpose file
|
|
94
|
+
3. **Update portal.yaml** — If routes were added, add the route and gate definitions
|
|
95
|
+
4. **Fix stale anchors** — If aspect anchors point to deleted/moved files, update the anchor paths
|
|
96
|
+
5. **Record lore** — If 3+ files were modified, call `paradigm_lore_record` with the session summary
|
|
97
|
+
6. **Run `paradigm_reindex`** — Rebuild the index to reflect your updates
|
|
98
|
+
7. **Complete the session** — The stop hook runs again and should pass
|
|
99
|
+
|
|
100
|
+
The key insight is that the stop hook is not punitive — it is protective. Every check it enforces prevents a real problem: stale documentation, unprotected routes, orphaned anchors, or lost institutional knowledge.
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-501-lore-system
|
|
3
|
+
title: The Lore System
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-18'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-501
|
|
11
|
+
- lore-entries-record
|
|
12
|
+
- seven-entry-types
|
|
13
|
+
- date-partitioned-yaml-storage
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 5
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-501.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Why Projects Forget
|
|
24
|
+
|
|
25
|
+
Every software project accumulates institutional knowledge — why a migration was attempted then rolled back, which approach was chosen for caching and why, what the team learned when the billing system went down at 2 AM. Without a system for capturing this knowledge, it lives only in the heads of the people who were there. When they leave, context-switch, or simply forget, the project loses its memory.
|
|
26
|
+
|
|
27
|
+
Paradigm's Lore system is a structured project timeline. It records sessions, milestones, incidents, retros, reviews, and insights as date-partitioned YAML entries that both humans and AI agents can search, filter, and learn from.
|
|
28
|
+
|
|
29
|
+
> **v6.0 change:** the `decision` lore type was removed. Architectural decisions now have their own dedicated store — see "Decisions Have Their Own Store" below.
|
|
30
|
+
|
|
31
|
+
## Anatomy of a Lore Entry
|
|
32
|
+
|
|
33
|
+
Every lore entry follows a consistent structure:
|
|
34
|
+
|
|
35
|
+
```yaml
|
|
36
|
+
id: L-2026-02-21-ascend-143025-001
|
|
37
|
+
type: agent-session
|
|
38
|
+
timestamp: "2026-02-21T14:30:25Z"
|
|
39
|
+
duration_minutes: 45
|
|
40
|
+
author: ascend
|
|
41
|
+
agent:
|
|
42
|
+
provider: anthropic
|
|
43
|
+
model: claude-opus-4-6
|
|
44
|
+
title: "Add JWT authentication to user routes"
|
|
45
|
+
summary: "Implemented RS256 JWT auth middleware, added ^authenticated and ^project-admin gates to portal.yaml, created refresh token rotation."
|
|
46
|
+
symbols_touched: ["#auth-middleware", "^authenticated", "^project-admin"]
|
|
47
|
+
symbols_created: ["#refresh-token-handler"]
|
|
48
|
+
files_modified: ["src/middleware/auth.ts", "portal.yaml"]
|
|
49
|
+
files_created: ["src/handlers/refresh-token.ts"]
|
|
50
|
+
lines_added: 247
|
|
51
|
+
lines_removed: 12
|
|
52
|
+
commit: "a1b2c3d"
|
|
53
|
+
decisions:
|
|
54
|
+
- id: jwt-signing
|
|
55
|
+
decision: "Use RS256 over HS256"
|
|
56
|
+
rationale: "Allows public key verification without sharing the signing secret"
|
|
57
|
+
learnings:
|
|
58
|
+
- "Express v5 requires explicit async error wrapping for middleware"
|
|
59
|
+
verification:
|
|
60
|
+
status: pass
|
|
61
|
+
details: { "unit-tests": pass, "integration": pass }
|
|
62
|
+
tags: [security, auth]
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The `id` field is auto-generated as `L-{date}-{author}-{hhmmss}-{seq}` — date partitions the storage, author and timestamp disambiguate within a day, and the sequence handles burst writes. Note that `author` is the human user (a string), and AI assistance is recorded separately in the optional `agent` object. The `decisions` field on an agent-session entry remains valid — it captures decisions made *during* a work session. Standalone architectural decisions go through `paradigm_decision_record` (see below).
|
|
66
|
+
|
|
67
|
+
## Entry Types
|
|
68
|
+
|
|
69
|
+
Lore recognizes seven entry types, each capturing a different kind of project event:
|
|
70
|
+
|
|
71
|
+
| Type | When to Use |
|
|
72
|
+
|---|---|
|
|
73
|
+
| `agent-session` | An AI agent completed a work session (most common) |
|
|
74
|
+
| `human-note` | A human records context, rationale, or tribal knowledge |
|
|
75
|
+
| `review` | A code review, PR review, or post-mortem |
|
|
76
|
+
| `incident` | A production incident or significant failure |
|
|
77
|
+
| `milestone` | A release, launch, migration completion, or major achievement |
|
|
78
|
+
| `retro` | A retrospective on a sprint, project, or incident response |
|
|
79
|
+
| `insight` | A learned pattern or observation worth preserving |
|
|
80
|
+
|
|
81
|
+
The type drives how the entry appears in timeline views and which filters surface it.
|
|
82
|
+
|
|
83
|
+
## Decisions Have Their Own Store
|
|
84
|
+
|
|
85
|
+
In v6.0 the `decision` lore type was removed. Decisions are first-class enough to deserve their own store, separate from the time-partitioned narrative of lore. Decisions live in `.paradigm/decisions/` as `TD-*` entries, recorded via `paradigm_decision_record`. When you record a decision, Paradigm auto-writes a companion lore `insight` entry pointing at it (with `references.decision_id`) — so the timeline still surfaces the moment the decision was made, while the canonical decision record stays addressable by topic rather than by date.
|
|
86
|
+
|
|
87
|
+
If you have a v1/v2 project with old `type: decision` lore entries, the storage layer migrates them to type `insight` on read and tags them `v6-migrated:from-decision` for forensic recovery. New entries with `type: 'decision'` are rejected at the storage layer with an error pointing you at the decision-record path. The rejection envelope (`code: 'lore_type_decision_removed'`, `successor_tool: 'paradigm_decision_record'`) is structured so calling agents can auto-retry without human intervention.
|
|
88
|
+
|
|
89
|
+
Search hierarchy:
|
|
90
|
+
- Use `paradigm_lore_search` for narrative ("what happened on 2026-02-21?").
|
|
91
|
+
- Use `paradigm_decision_search` for canonical choices ("what did we decide about caching?").
|
|
92
|
+
|
|
93
|
+
## Storage: Date-Partitioned YAML
|
|
94
|
+
|
|
95
|
+
Lore entries live in `.paradigm/lore/entries/` organized by date. Filenames mirror the entry id (`L-{date}-{author}-{hhmmss}-{seq}.yaml`), so you can identify the author and burst order from the filename alone:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
.paradigm/lore/
|
|
99
|
+
timeline.yaml # Index metadata
|
|
100
|
+
entries/
|
|
101
|
+
2026-02-19/
|
|
102
|
+
L-2026-02-19-ascend-091203-001.yaml
|
|
103
|
+
L-2026-02-19-matt-143812-001.yaml
|
|
104
|
+
2026-02-20/
|
|
105
|
+
L-2026-02-20-ascend-101545-001.yaml
|
|
106
|
+
2026-02-21/
|
|
107
|
+
L-2026-02-21-ascend-143025-001.yaml
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
The `timeline.yaml` index tracks total entry count, last updated timestamp, and known authors. Date partitioning keeps directories small and makes time-range queries efficient — to find entries from last week, you only read 7 directories.
|
|
111
|
+
|
|
112
|
+
## CLI Tools
|
|
113
|
+
|
|
114
|
+
The CLI provides full lore management:
|
|
115
|
+
|
|
116
|
+
- `paradigm lore list` — List entries with filters (author, type, symbol, date range, tags)
|
|
117
|
+
- `paradigm lore show <id>` — Full detail view of a single entry
|
|
118
|
+
- `paradigm lore record` — Record a new entry with expanded fields (files-modified, files-created, commit, learnings, duration)
|
|
119
|
+
- `paradigm lore edit <id>` — Edit entry fields (title, summary, type, symbols, tags, learnings)
|
|
120
|
+
- `paradigm lore delete <id>` — Delete an entry (with --yes to skip confirmation)
|
|
121
|
+
- `paradigm lore timeline` — Timeline view grouped by date with hot symbols
|
|
122
|
+
- `paradigm lore review <id>` — Add review scores to an entry
|
|
123
|
+
- `paradigm lore` — Launch the web timeline UI
|
|
124
|
+
|
|
125
|
+
## MCP Tools
|
|
126
|
+
|
|
127
|
+
The Lore system exposes the following MCP tools:
|
|
128
|
+
|
|
129
|
+
**`paradigm_lore_record`** — Create a new entry. Requires `type`, `title`, `summary`, and `symbols_touched`. Optional fields include files, decisions, learnings, and verification status. The entry is written to the correct date directory with an auto-incremented ID. When `validateSymbols: true` is passed, the tool checks each symbol in `symbols_touched` against registered symbols in `.purpose` files, `flows.yaml`, and `portal.yaml`. Unregistered symbols produce advisory warnings (the entry is always recorded regardless). Calling with `type: 'decision'` returns a structured rejection envelope pointing at `paradigm_decision_record`.
|
|
130
|
+
|
|
131
|
+
**`paradigm_lore_search`** — Query entries with filters: by symbol, author, type, date range, tags, review status, and minimum completeness score. Returns matching entries sorted by recency.
|
|
132
|
+
|
|
133
|
+
**`paradigm_lore_timeline`** — Get a high-level view: recent entries, active authors, hot symbols (most-referenced in recent entries), and timeline metadata. Use this for orientation — it tells you what has been happening in the project.
|
|
134
|
+
|
|
135
|
+
**`paradigm_lore_get`** — Fetch a single entry by ID. Returns the full entry with all fields, including decisions, learnings, and review data.
|
|
136
|
+
|
|
137
|
+
**`paradigm_lore_update`** — Update an existing entry. Pass the entry ID and the fields to change (title, summary, type, symbols, tags, learnings). Only specified fields are modified.
|
|
138
|
+
|
|
139
|
+
**`paradigm_lore_delete`** — Delete an entry by ID. Requires `confirm: true` to prevent accidental deletion.
|
|
140
|
+
|
|
141
|
+
**`paradigm_lore_assess`** — Score an entry's quality and completeness (1-5 each), with optional notes. The assessment is stored alongside the entry and feeds the calibration and review filters.
|
|
142
|
+
|
|
143
|
+
**`paradigm_lore_calibration`** — Surface calibration drift: entries where the recorded confidence diverges from later-observed reality. Use this to find sessions where an agent over- or under-estimated its certainty.
|
|
144
|
+
|
|
145
|
+
## Lore Reviews
|
|
146
|
+
|
|
147
|
+
Entries can be reviewed by humans after the fact. A review adds a `completeness` score (1-5), a `quality` score (1-5), and optional notes. This creates a feedback loop: agents learn which sessions produced high-quality entries and can adjust their recording behavior. You can filter entries by `hasReview` and `minCompleteness` to surface only verified project history.
|
|
148
|
+
|
|
149
|
+
## When to Record
|
|
150
|
+
|
|
151
|
+
The general rule: **record lore when a session modifies 3 or more source files**. This threshold captures significant work sessions while ignoring trivial edits. The stop hook enforces this — if you modified 3+ files without recording a lore entry, it will block your session from completing.
|
|
152
|
+
|
|
153
|
+
Beyond the threshold, always record lore for: production incidents, milestone completions, retros, and any session where you learned something the next developer should know. For standalone architectural decisions, use `paradigm_decision_record` instead — the decision store handles them, and a companion lore `insight` is auto-written for timeline coverage.
|
|
154
|
+
|
|
155
|
+
> **Going deeper:** PARA 601 covers knowledge streams (work-log, journal, decisions) and how `paradigm_decision_record` writes to the decisions stream while emitting a companion lore `insight` for timeline coverage. PARA 301 covers the new dedicated decision store in detail (`N-para-301-decisions`).
|