@a-company/paradigm 5.37.11 → 6.0.2
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-SBZVK3H4.js → accept-orchestration-QQISPINV.js} +1 -1
- package/dist/add-UOR4INIV.js +8 -0
- package/dist/{agent-loader-RIVI6QPP.js → agent-loader-2WJHD46U.js} +1 -1
- package/dist/{agent-loader-RJRVO5GQ.js → agent-loader-YKS2PQWO.js} +1 -1
- package/dist/{aggregate-W66DM3GA.js → aggregate-A5S5MTCC.js} +1 -1
- package/dist/{ambient-76YMUA5Q.js → ambient-BE3SQXNN.js} +1 -1
- package/dist/{ambient-WTLYUAQM.js → ambient-NVKQCW2A.js} +12 -12
- package/dist/{assess-UFPYEJKP.js → assess-63WXHWJV.js} +1 -1
- package/dist/{beacon-5QVYV5DF.js → beacon-QVUD3MGP.js} +1 -1
- package/dist/{calibration-OLJYB5HN.js → calibration-BDHGYJOK.js} +1 -1
- package/dist/{chunk-SI6SV76D.js → chunk-3DZK54RU.js} +72 -19
- package/dist/{chunk-CHVQNRRT.js → chunk-4PSD5R7N.js} +2 -2
- package/dist/chunk-6SKSV5B2.js +24 -0
- package/dist/{chunk-KFNHCQ4R.js → chunk-FEYOQMZ5.js} +1 -1
- package/dist/{chunk-NEJ4ZLCY.js → chunk-GAFKOFAV.js} +1 -1
- package/dist/chunk-GRZQIKST.js +2 -0
- package/dist/{chunk-RLCH7DXQ.js → chunk-K7X3Z3GL.js} +1 -1
- package/dist/chunk-LPBCQM5Y.js +6 -0
- package/dist/{chunk-T6IDXUUA.js → chunk-LWAIVOSF.js} +1 -1
- package/dist/{chunk-74SGKSRQ.js → chunk-M2HKWR25.js} +1 -1
- package/dist/{chunk-BOYQAMGC.js → chunk-M3PPXJU4.js} +1 -1
- package/dist/chunk-PHEX6LU4.js +111 -0
- package/dist/chunk-Q527BPUF.js +2 -0
- package/dist/chunk-R5ECMBIV.js +11 -0
- package/dist/{chunk-X3U3IGYT.js → chunk-TBWWFRL5.js} +1 -1
- package/dist/{chunk-MQIG6SMF.js → chunk-TNVWGPCE.js} +1 -1
- package/dist/{chunk-SUU6M4JH.js → chunk-TOYQ2QCB.js} +1 -1
- package/dist/chunk-TZDYIPVU.js +521 -0
- 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-AGFPVSX5.js → chunk-VXIIVMTM.js} +1 -1
- package/dist/{chunk-ORDKEGII.js → chunk-WESTEMIM.js} +1 -1
- package/dist/{chunk-LBQBWIEX.js → chunk-Y4P4SGZV.js} +1 -1
- package/dist/{chunk-DOCDDDTD.js → chunk-YNDPSWOE.js} +5 -5
- package/dist/chunk-Z5QW6USC.js +2 -0
- package/dist/chunk-ZJQY5PPP.js +7 -0
- package/dist/{commands-LMUD5L6R.js → commands-ANRJNG2W.js} +1 -1
- package/dist/compliance-BNFWQPKM.js +6 -0
- package/dist/config-schema-FLHRVZMI.js +2 -0
- package/dist/{constellation-CG7C4WFE.js → constellation-NWLXYATA.js} +1 -1
- package/dist/{context-audit-XRPT3OU2.js → context-audit-JVCA6GSV.js} +1 -1
- package/dist/{cost-IDNVMAEV.js → cost-24UZSS2P.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-JVEYCXUC.js → diff-MF55KQZH.js} +1 -1
- package/dist/{dist-KGRCLBJP-2QAPFYNF.js → dist-GQ42YS5N-4HIJZVBB.js} +10 -10
- package/dist/dist-JZZJLVMR.js +2 -0
- package/dist/{dist-3ZCH25SG.js → dist-OG6MM4VY.js} +1 -1
- package/dist/dist-SE67SOXB.js +2 -0
- package/dist/{docs-USDAF26F.js → docs-O37YLLRN.js} +1 -1
- package/dist/doctor-IG5XM4C4.js +2 -0
- package/dist/{edit-GUU3HBVW.js → edit-P3MDAZLU.js} +1 -1
- package/dist/{flow-POQP27WA.js → flow-BGXOVE2V.js} +1 -1
- package/dist/{hooks-IG2GOAHP.js → hooks-TFMMMB2H.js} +1 -1
- package/dist/index.js +6 -6
- package/dist/init-M44SO65G.js +2 -0
- package/dist/init-V4KSEKPK.js +2 -0
- package/dist/{integrity-UYDOOJDP.js → integrity-ROO3G43N.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 +19 -11
- package/dist/metrics-UESGUHTA.js +2 -0
- package/dist/{migrate-IBDE7VK4.js → migrate-Z5UQN57G.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/{nomination-engine-EALA5MGI.js → nomination-engine-QPZJH6XO.js} +1 -1
- package/dist/{notebook-loader-PXNRBBXD.js → notebook-loader-3J2OFMS3.js} +1 -1
- package/dist/{orchestrate-RCAMBOIB.js → orchestrate-RID7HHHH.js} +1 -1
- package/dist/{platform-server-DNAMH4YI.js → platform-server-UD45NTGV.js} +1 -1
- package/dist/portal-check-DV2VSJ5E.js +8 -0
- package/dist/{portal-compliance-4MG5F2GI.js → portal-compliance-JONQ4SOP.js} +1 -1
- package/dist/{probe-B22G2JKF.js → probe-5HAXULAD.js} +1 -1
- package/dist/{providers-AWA7WLLM.js → providers-4PXMWA7V.js} +1 -1
- package/dist/quiz-WYIZJG5K.js +10 -0
- package/dist/{record-YXPB34MY.js → record-N3VNYYKJ.js} +1 -1
- package/dist/reindex-FWPD2VGM.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/{review-6UAH6V3R.js → review-VMSX2PKI.js} +1 -1
- package/dist/{ripple-ZGDITCGB.js → ripple-FNZI47SH.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/sentinel.js +1 -1
- package/dist/{serve-U47GULB6.js → serve-MO35XIZE.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-KGORN6B5.js +2 -0
- package/dist/{session-work-log-PAKXOFGL.js → session-work-log-4IEVE4KK.js} +1 -1
- package/dist/{session-work-log-ZP45TREI.js → session-work-log-EE4UIZ33.js} +1 -1
- package/dist/{setup-3F5IK7MO.js → setup-ZSEC72BS.js} +2 -2
- package/dist/{shift-FDADESC4.js → shift-TVNY2CQF.js} +6 -6
- package/dist/{show-PJ5LFLIL.js → show-JH7LJ5MT.js} +1 -1
- package/dist/show-WVHAL4VU.js +7 -0
- package/dist/{snapshot-L2G56RPL.js → snapshot-3IYB67D4.js} +1 -1
- package/dist/{spawn-M5BAV252.js → spawn-UH5RENSE.js} +1 -1
- package/dist/{status-77M3SDIF.js → status-DB3KNLW3.js} +1 -1
- package/dist/status-S7Z5FVIE.js +6 -0
- package/dist/{summary-LXLHFRN7.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-MGT66HZQ.js +2 -0
- package/dist/{test-BQJMS4Y2.js → test-WLEPZQFC.js} +1 -1
- package/dist/{timeline-K3ZFKJ3R.js → timeline-RK7O2SCM.js} +1 -1
- package/dist/tools-QJHAVYI6.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-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-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-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-VZXTJHGO.js → validate-BB6LRWIY.js} +1 -1
- package/dist/validate-XUQZTF3H.js +9 -0
- package/dist/{watch-YCODNIET.js → watch-25GJHQYT.js} +1 -1
- package/dist/workspace-VMSPYIBV.js +2 -0
- 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 +3 -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/templates/paradigm/specs/symbols.md +4 -2
- package/dist/add-P76GEMGF.js +0 -8
- package/dist/chunk-3TR6LLXP.js +0 -111
- package/dist/chunk-G7XFK2GI.js +0 -11
- package/dist/chunk-J6KWGCHN.js +0 -24
- package/dist/chunk-JQKKVAAN.js +0 -2
- package/dist/chunk-ODVKPZZ4.js +0 -2
- package/dist/chunk-Q2J542ST.js +0 -2
- package/dist/chunk-QT2LKB3P.js +0 -7
- package/dist/chunk-SHD27BQX.js +0 -6
- package/dist/chunk-WS2N27RX.js +0 -3
- package/dist/chunk-YT52WLBF.js +0 -521
- package/dist/compliance-WJINB5DM.js +0 -6
- package/dist/config-schema-GUQY2QN7.js +0 -2
- package/dist/decision-loader-2XPZE4EZ.js +0 -2
- package/dist/dist-R3RWD35F.js +0 -2
- package/dist/dist-VXCZWVVJ.js +0 -2
- package/dist/doctor-QJ47XAUP.js +0 -2
- package/dist/init-HIBRSVUB.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-check-Z3OCQEQR.js +0 -8
- package/dist/quiz-FE5UGAY2.js +0 -10
- package/dist/reindex-FO5VMZVQ.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/show-BOAVWZPZ.js +0 -7
- package/dist/status-A37ECYNJ.js +0 -6
- package/dist/sync-DLUBV5HQ.js +0 -2
- package/dist/team-NSP6PMPS.js +0 -2
- package/dist/tools-CERDNVCG.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/dist/workspace-MKSQN7B2.js +0 -2
- package/platform-ui/dist/assets/LoreSection-oO5dCe6O.js +0 -1
- /package/dist/{chunk-BV5PRPLB.js → chunk-IZSBGW6E.js} +0 -0
- /package/templates/paradigm/specs/{scan.md → probe.md} +0 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-501-aspect-graph-advanced
|
|
3
|
+
title: The Aspect Graph at Scale
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-501
|
|
11
|
+
- 8-built-in-detectors
|
|
12
|
+
- custom-detectors-defined
|
|
13
|
+
- bfs-traversal-with
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 8
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-501.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Beyond the Basics
|
|
24
|
+
|
|
25
|
+
PARA 201 introduced the Aspect Graph's internals — the SQLite schema, materialization pipeline, and recursive ripple. This lesson takes you deeper: building custom detectors, advanced graph queries, drift detection in CI/CD, search learning optimization, and governing aspects at enterprise scale.
|
|
26
|
+
|
|
27
|
+
## Building Custom Aspect Detection Patterns
|
|
28
|
+
|
|
29
|
+
Paradigm ships with 8 built-in detectors that `paradigm_aspect_suggest_scan` uses to find undocumented aspects in source code:
|
|
30
|
+
|
|
31
|
+
1. **Magic numbers** — Numeric literals that aren't 0 or 1 (e.g., `timeout: 30000`, `maxRetries: 3`)
|
|
32
|
+
2. **Hardcoded strings** — String literals used in conditionals or assignments that smell like configuration (e.g., `'production'`, `'us-east-1'`)
|
|
33
|
+
3. **Rate limits** — Patterns like `rateLimit(100)`, `throttle(1000)`, or variable names containing `limit`, `throttle`, `quota`
|
|
34
|
+
4. **Time values** — Durations, timeouts, TTLs, and expiry values (e.g., `86400`, `24 * 60 * 60`)
|
|
35
|
+
5. **Environment checks** — `process.env`, `std::env`, `os.environ` patterns that branch on environment variables
|
|
36
|
+
6. **Feature flags** — Conditional logic gated on feature names (e.g., `isEnabled('new-checkout')`, `featureFlags.get()`)
|
|
37
|
+
7. **Regex patterns** — Regular expressions used for validation (e.g., email patterns, URL matchers)
|
|
38
|
+
8. **Assertion guards** — Invariant checks using `assert`, `invariant()`, `expect()` that enforce guarantees
|
|
39
|
+
|
|
40
|
+
To extend the detection system, you define custom detectors in `.paradigm/aspect-detectors.yaml`:
|
|
41
|
+
|
|
42
|
+
```yaml
|
|
43
|
+
detectors:
|
|
44
|
+
- id: compliance-annotation
|
|
45
|
+
name: Compliance Annotations
|
|
46
|
+
description: Detects SOC2/GDPR compliance annotations in code
|
|
47
|
+
patterns:
|
|
48
|
+
- regex: "@(SOC2|GDPR|PCI|HIPAA)"
|
|
49
|
+
languages: [typescript, javascript, java]
|
|
50
|
+
- regex: "#\[compliance\("
|
|
51
|
+
languages: [rust]
|
|
52
|
+
suggestedCategory: rule
|
|
53
|
+
suggestedSeverity: critical
|
|
54
|
+
suggestedTags: [compliance, security]
|
|
55
|
+
|
|
56
|
+
- id: retry-policy
|
|
57
|
+
name: Retry Policies
|
|
58
|
+
description: Detects retry/backoff configurations
|
|
59
|
+
patterns:
|
|
60
|
+
- regex: "(retryPolicy|backoff|maxAttempts|retryCount)"
|
|
61
|
+
languages: [typescript, javascript, python]
|
|
62
|
+
suggestedCategory: configuration
|
|
63
|
+
suggestedSeverity: medium
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Custom detectors are loaded alongside the built-in 8 during `paradigm_aspect_suggest_scan`. They follow the same interface: match source code patterns, suggest a category and severity, and let the user decide whether to formalize the finding as a `~aspect`.
|
|
67
|
+
|
|
68
|
+
## Graph Querying Strategies
|
|
69
|
+
|
|
70
|
+
The aspect graph supports three primary querying patterns, each suited to different use cases:
|
|
71
|
+
|
|
72
|
+
### BFS Traversal (Neighborhood Analysis)
|
|
73
|
+
|
|
74
|
+
`paradigm_aspect_graph` uses breadth-first search to explore the neighborhood of a symbol. The `hops` parameter controls how far to traverse:
|
|
75
|
+
|
|
76
|
+
- **1 hop** — Direct connections only. Use this when you need to know what a single aspect directly relates to. Fast, focused, minimal noise.
|
|
77
|
+
- **2 hops** — Friends-of-friends. Reveals indirect relationships: "this aspect relates to that aspect, which relates to that component." The sweet spot for most queries.
|
|
78
|
+
- **3+ hops** — Extended neighborhood. Useful for understanding how distant parts of the codebase connect through aspects. Gets noisy in dense graphs.
|
|
79
|
+
|
|
80
|
+
The multiplicative weight decay means that each hop reduces confidence. An explicit edge (weight 1.0) followed by an inferred edge (weight 0.5) produces a path weight of 0.5. Two inferred edges produce 0.25. The `minWeight` threshold (default 0.1) prunes low-confidence paths automatically.
|
|
81
|
+
|
|
82
|
+
### Heatmap-Driven Exploration
|
|
83
|
+
|
|
84
|
+
`paradigm_aspect_heatmap` ranks aspects by access frequency. This is not about what aspects ARE important — it is about what aspects are USED most. The distinction matters:
|
|
85
|
+
|
|
86
|
+
- An aspect accessed 50 times via search but never via ripple might have a discoverability problem — people search for it because it is hard to find through the graph.
|
|
87
|
+
- An aspect accessed primarily via ripple has good graph connectivity — it naturally surfaces during impact analysis.
|
|
88
|
+
- An aspect with zero access across all types may be stale, poorly named, or irrelevant.
|
|
89
|
+
|
|
90
|
+
Heatmap data is the starting point for governance reviews. Aspects that nobody accesses should be evaluated for removal or renaming.
|
|
91
|
+
|
|
92
|
+
### Edge-Filtered Queries
|
|
93
|
+
|
|
94
|
+
When calling `paradigm_aspect_graph`, you can filter by edge relation to narrow results:
|
|
95
|
+
|
|
96
|
+
- `enforced-by` — Find all aspects that enforce a given component. Useful when changing a component to know what rules apply.
|
|
97
|
+
- `depends-on` — Find dependency chains. If `~token-expiry-24h` depends-on `~jwt-signing-rs256`, changing JWT signing affects token expiry.
|
|
98
|
+
- `contradicts` — Find conflicting aspects. Two aspects that contradict each other signal an architectural tension that needs resolution.
|
|
99
|
+
- `supersedes` — Find deprecated-but-still-referenced aspects. The superseding aspect should be the authoritative one.
|
|
100
|
+
- `related-to` — The weakest relation. Useful for discovery but not for impact analysis.
|
|
101
|
+
|
|
102
|
+
## Drift Detection in CI/CD
|
|
103
|
+
|
|
104
|
+
Aspect drift occurs when the code at an anchor location changes without updating the aspect definition. The `paradigm_aspect_drift` tool detects this using SHA-256 content hashes.
|
|
105
|
+
|
|
106
|
+
During materialization, the pipeline computes a SHA-256 hash of the code at each anchor's line range and stores it in the `anchors.content_hash` column. When `paradigm_aspect_drift` runs later, it re-reads the code at those line ranges, computes a new hash, and compares. A mismatch means the code changed — the anchor is drifted.
|
|
107
|
+
|
|
108
|
+
For CI/CD integration, add drift detection as a pipeline step:
|
|
109
|
+
|
|
110
|
+
```yaml
|
|
111
|
+
# .github/workflows/paradigm.yml
|
|
112
|
+
steps:
|
|
113
|
+
- name: Check aspect drift
|
|
114
|
+
run: |
|
|
115
|
+
paradigm scan --quiet
|
|
116
|
+
paradigm doctor --strict --json | jq '.aspects.drifted'
|
|
117
|
+
if [ $(paradigm doctor --json | jq '.aspects.drifted | length') -gt 0 ]; then
|
|
118
|
+
echo "::error::Aspect anchors have drifted"
|
|
119
|
+
exit 1
|
|
120
|
+
fi
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The `--strict` flag treats drifted anchors as errors rather than warnings. In a mature project, you want drift detection to block merges — it ensures that aspect documentation stays synchronized with code changes.
|
|
124
|
+
|
|
125
|
+
Drift detection is also available per-aspect via the MCP tool:
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
paradigm_aspect_drift({ aspectId: 'token-expiry-24h' })
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
This returns: the aspect ID, each anchor with its stored hash vs current hash, whether each anchor has drifted, and the specific lines that changed. Use this during code review to verify that refactors updated their aspect anchors.
|
|
132
|
+
|
|
133
|
+
## Search Learning Loop Optimization
|
|
134
|
+
|
|
135
|
+
The three-tier search system improves over time through the confirm-and-decay mechanism. Here is how to optimize it:
|
|
136
|
+
|
|
137
|
+
### Tier Priority
|
|
138
|
+
|
|
139
|
+
1. **Tier 1: Learned mappings** — Query-to-aspect weights in the `search_weights` table. If a query matches a stored mapping with weight >= 1.0, the result is returned immediately. This is instant because it is a simple key-value lookup.
|
|
140
|
+
2. **Tier 2: FTS5 full-text search** — SQLite's FTS5 engine searches aspect descriptions, values, and categories. Returns results ranked by BM25 relevance. Accurate but slower than Tier 1.
|
|
141
|
+
3. **Tier 3: Fuzzy matching** — Levenshtein distance-based matching with a configurable threshold. Catches typos and partial matches. Slowest but most forgiving.
|
|
142
|
+
|
|
143
|
+
### Warming the Learning System
|
|
144
|
+
|
|
145
|
+
A new project's search starts cold — no learned mappings exist. Every search falls through to Tier 2 or 3. To warm the system:
|
|
146
|
+
|
|
147
|
+
1. Run common queries for your project's domain (e.g., search for 'expiry', 'rate limit', 'auth')
|
|
148
|
+
2. Confirm the best result with `paradigm_aspect_confirm` for each query
|
|
149
|
+
3. After 3-5 confirmations per query, the learned weight exceeds the Tier 1 threshold
|
|
150
|
+
|
|
151
|
+
The decay mechanism (confirmed +1.0, others *0.95) means that a single confirmation is enough to create a Tier 1 entry. But multiple confirmations build a stronger mapping that resists displacement.
|
|
152
|
+
|
|
153
|
+
### Diagnosing Search Issues
|
|
154
|
+
|
|
155
|
+
When search returns unexpected results:
|
|
156
|
+
|
|
157
|
+
- Check `search_weights` table entries for the query — are stale mappings dominating?
|
|
158
|
+
- Verify aspect descriptions contain the keywords you are searching for (FTS5 searches descriptions)
|
|
159
|
+
- Check for typos in the query that might prevent Tier 2 matches but trigger Tier 3 fuzzy results
|
|
160
|
+
- Use `paradigm_aspect_heatmap` to see if the expected aspect is ever accessed — a zero-access aspect might have a discovery problem
|
|
161
|
+
|
|
162
|
+
## Aspect Governance at Scale
|
|
163
|
+
|
|
164
|
+
When a project exceeds 100 aspects, governance becomes critical. Without it, aspects accumulate as stale documentation, anchor drift goes undetected, and the graph becomes noisy rather than useful.
|
|
165
|
+
|
|
166
|
+
### The Governance Review Cycle
|
|
167
|
+
|
|
168
|
+
Run quarterly aspect reviews using this process:
|
|
169
|
+
|
|
170
|
+
1. **Heatmap analysis** — `paradigm_aspect_heatmap({ limit: 0 })` returns ALL aspects ranked by access. The bottom 20% are candidates for removal or consolidation.
|
|
171
|
+
2. **Drift audit** — `paradigm doctor --strict` catches all drifted anchors. Drifted aspects either need anchor updates or should be marked stale.
|
|
172
|
+
3. **Category distribution** — Check that aspect categories are balanced. A project with 80 rules and 2 decisions might be over-documenting constraints while missing strategic choices.
|
|
173
|
+
4. **Edge health** — Check for orphaned aspects (no edges to any other symbol). An aspect with zero edges is either standalone (legitimate but rare) or poorly connected.
|
|
174
|
+
5. **Search weight review** — Check the `search_weights` table for queries with multiple high-weight mappings, which indicate ambiguous terminology.
|
|
175
|
+
|
|
176
|
+
### Naming Conventions at Scale
|
|
177
|
+
|
|
178
|
+
With 100+ aspects, naming collisions and ambiguity become real problems. Establish conventions:
|
|
179
|
+
|
|
180
|
+
- **Category prefix** — Prefix aspects with their category: `~rule-no-console-log`, `~decision-use-redis`, `~constraint-max-upload-10mb`
|
|
181
|
+
- **Domain grouping** — Group related aspects by domain: `~auth-token-expiry`, `~auth-session-timeout`, `~auth-refresh-rotation`
|
|
182
|
+
- **Version suffix** — When aspects evolve: `~rate-limit-v2` supersedes `~rate-limit-v1` with an explicit `supersedes` edge
|
|
183
|
+
|
|
184
|
+
### Delegation and Ownership
|
|
185
|
+
|
|
186
|
+
For large teams, assign aspect ownership:
|
|
187
|
+
|
|
188
|
+
```yaml
|
|
189
|
+
~payment-idempotency:
|
|
190
|
+
description: Payment operations must be idempotent
|
|
191
|
+
owner: payments-team
|
|
192
|
+
reviewers: [platform-team, security-team]
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
The `owner` field indicates who maintains the aspect, and `reviewers` lists teams that should be consulted when the aspect changes. This is purely metadata — Paradigm does not enforce it — but it guides humans and AI agents when modifications are needed.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-501-aspect-graph-internals
|
|
3
|
+
title: Aspect Graph Internals
|
|
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-sqlite-tables
|
|
12
|
+
- recursive-ripple-uses
|
|
13
|
+
- default-maxdepth-is
|
|
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
|
+
## SQLite Schema
|
|
24
|
+
|
|
25
|
+
The aspect graph database at `.paradigm/aspect-graph.db` uses six core tables that model the full aspect ecosystem:
|
|
26
|
+
|
|
27
|
+
**`aspects`** — The primary table storing aspect metadata. Columns include `id` (the aspect symbol, e.g., `token-expiry-24h`), `description`, `value`, `category` (rule/decision/constraint/configuration/invariant), `severity` (low/medium/high/critical), and `content_hash` (SHA-256 of the combined anchor code for drift detection). Each row represents one aspect from a `.purpose` file.
|
|
28
|
+
|
|
29
|
+
**`anchors`** — Stores code anchor locations. Columns: `aspect_id` (foreign key to aspects), `file_path`, `start_line`, `end_line`, and `content_hash` (SHA-256 of the code at those lines). An aspect can have multiple anchors across different files.
|
|
30
|
+
|
|
31
|
+
**`edges`** — The graph edges connecting aspects to other symbols. Columns: `source` (the aspect), `target` (any symbol), `relation` (enforced-by, depends-on, contradicts, supersedes, related-to), `weight` (numeric confidence, default 1.0 for explicit edges), and `origin` (explicit, inferred, or learned). This table is what makes the aspect system a graph rather than a flat list.
|
|
32
|
+
|
|
33
|
+
**`lore_links`** — Connects aspects to lore entries. Columns: `aspect_id` and `lore_id`. These links are materialized from the `lore` field in aspect YAML definitions, and additional links are inferred when two aspects share lore references.
|
|
34
|
+
|
|
35
|
+
**`search_weights`** — The learning system's memory. Columns: `query` (the search string), `aspect_id` (the result), and `weight` (accumulated confidence). This table powers Tier 1 of the three-tier search — when a query matches a stored mapping with sufficient weight, the result is returned immediately without FTS5 or fuzzy matching.
|
|
36
|
+
|
|
37
|
+
**`heatmap`** — Tracks aspect access patterns. Columns: `aspect_id`, `access_type` (search, ripple, navigate, direct), `count`, and `last_accessed`. This data drives the `paradigm_aspect_heatmap` tool, revealing which aspects are most frequently referenced and how they are typically discovered.
|
|
38
|
+
|
|
39
|
+
## Recursive Ripple
|
|
40
|
+
|
|
41
|
+
The aspect graph enables recursive ripple analysis — when you call `paradigm_ripple` on a symbol that has aspect edges, the ripple follows those edges to discover indirect impacts. The algorithm uses weighted breadth-first search (BFS) with three configurable parameters:
|
|
42
|
+
|
|
43
|
+
- **maxDepth** — How many hops to traverse. Default is 5, maximum is 10. Each hop follows one edge in the graph. At depth 1, you see direct connections. At depth 5, you see connections five edges away.
|
|
44
|
+
- **minWeight** — The minimum cumulative weight to continue traversal. Default is 0.1. As the BFS traverses edges, it multiplies the current weight by each edge's weight (multiplicative decay). When the cumulative weight drops below minWeight, that branch is pruned.
|
|
45
|
+
- **Queue limit** — Maximum BFS queue size: 1000 nodes. This prevents runaway traversals in densely connected graphs. If the queue exceeds 1000 entries, the oldest entries are dropped.
|
|
46
|
+
|
|
47
|
+
The multiplicative decay is the key mechanism. An explicit edge with weight 1.0 passes full confidence to the next hop. An inferred edge with weight 0.5 halves the confidence. After two inferred edges, the weight is 0.25 — and after four, it drops to 0.0625, below the default minWeight threshold. This naturally limits traversal depth through low-confidence paths while allowing full traversal through high-confidence ones.
|
|
48
|
+
|
|
49
|
+
## Heatmap Tracking
|
|
50
|
+
|
|
51
|
+
Every time an aspect is accessed through any MCP tool, the heatmap table records the access. Four access types are tracked:
|
|
52
|
+
|
|
53
|
+
- **search** — The aspect was found via `paradigm_aspect_search`
|
|
54
|
+
- **ripple** — The aspect was encountered during `paradigm_ripple` traversal
|
|
55
|
+
- **navigate** — The aspect was discovered via `paradigm_navigate`
|
|
56
|
+
- **direct** — The aspect was accessed by ID via `paradigm_aspect_get`
|
|
57
|
+
|
|
58
|
+
The heatmap serves two purposes. First, it powers the `paradigm_aspect_heatmap` tool, which ranks aspects by access frequency and reveals usage patterns. Second, it provides data for project health analysis — aspects that are never accessed may be stale or poorly named, while aspects accessed frequently across multiple types are clearly central to the project.
|
|
59
|
+
|
|
60
|
+
## Materialization Pipeline
|
|
61
|
+
|
|
62
|
+
The aspect graph is rebuilt during `paradigm_reindex` through a five-step pipeline:
|
|
63
|
+
|
|
64
|
+
1. **openAspectGraph** — Opens (or creates) the SQLite database at `.paradigm/aspect-graph.db`. If the database exists, all tables are cleared for a fresh rebuild. This ensures the graph always reflects the current state of YAML files.
|
|
65
|
+
|
|
66
|
+
2. **materializeAspects** — Reads all `.purpose` files, extracts aspect definitions, and writes them to the `aspects`, `anchors`, and `edges` tables. For each anchor, the pipeline reads the actual source code at the specified line range and computes a SHA-256 content hash. Explicit edges from the YAML `edges` field are written with origin `explicit` and weight 1.0. Inferred edges from `applies-to` references are written with origin `inferred` and weight 0.5.
|
|
67
|
+
|
|
68
|
+
3. **materializeLoreLinks** — Reads the `lore` field from each aspect and creates entries in the `lore_links` table connecting aspects to their referenced lore entries.
|
|
69
|
+
|
|
70
|
+
4. **inferLoreEdges** — Scans the `lore_links` table for aspects that share lore references. When two aspects both reference the same lore entry, a learned edge is created between them with origin `learned` and a weight proportional to the number of shared references. This discovers implicit relationships that were not explicitly declared.
|
|
71
|
+
|
|
72
|
+
5. **closeAspectGraph** — Commits all changes, runs ANALYZE for query optimization, and closes the database connection.
|
|
73
|
+
|
|
74
|
+
Because the entire graph is rebuilt from YAML on every reindex, there is no migration or versioning concern. If the schema changes in a future Paradigm version, the next reindex simply creates the new schema.
|
|
75
|
+
|
|
76
|
+
## Category Inference
|
|
77
|
+
|
|
78
|
+
When an aspect definition omits the `category` field, the materialization pipeline attempts to infer it from the description using keyword matching:
|
|
79
|
+
|
|
80
|
+
- Descriptions containing "must", "always", "never", "required" suggest `rule`
|
|
81
|
+
- Descriptions containing "decided", "chosen", "selected", "opted" suggest `decision`
|
|
82
|
+
- Descriptions containing "limit", "maximum", "minimum", "cannot exceed" suggest `constraint`
|
|
83
|
+
- Descriptions containing "configured", "set to", "defaults to", "environment" suggest `configuration`
|
|
84
|
+
- Descriptions containing "always true", "never negative", "invariant", "guarantee" suggest `invariant`
|
|
85
|
+
|
|
86
|
+
Similarly, severity can be inferred from tags: aspects tagged `[critical]` or `[security]` default to `high` severity, aspects tagged `[compliance]` default to `critical`, and untagged aspects default to `medium`.
|
|
87
|
+
|
|
88
|
+
Inference is a fallback — explicit `category` and `severity` fields in YAML always take precedence.
|
|
89
|
+
|
|
90
|
+
## Weight Decay in Search Learning
|
|
91
|
+
|
|
92
|
+
The search learning system uses a reinforcement model. When `paradigm_aspect_confirm` is called with a query and aspect ID:
|
|
93
|
+
|
|
94
|
+
1. The selected result's weight for that query gets **+1.0** added to its current weight in the `search_weights` table. If no entry exists, one is created with weight 1.0.
|
|
95
|
+
2. All other aspects that were previously returned for the same query get their weights multiplied by **0.95** (a 5% decay). This applies only to aspects that have existing `search_weights` entries for this query — it does not penalize aspects that were never returned for this query.
|
|
96
|
+
|
|
97
|
+
This mechanism is self-correcting. If result A is consistently confirmed for a query, its weight grows (1.0, 2.0, 3.0, ...) while alternatives decay (1.0, 0.95, 0.9025, ...). After enough confirmations, the learned mapping becomes dominant and Tier 1 returns it instantly. But if the user later confirms a different result B for the same query, B starts climbing while A begins decaying — the system adapts to changing preferences without requiring manual intervention.
|
|
@@ -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.
|