@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,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-451-tiers
|
|
3
|
+
title: Model Tiers — Which Claude Each Agent Runs On
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-26'
|
|
7
|
+
updated: '2026-04-26'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-451
|
|
11
|
+
- tier-1
|
|
12
|
+
- tier-2
|
|
13
|
+
- tier-3
|
|
14
|
+
- model-tier
|
|
15
|
+
- taxonomy
|
|
16
|
+
symbols: []
|
|
17
|
+
difficulty: beginner
|
|
18
|
+
estimatedMinutes: 4
|
|
19
|
+
prerequisites:
|
|
20
|
+
- N-para-451-welcome
|
|
21
|
+
category: paradigm-core
|
|
22
|
+
origin: authored
|
|
23
|
+
source: agents-course-phase-a-design.md
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Tier = which model the agent runs on
|
|
27
|
+
|
|
28
|
+
In Paradigm, an agent's **tier** answers a single question: *which Claude model does this agent invoke by default?* That is it. Tier is a routing decision, not a status ranking, not a capability label, and — importantly — not the same thing as the v6.1 notebook tier (that one is covered separately; see the callout at the end).
|
|
29
|
+
|
|
30
|
+
The three tiers map to the three Claude model classes:
|
|
31
|
+
|
|
32
|
+
| Tier | Default model | Cost / latency profile | Typical role fit |
|
|
33
|
+
|------|---------------|------------------------|------------------|
|
|
34
|
+
| **Tier 1** | opus | Most capable, highest cost, slowest | Design, threat analysis, simulation, learning-loop reasoning — work where one extra IQ point pays for itself many times over. |
|
|
35
|
+
| **Tier 2** | sonnet | Balanced capability and cost | Review, documentation, devil's-advocacy, ecosystem specialists — work that needs depth but not the maximum. |
|
|
36
|
+
| **Tier 3** | haiku | Fast, low cost | Implementation, test writing, mechanical execution — well-defined work where speed and volume matter. |
|
|
37
|
+
|
|
38
|
+
## The match is to the work, not the agent
|
|
39
|
+
|
|
40
|
+
A Tier-3 agent (Builder, Tester) is **not** a junior agent. It is an agent doing work that is well-specified enough that a fast model handles it efficiently. Throwing opus at "implement this function the architect already designed" wastes tokens for no gain. Throwing haiku at "design a multi-file refactor across the codebase" wastes everyone's time on a thinner reasoning surface than the task demands. Tier is the framework's way of matching cost and capability to the actual cognitive shape of the work.
|
|
41
|
+
|
|
42
|
+
## Examples from the canonical roster
|
|
43
|
+
|
|
44
|
+
- **Architect** (id: `architect`) — Tier 1 (opus). Designs systems. Most expensive thinking the team does.
|
|
45
|
+
- **Security** (id: `security`) — Tier 1 (opus). Threat modelling and OWASP review. Mistakes are expensive; tier is conservative.
|
|
46
|
+
- **Cid** (id: `cid`) — Tier 1 (opus). Captain. Pre-task brief, post-task debrief. Reasoning over the whole session.
|
|
47
|
+
- **Reviewer** (id: `reviewer`) — Tier 2 (sonnet). Two-stage review. Needs depth but does not need to design from scratch.
|
|
48
|
+
- **Documentor** (id: `documentor`) — Tier 2 (sonnet). Writes `.purpose` files and updates `portal.yaml`.
|
|
49
|
+
- **Compliance** (id: `compliance`) — Tier 2 (sonnet). Symbol planner and coverage owner.
|
|
50
|
+
- **Builder** (id: `builder`) — Tier 3 (haiku). Implementation. Fast loop, narrow scope.
|
|
51
|
+
- **Tester** (id: `tester`) — Tier 3 (haiku). Test writing.
|
|
52
|
+
|
|
53
|
+
You will see the full tier breakdown in **N-para-451-roster-reference** — every active agent, one row each, with its tier called out.
|
|
54
|
+
|
|
55
|
+
## How to override
|
|
56
|
+
|
|
57
|
+
Tier is a *default*, not a contract. You can override the model for any agent on a per-project basis in `.paradigm/config.yaml` under the `model-resolution` section:
|
|
58
|
+
|
|
59
|
+
```yaml
|
|
60
|
+
model-resolution:
|
|
61
|
+
builder: claude-opus-4 # override builder up to opus for a research project
|
|
62
|
+
documentor: claude-haiku-4 # override documentor down to haiku to save cost
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Override sparingly. The defaults exist because they reflect a deliberate cost / capability trade-off across the team. If you find yourself overriding the same agent in every project, that is a signal worth bringing to the design — Loid (the intelligence officer) tracks override patterns precisely because they often surface a tier-default that should change.
|
|
66
|
+
|
|
67
|
+
## What tier does **not** mean
|
|
68
|
+
|
|
69
|
+
Tier does not say:
|
|
70
|
+
|
|
71
|
+
- How much an agent is "trusted" — every agent's authority is governed by its profile and (at v6.1) its authority claims, not its tier.
|
|
72
|
+
- How often an agent is invoked — Builder (Tier 3) runs more often than Architect (Tier 1) on most projects.
|
|
73
|
+
- Which agents are "core" versus "specialty" — that is a separate axis (see the roster reference).
|
|
74
|
+
|
|
75
|
+
Tier is exactly one thing: the default model the agent calls. Keep it that simple and the rest of the framework gets easier.
|
|
76
|
+
|
|
77
|
+
> **Coming in v6.1:** Paradigm introduces a separate concept also named "tier" for **notebooks** — tier-1 (transferable across projects, owned by the agent) versus tier-2 (project-local, owned by the project). The two "tier" concepts are orthogonal: an agent's *model tier* (this entry) is about cost and capability; a *notebook tier* (v6.1) is about scope and ownership of learned patterns. The naming collision is unfortunate; we keep them strictly separate in PARA 451 and 551 to avoid conflation. See `agent-owned-enforcement-plan.md`.
|
|
78
|
+
|
|
79
|
+
## Up next
|
|
80
|
+
|
|
81
|
+
The next entry — **N-para-451-roster-reference** — is where everything you have learned so far comes together: the canonical roster, with each agent's id, nickname, archetype, *and* tier all in a single scannable table.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-451-welcome
|
|
3
|
+
title: Welcome to PARA 451 — Agents Foundations
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-26'
|
|
7
|
+
updated: '2026-04-26'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-451
|
|
11
|
+
- agents
|
|
12
|
+
- welcome
|
|
13
|
+
symbols: []
|
|
14
|
+
difficulty: beginner
|
|
15
|
+
estimatedMinutes: 4
|
|
16
|
+
prerequisites:
|
|
17
|
+
- LP-para-101
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: authored
|
|
20
|
+
source: agents-course-phase-a-design.md
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Why this course exists
|
|
24
|
+
|
|
25
|
+
Paradigm's most differentiated feature is its **agent team**. Other AI tooling gives you one model and a chat box. Paradigm gives you a roster of named, persistent identities — each with its own role, its own notebook of learned patterns, and its own moment to step in. Architect designs. Builder implements. Reviewer reviews. Cid runs the briefing. Loid runs the learning loop. Scholar and Sheila pair on research. The team is the product.
|
|
26
|
+
|
|
27
|
+
Until now, the only place to learn about agents in University was a handful of entries inside PARA 401: Orchestration — an advanced course beginners rarely reach. Worse, those entries pre-date the v6.0.3 partners primitive and the three-layer identity model, so they describe an older version of the team. PARA 451 is the canonical, beginner-accessible introduction; the older PARA 401 agent entries are flagged as v6.1 retirement candidates and will be retired once 451 is broadly adopted.
|
|
28
|
+
|
|
29
|
+
## What you will learn
|
|
30
|
+
|
|
31
|
+
By the end of this course you will be able to answer:
|
|
32
|
+
|
|
33
|
+
- **What is an agent in Paradigm, and how is it different from "the model"?** An agent is a persistent identity with a profile, a notebook, and a role — not a single prompt or a single Claude call.
|
|
34
|
+
- **What is an archetype, and how is it different from a nickname or an id?** The three-layer identity model (id / nickname / archetype) is what makes the same agent recognisable across every project, while still letting you call it whatever you want on yours.
|
|
35
|
+
- **Who is on the team, and when do you call each one?** A single roster reference page covers all twenty-one currently-active agents — what each one is for, when it gets invoked, and which agents it pairs with.
|
|
36
|
+
- **What does it mean for two agents to be "partners"?** The partners primitive (shipped at v6.0.3) is how the framework expresses that some agents work meaningfully better as a unit. Scholar + Sheila is the canonical example.
|
|
37
|
+
- **How does orchestration actually run?** Faceted orchestration in Claude Code (true multi-agent, isolated Task contexts) versus sequential roleplay in Cursor and IDEs without Task tool support.
|
|
38
|
+
|
|
39
|
+
## Prerequisite
|
|
40
|
+
|
|
41
|
+
You should have completed **PARA 101: Foundations** — the five symbols, `.purpose` files, the basic shape of the `.paradigm/` directory. You do **not** need PARA 201, 301, or 401. The agent system is conceptually approachable, and learning the team early pays off in every project from then on.
|
|
42
|
+
|
|
43
|
+
## Course shape
|
|
44
|
+
|
|
45
|
+
PARA 451 is a single ordered learning path: notes interleaved with quizzes, ending in a mastery review. The full course is ~18 entries (about 35 minutes if you skim, 75-90 minutes if you take the quizzes seriously). This first batch of entries covers the foundation: identity, model tiers, and the roster. Subsequent batches add roster management, orchestration modes, the partners primitive deep-dive, and auto-rostering.
|
|
46
|
+
|
|
47
|
+
## What this course does **not** cover
|
|
48
|
+
|
|
49
|
+
Phase A — the entries in this course — is intentionally stable. We do not teach Rune's authority modes, the soft-block primitive, the notebook tier-1/tier-2 split, or the cross-project compounding runtime. Those topics are evolving as the v6.1 enforcement model lands, and they live in **PARA 551: Agents in Practice** (the follow-up course). The mastery review at the end of 451 will point you there when you are ready.
|
|
50
|
+
|
|
51
|
+
> **Coming in v6.1:** PARA 551 launches alongside the v6.1 enforcement-model release. It treats PARA 451 as a hard prerequisite. See `agent-owned-enforcement-plan.md`.
|
|
52
|
+
|
|
53
|
+
## Where to go from here
|
|
54
|
+
|
|
55
|
+
Continue to **N-para-451-what-is-an-agent** to start with the conceptual foundation, then move on to **N-para-451-identity-layers**. If you only have ten minutes and you want the team-at-a-glance, jump to **N-para-451-roster-reference** — it is the most-referenced page in the course, and you will come back to it often.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-451-what-is-an-agent
|
|
3
|
+
title: What Is an Agent in Paradigm?
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-26'
|
|
7
|
+
updated: '2026-04-26'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-451
|
|
11
|
+
- agents
|
|
12
|
+
- identity
|
|
13
|
+
- profile
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 5
|
|
17
|
+
prerequisites:
|
|
18
|
+
- N-para-451-welcome
|
|
19
|
+
category: paradigm-core
|
|
20
|
+
origin: authored
|
|
21
|
+
source: agents-course-phase-a-design.md
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## An agent is not a model invocation
|
|
25
|
+
|
|
26
|
+
The single most common confusion newcomers bring to Paradigm is the assumption that "an agent" is just "a Claude API call with a system prompt". It is not. A model invocation is **transient** — it begins, returns a response, and forgets everything. An **agent** is **persistent**: it has a name, a profile on disk, a notebook of patterns it has learned, and a role it fills across every session and (often) across every project on your machine.
|
|
27
|
+
|
|
28
|
+
Concretely, an agent in Paradigm is the union of four things:
|
|
29
|
+
|
|
30
|
+
| Part | What it is | Where it lives |
|
|
31
|
+
|------|------------|----------------|
|
|
32
|
+
| **Profile** | The agent's identity, role, voice, expertise, and partner declarations. | `~/.paradigm/agents/<id>.agent` |
|
|
33
|
+
| **Notebook** | What the agent has learned — patterns, gotchas, expertise entries promoted from journal observations. | `.paradigm/notebooks/<id>/` (project) or global notebook stores |
|
|
34
|
+
| **Roster entry** | Whether this agent is active on a given project, and at what tier. | `.paradigm/roster.yaml` |
|
|
35
|
+
| **Runtime invocation** | The Claude model call that happens when the agent is asked to do something — driven by the profile, fed the notebook, scoped by the roster. | At runtime, via `paradigm_orchestrate_inline` or the Claude Code Task tool |
|
|
36
|
+
|
|
37
|
+
Strip any one of these away and you do not have an agent any more — you have something less. A profile with no notebook is a fresh hire. A notebook with no profile is orphaned data. A roster entry pointing at a missing profile is a dangling reference. The agent is the *whole* construct.
|
|
38
|
+
|
|
39
|
+
## Why the framework has many of them
|
|
40
|
+
|
|
41
|
+
Paradigm could have given you one big general-purpose Claude with a long system prompt and called it a day. It deliberately does not. Two reasons:
|
|
42
|
+
|
|
43
|
+
1. **Specialised attention beats generalist attention.** When Architect is invoked, its profile narrows the model's attention to system design — multi-file planning, spec coherence, blast-radius reasoning. When Builder is invoked, its profile narrows attention to "follow the spec exactly, push back if unclear, ship the code". The same Claude model in both invocations produces measurably different output because the framing is different. A multi-agent team is a way of giving the model **multiple framings** in the same project, each at the right time.
|
|
44
|
+
|
|
45
|
+
2. **Persistent expertise compounds per role.** Architect's notebook accrues *design* patterns. Reviewer's notebook accrues *review* heuristics. Loid's notebook accrues *learning-loop* observations. If everything were one agent, the patterns would muddle. Splitting roles means each agent's notebook stays sharp in its lane, and the cross-project learning that Paradigm bets on (Swift patterns compounding everywhere Swift is detected, for example) actually makes sense.
|
|
46
|
+
|
|
47
|
+
The team metaphor is not decoration. It is the simplest accurate description of what is happening: a small group of specialised, persistent identities, each running on Claude, coordinating through the framework.
|
|
48
|
+
|
|
49
|
+
## Two scopes: globally installed, project-rostered
|
|
50
|
+
|
|
51
|
+
Every agent has two scopes you should keep straight from day one:
|
|
52
|
+
|
|
53
|
+
- **Globally installed** — the profile sits at `~/.paradigm/agents/<id>.agent` and exists once on your machine. You can install agents from GitHub or (in future) the nevr.land registry; the profile travels with you.
|
|
54
|
+
- **Project-rostered** — each project decides which agents from your global pool are active, via `.paradigm/roster.yaml`. Benching an agent on Project A leaves it untouched on Project B. The same global Architect can be active on six projects simultaneously and benched on a seventh.
|
|
55
|
+
|
|
56
|
+
This split is intentional. You curate your team once, globally. You shape your team per project, locally. The roster-management entry later in the course (**N-para-451-roster-management**) walks through the CLI and the `/paradigm:agents` skill that drive both halves.
|
|
57
|
+
|
|
58
|
+
## How agents are invoked at runtime
|
|
59
|
+
|
|
60
|
+
When the framework needs an agent to do something, two paths are common:
|
|
61
|
+
|
|
62
|
+
1. **Via the Task tool (Claude Code).** Each agent runs in an isolated Task subagent context, with the `paradigm:` prefix on its name (e.g. `paradigm:architect`, `paradigm:builder`). Each agent has its own conversation, its own memory, its own tool access — true multi-agent execution. This is **faceted orchestration**, the default in Claude Code.
|
|
63
|
+
2. **Via sequential roleplay.** In Cursor and other IDEs without Task tool support, the framework runs each agent as an inline persona switch in the same context — you see the agent's voice and reasoning, but they share memory rather than each holding their own. This is **sequential mode**, covered in **N-para-451-orchestration-modes**.
|
|
64
|
+
|
|
65
|
+
Either way, the agent's profile is loaded, its notebook is consulted, and its output is attributed back to its identity (so you can see in the orchestration log "Architect designed", "Builder implemented", "Reviewer flagged"). The mode shapes *how* the work runs; the identity is the same either way.
|
|
66
|
+
|
|
67
|
+
## Try this
|
|
68
|
+
|
|
69
|
+
Run `paradigm agent list`. The output is your project's roster — every agent currently active, with its id and nickname. Pick one (Architect is a good first target) and run `paradigm agent get architect`. You will see the profile fields: id, nickname, role, tier, partners, and a description of what the agent does. That on-disk record — not a conversation, not a single prompt — is the agent.
|
|
70
|
+
|
|
71
|
+
## Up next
|
|
72
|
+
|
|
73
|
+
Now that the agent concept is clear, **N-para-451-identity-layers** zooms into the three layers every agent has (id, nickname, archetype) and why each layer earns its keep. After that, **N-para-451-tiers** covers the orthogonal question of which Claude model an agent runs on by default.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-501-advanced-workflows
|
|
3
|
+
title: The Complete Workflow
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-501
|
|
11
|
+
- five-phase-workflow-preflight
|
|
12
|
+
- session-recovery-provides
|
|
13
|
+
- post-write-hook-tracks
|
|
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
|
+
## Putting It All Together
|
|
24
|
+
|
|
25
|
+
You have learned the five advanced systems individually. Now let's see how they work together in a complete development workflow. Every system has a role, and the handoffs between them create a feedback loop that gets smarter with every session.
|
|
26
|
+
|
|
27
|
+
## The Full Cycle
|
|
28
|
+
|
|
29
|
+
Here is the complete Paradigm workflow for a non-trivial task:
|
|
30
|
+
|
|
31
|
+
### Phase 1: Preflight
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
1. paradigm_session_recover → Load previous session context
|
|
35
|
+
2. paradigm_pm_preflight → Get compliance plan for the task
|
|
36
|
+
3. paradigm_habits_check(preflight) → Verify discovery habits are followed
|
|
37
|
+
4. paradigm_ripple → Check impact of planned changes
|
|
38
|
+
5. paradigm_wisdom_context → Get team knowledge for affected symbols
|
|
39
|
+
6. paradigm_practice_context → Get habit-aware warnings for symbols
|
|
40
|
+
7. paradigm_session_checkpoint(planning) → Save plan before coding
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Notice the layering: session recovery provides continuity, preflight ensures preparation, habits check enforces discovery discipline, ripple and wisdom provide context, practice context adds behavioral awareness, and the checkpoint enables crash recovery.
|
|
44
|
+
|
|
45
|
+
### Phase 2: Implementation
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
8. Write code → Implement the feature
|
|
49
|
+
→ Post-write hook fires → Tracks edited files in .pending-review
|
|
50
|
+
→ Post-write advisory → Reminds about .purpose coverage
|
|
51
|
+
9. Update .purpose files → Document new/changed symbols
|
|
52
|
+
10. Update portal.yaml → Add routes and gates (if applicable)
|
|
53
|
+
11. paradigm_session_checkpoint(implementing) → Save progress
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The post-write hook acts as a running tally. Every source file edit is tracked, and periodic reminders keep documentation top of mind. Updating .purpose and portal.yaml during implementation (not after) prevents the stop hook from blocking at the end.
|
|
57
|
+
|
|
58
|
+
### Phase 3: Validation
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
12. paradigm_flow_check → Verify flows are complete
|
|
62
|
+
13. paradigm_aspect_check → Verify aspect anchors are valid
|
|
63
|
+
14. paradigm_pm_postflight → Run post-implementation governance
|
|
64
|
+
15. paradigm_habits_check(postflight) → Verify documentation/testing habits
|
|
65
|
+
16. paradigm_session_checkpoint(validating) → Save pre-test state
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Validation catches issues before they become stop hook violations. Flow validation ensures multi-step processes are complete. Aspect checks confirm anchors point to real code. Postflight governance catches missing .purpose files and undefined gates.
|
|
69
|
+
|
|
70
|
+
### Phase 4: Recording
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
17. paradigm_lore_record → Record the session's work
|
|
74
|
+
18. paradigm_history_record → Log implementation to symbol history
|
|
75
|
+
19. paradigm_reindex → Rebuild the symbol index
|
|
76
|
+
20. paradigm_session_checkpoint(complete) → Mark task complete
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Recording preserves institutional knowledge. The lore entry captures what was done and why. History record logs implementation details to individual symbol timelines. Reindexing ensures the symbol index reflects all changes.
|
|
80
|
+
|
|
81
|
+
### Phase 5: Commit
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
21. git commit → Commit changes
|
|
85
|
+
→ Pre-commit hook fires → Auto-rebuilds index, stages updated files
|
|
86
|
+
→ Stop hook fires → Validates all compliance checks
|
|
87
|
+
22. If stop hook blocks → Fix violations, re-attempt
|
|
88
|
+
23. If stop hook passes → Session complete
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
The commit phase is where enforcement happens. The pre-commit hook ensures the index is fresh. The stop hook validates everything: .purpose coverage, portal.yaml compliance, aspect anchors, lore recording, and pending review freshness.
|
|
92
|
+
|
|
93
|
+
## How Systems Reinforce Each Other
|
|
94
|
+
|
|
95
|
+
The power of the complete workflow is in the feedback loops:
|
|
96
|
+
|
|
97
|
+
**Sentinel catches what Habits miss.** If an agent skips the `ripple-before-modify` habit and introduces a breaking change, Sentinel records the incident. The practice profile then shows that skipping ripple correlates with incidents — evidence to upgrade the habit severity.
|
|
98
|
+
|
|
99
|
+
**Lore preserves what Sessions forget.** Session breadcrumbs and checkpoints are ephemeral — they expire after 7 days. Lore entries are permanent. The checkpoint gets you through a crash; the lore entry gets the team through the next 6 months.
|
|
100
|
+
|
|
101
|
+
**Wisdom surfaces what Lore accumulates.** Lore entries record individual sessions. Wisdom distills patterns across sessions: "every time we modify #payment-service, check for null references on the refund object." Wisdom is lore, refined.
|
|
102
|
+
|
|
103
|
+
**Hooks enforce what Habits recommend.** Habits at `advisory` severity are suggestions. The stop hook at `block` severity is enforcement. The workflow starts with advice (habits check) and ends with enforcement (stop hook). This graduated approach teaches good behavior before punishing bad behavior.
|
|
104
|
+
|
|
105
|
+
## Capstone Scenario
|
|
106
|
+
|
|
107
|
+
Imagine you are adding a refund endpoint to a payment system. Here is how the complete workflow plays out:
|
|
108
|
+
|
|
109
|
+
1. **Session recover** reveals the previous session added the payment processor but did not add refunds
|
|
110
|
+
2. **Preflight** shows you need to check `#payment-service`, `$checkout-flow`, and `^authenticated`
|
|
111
|
+
3. **Habits check** confirms you called ripple and wisdom — discovery habits followed
|
|
112
|
+
4. **Ripple** shows `#payment-service` has 4 downstream dependents
|
|
113
|
+
5. **Wisdom** warns: "always null-check refund objects — see incident INC-042"
|
|
114
|
+
6. You implement the refund endpoint with proper null checks
|
|
115
|
+
7. **Post-write hook** tracks 5 edited files in `.pending-review`
|
|
116
|
+
8. You update .purpose with `#refund-handler` and portal.yaml with `^refund-eligible` gate
|
|
117
|
+
9. **Postflight** confirms all gates are declared and flows are valid
|
|
118
|
+
10. **Lore record** captures the session with the decision to require `^refund-eligible`
|
|
119
|
+
11. **Commit** triggers pre-commit (index rebuild) and stop hook (all checks pass)
|
|
120
|
+
12. Three weeks later, a similar null reference hits — **Sentinel** matches pattern `payment-null-ref-001` and resolves it in 5 minutes using the recorded fix
|
|
121
|
+
|
|
122
|
+
This is Paradigm at full power: every system contributing, every session building on the last, every incident making the next resolution faster.
|
|
@@ -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.
|