@a-company/paradigm 5.38.0 → 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-OATWIRHP.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/{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/{calibration-OLJYB5HN.js → calibration-BDHGYJOK.js} +1 -1
- package/dist/{chunk-5QOCKWK5.js → chunk-4PSD5R7N.js} +2 -2
- package/dist/{chunk-HOBHJPTL.js → chunk-6SKSV5B2.js} +1 -1
- package/dist/{chunk-4L7665QV.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-4VKSEOXZ.js → chunk-LPBCQM5Y.js} +3 -3
- 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-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-DOCDDDTD.js → chunk-YNDPSWOE.js} +5 -5
- package/dist/chunk-Z5QW6USC.js +2 -0
- package/dist/{compliance-D7GD6ZYC.js → compliance-BNFWQPKM.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-MF55KQZH.js} +1 -1
- package/dist/{dist-KGRCLBJP-2QAPFYNF.js → dist-GQ42YS5N-4HIJZVBB.js} +10 -10
- 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-FVZR3YJ4.js → flow-BGXOVE2V.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-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-M5PBZBJQ.js → orchestrate-RID7HHHH.js} +1 -1
- package/dist/{platform-server-DNAMH4YI.js → platform-server-UD45NTGV.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-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/{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-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-FEWSYS3Y.js → setup-ZSEC72BS.js} +1 -1
- package/dist/{shift-PC6C7NUX.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/{spawn-M5BAV252.js → spawn-UH5RENSE.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-MGT66HZQ.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-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/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/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/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-IZSBGW6E.js} +0 -0
- /package/templates/paradigm/specs/{scan.md → probe.md} +0 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-201-symbol-naming
|
|
3
|
+
title: Symbol Naming Conventions
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-201
|
|
11
|
+
- all-symbol-ids
|
|
12
|
+
- components-noun-role-payment-service
|
|
13
|
+
- gates-resource-role-or
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 3
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-201.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Consistency Is the Goal
|
|
24
|
+
|
|
25
|
+
Naming conventions exist so that anyone — human or AI — can predict what a symbol is called without looking it up. If your payment service is sometimes `#PaymentService`, sometimes `#payment-service`, and sometimes `#paymentSvc`, agents waste tokens searching and developers waste time guessing. Paradigm defines clear naming rules for each symbol type.
|
|
26
|
+
|
|
27
|
+
## The Base Rule: kebab-case for IDs
|
|
28
|
+
|
|
29
|
+
All symbol IDs in `.purpose` files use **kebab-case**:
|
|
30
|
+
|
|
31
|
+
```yaml
|
|
32
|
+
# Correct
|
|
33
|
+
#payment-service:
|
|
34
|
+
#user-profile:
|
|
35
|
+
#cart-item-list:
|
|
36
|
+
|
|
37
|
+
# Incorrect
|
|
38
|
+
#PaymentService: # PascalCase is for display, not IDs
|
|
39
|
+
#payment_service: # No underscores
|
|
40
|
+
#paymentService: # No camelCase
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
This applies to all five symbol types: `#component-name`, `$flow-name`, `^gate-name`, `!signal-name`, `~aspect-name`.
|
|
44
|
+
|
|
45
|
+
## Component Naming (`#`)
|
|
46
|
+
|
|
47
|
+
Components follow the base kebab-case rule, with one exception: **class-like components** can use PascalCase in display names and code references while keeping kebab-case in the `.purpose` ID:
|
|
48
|
+
|
|
49
|
+
```yaml
|
|
50
|
+
components:
|
|
51
|
+
#payment-service: # kebab-case ID
|
|
52
|
+
description: PaymentService class # PascalCase in description is fine
|
|
53
|
+
file: PaymentService.ts # PascalCase file names are fine
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Naming patterns for components:
|
|
57
|
+
- **Services**: `#noun-service` — `#payment-service`, `#email-service`, `#auth-service`
|
|
58
|
+
- **Handlers**: `#noun-handler` — `#login-handler`, `#webhook-handler`
|
|
59
|
+
- **Stores/State**: `#noun-store` — `#user-store`, `#cart-store`
|
|
60
|
+
- **Utilities**: `#noun-utils` or `#verb-helper` — `#date-utils`, `#format-helper`
|
|
61
|
+
|
|
62
|
+
## Flow Naming (`$`)
|
|
63
|
+
|
|
64
|
+
Flows describe processes, so they use **noun-flow** or **verb-noun-flow** patterns:
|
|
65
|
+
|
|
66
|
+
```yaml
|
|
67
|
+
# Good
|
|
68
|
+
$checkout-flow
|
|
69
|
+
$user-onboarding
|
|
70
|
+
$password-reset-flow
|
|
71
|
+
$daily-report-generation
|
|
72
|
+
|
|
73
|
+
# Bad
|
|
74
|
+
$doCheckout # Avoid imperative verb-only names
|
|
75
|
+
$flow1 # Non-descriptive
|
|
76
|
+
$theProcessOfCheckingOut # Too verbose
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
The `-flow` suffix is optional but recommended for clarity. `$checkout-flow` is more immediately recognizable as a flow than `$checkout` (which could be confused with a component).
|
|
80
|
+
|
|
81
|
+
## Gate Naming (`^`)
|
|
82
|
+
|
|
83
|
+
Gates use a **resource-role** or **condition** pattern:
|
|
84
|
+
|
|
85
|
+
```yaml
|
|
86
|
+
# Resource-role pattern
|
|
87
|
+
^authenticated # Base auth
|
|
88
|
+
^project-admin # Admin of a project
|
|
89
|
+
^project-member # Member of a project
|
|
90
|
+
^comment-author # Author of a comment
|
|
91
|
+
^team-owner # Owner of a team
|
|
92
|
+
|
|
93
|
+
# Condition pattern
|
|
94
|
+
^email-verified # Email has been verified
|
|
95
|
+
^payment-method-exists # User has a payment method
|
|
96
|
+
^subscription-active # Subscription is not expired
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Avoid vague names like `^check1` or `^gate-a`. The name should describe what the gate verifies.
|
|
100
|
+
|
|
101
|
+
## Signal Naming (`!`)
|
|
102
|
+
|
|
103
|
+
Signals represent events that have already happened, so they use **past-tense** naming:
|
|
104
|
+
|
|
105
|
+
```yaml
|
|
106
|
+
# Good — past tense describes what happened
|
|
107
|
+
!payment-completed
|
|
108
|
+
!user-created
|
|
109
|
+
!login-failed
|
|
110
|
+
!order-shipped
|
|
111
|
+
!cache-invalidated
|
|
112
|
+
|
|
113
|
+
# Bad — present tense or imperative
|
|
114
|
+
!process-payment # Sounds like a command, not an event
|
|
115
|
+
!creating-user # Progressive tense is ambiguous
|
|
116
|
+
!login # Too vague — login succeeded or failed?
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Past tense makes the intent clear: the signal fires *after* something happened. `!payment-completed` means the payment is done; listeners can react to the completed event.
|
|
120
|
+
|
|
121
|
+
## Aspect Naming (`~`)
|
|
122
|
+
|
|
123
|
+
Aspects describe rules or qualities, using **adjective** or **past-participle** patterns:
|
|
124
|
+
|
|
125
|
+
```yaml
|
|
126
|
+
# Good
|
|
127
|
+
~audit-required
|
|
128
|
+
~rate-limited
|
|
129
|
+
~cached
|
|
130
|
+
~encrypted-at-rest
|
|
131
|
+
~idempotent
|
|
132
|
+
|
|
133
|
+
# Bad
|
|
134
|
+
~doAudit # Imperative — sounds like an action
|
|
135
|
+
~auditStuff # Vague and informal
|
|
136
|
+
~Aspect1 # Non-descriptive
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Aspect names should read naturally in a sentence: "This service is ~rate-limited" or "This endpoint is ~audit-required."
|
|
140
|
+
|
|
141
|
+
## Summary Table
|
|
142
|
+
|
|
143
|
+
| Symbol | Pattern | Examples |
|
|
144
|
+
|--------|---------|----------|
|
|
145
|
+
| `#` | `noun-role` | `#payment-service`, `#login-handler` |
|
|
146
|
+
| `$` | `noun-flow` | `$checkout-flow`, `$onboarding` |
|
|
147
|
+
| `^` | `resource-role` or `condition` | `^project-admin`, `^email-verified` |
|
|
148
|
+
| `!` | `past-tense-event` | `!payment-completed`, `!login-failed` |
|
|
149
|
+
| `~` | `adjective` / `past-participle` | `~rate-limited`, `~audit-required` |
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-301-context-management
|
|
3
|
+
title: Context Management
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-301
|
|
11
|
+
- paradigmsessionhealth-for-monitoring
|
|
12
|
+
- paradigmhandoffprepare-for-session
|
|
13
|
+
- paradigmsessionrecover-for-continuity
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 2
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-301.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Context Management
|
|
24
|
+
|
|
25
|
+
AI agents operate within a finite context window. Every file read, every tool call response, and every message in the conversation consumes tokens from that budget. When the context fills up, the agent loses the ability to recall earlier information, make coherent plans, or maintain awareness of all the changes it has made. Paradigm provides tools to monitor, manage, and gracefully handle context limits.
|
|
26
|
+
|
|
27
|
+
**`paradigm_session_health`** monitors current context usage. Call it periodically during long sessions (every 10-15 tool calls is a good cadence) to get a recommendation. The response tells you whether to "continue" (plenty of room), "be-cautious" (usage is climbing), or "handoff-soon" (>85% consumed). You can optionally pass your estimated total tokens and context window size for more accurate assessment.
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
paradigm_session_health({
|
|
31
|
+
contextWindowSize: 200000,
|
|
32
|
+
estimatedTotalTokens: 150000
|
|
33
|
+
})
|
|
34
|
+
// Recommendation: "handoff-soon" -- context at ~75%, prepare handoff
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
When a handoff is needed, **`paradigm_handoff_prepare`** creates a structured summary of the current session. It captures what was done, which symbols were touched, which files were modified, what still needs to happen, and any open questions. This summary becomes the starting point for the next session.
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
paradigm_handoff_prepare({
|
|
41
|
+
summary: "Implemented Apple Pay in checkout flow",
|
|
42
|
+
symbolsTouched: ["#payment-service", "$checkout-flow", "#apple-pay-button"],
|
|
43
|
+
modifiedFiles: ["src/services/payment.ts", "src/components/checkout/ApplePayButton.tsx"],
|
|
44
|
+
nextSteps: ["Add unit tests for Apple Pay handler", "Update portal.yaml with new gates"],
|
|
45
|
+
openQuestions: ["Should we support Apple Pay in the mobile app too?"]
|
|
46
|
+
})
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
On the receiving end, **`paradigm_session_recover`** loads breadcrumbs from the previous session. A new agent session calls this at startup to understand what was done before, pick up where the last session left off, and avoid redoing work.
|
|
50
|
+
|
|
51
|
+
For cost awareness, **`paradigm_session_stats`** shows the current session's MCP interactions, estimated token usage, and cost breakdown. This is useful for understanding which operations are expensive and optimizing your workflow.
|
|
52
|
+
|
|
53
|
+
The context management workflow forms a cycle: **monitor** usage with context_check, **prepare** handoff when limits approach, **recover** in new sessions with session_recover, and **track** costs with session_stats. Mastering this cycle means you can handle tasks that are larger than any single context window by splitting them across multiple sessions without losing progress.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-301-decisions
|
|
3
|
+
title: The Decision Store
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-18'
|
|
7
|
+
updated: '2026-04-18'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-301
|
|
11
|
+
- decision-store
|
|
12
|
+
- paradigmdecisionrecord
|
|
13
|
+
- companion-lore-pattern
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 4
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: authored
|
|
20
|
+
source: v6.0-content-fix
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Why Decisions Got Their Own Store
|
|
24
|
+
|
|
25
|
+
Through Paradigm v5.x, architectural decisions lived in two places at once: as a `decision` lore type (date-partitioned, narrative-shaped) and as a `decision` wisdom entry (symbol-keyed, ADR-shaped). Both stores carried roughly the same content, neither was canonical, and the inconsistency caused predictable problems — agents recorded the same choice in both places, search returned conflicting versions, and "what did we decide about X?" was answered by reading two stores and reconciling.
|
|
26
|
+
|
|
27
|
+
In v6.0 the decision (D3 in the locked v6 synthesis) was to give decisions a single dedicated home. Lore stays the time-partitioned narrative timeline. Wisdom stays the symbol-keyed playbook (preferences and antipatterns). Decisions move to `.paradigm/decisions/` as `TD-*` entries with the full ADR shape — and the `decision` lore type is hard-removed.
|
|
28
|
+
|
|
29
|
+
## The New Tools
|
|
30
|
+
|
|
31
|
+
The decision store is reached through two MCP tools (CLI: `paradigm decision record` / `paradigm decision search`):
|
|
32
|
+
|
|
33
|
+
- **`paradigm_decision_record`** — Records a new decision. Required: `title`, `decision`, `rationale`, `participants`. Optional: `alternatives_considered`, `symbols_affected`, `status`, `tags`, `context`, `consequences`, `superseded_by`, `supersedes`. Returns the canonical `TD-*` id and the companion lore id.
|
|
34
|
+
- **`paradigm_decision_search`** — Filters the store by `status`, `participant`, `symbol`, `tag`, `dateFrom`, `dateTo`. Pass `summary: true` for an aggregate view.
|
|
35
|
+
|
|
36
|
+
A recorded decision looks like:
|
|
37
|
+
|
|
38
|
+
```yaml
|
|
39
|
+
id: TD-2026-04-18-001
|
|
40
|
+
title: "Adopt RS256 over HS256 for JWT signing"
|
|
41
|
+
timestamp: "2026-04-18T15:30:00Z"
|
|
42
|
+
participants:
|
|
43
|
+
- { id: "human/matt", role: human, stance: proposed }
|
|
44
|
+
- { id: "a-paradigm/security", role: agent, stance: supported }
|
|
45
|
+
- { id: "a-paradigm/architect", role: agent, stance: supported }
|
|
46
|
+
- { id: "a-paradigm/builder", role: agent, stance: dissented }
|
|
47
|
+
decision: "Sign all JWTs with RS256 (RSA)"
|
|
48
|
+
rationale: "Public-key verification lets downstream services validate without sharing the signing secret. Builder dissented over rotation overhead — accepted as a known cost."
|
|
49
|
+
alternatives_considered:
|
|
50
|
+
- option: "HS256 (shared secret)"
|
|
51
|
+
rejected_because: "Every verifier needs the secret; rotation is invasive across services."
|
|
52
|
+
symbols_affected: ["#auth-middleware", "^authenticated"]
|
|
53
|
+
status: active
|
|
54
|
+
tags: [security, auth]
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## The Companion-Lore Pattern
|
|
58
|
+
|
|
59
|
+
Every successful `paradigm_decision_record` call writes two artifacts:
|
|
60
|
+
|
|
61
|
+
1. The canonical decision in `.paradigm/decisions/TD-*.yaml`.
|
|
62
|
+
2. A companion lore entry of `type: 'insight'` in `.paradigm/lore/entries/{date}/L-*.yaml`, with `references.decision_id` pointing back at the TD- id, and the `companion-lore` + `decision-reference` tags applied.
|
|
63
|
+
|
|
64
|
+
This split solves the problem the v5.x dual-store approach created. The decision is *topic-addressable* — search by symbol, status, or participant and you get one canonical answer. The companion lore is *time-addressable* — scrolling the project timeline forward, the moment the decision was made still surfaces with a one-line summary and a back-reference to the full record.
|
|
65
|
+
|
|
66
|
+
The companion write is best-effort. If it fails (filesystem error, permission issue), the decision still records — the timeline coverage is a nice-to-have, not a correctness requirement. The decision record is the source of truth.
|
|
67
|
+
|
|
68
|
+
## How It Differs from `paradigm_wisdom_record({type:'decision'})`
|
|
69
|
+
|
|
70
|
+
The v5.x path is soft-deprecated and increasingly hard-removed:
|
|
71
|
+
|
|
72
|
+
| Concern | `wisdom_record({type:'decision'})` (v5) | `paradigm_decision_record` (v6) |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| Storage | `.paradigm/wisdom/decisions.yaml` (single file) | `.paradigm/decisions/TD-*.yaml` (one file per decision) |
|
|
75
|
+
| ID shape | `dec-001`, freeform | `TD-{date}-{seq}`, structured |
|
|
76
|
+
| Participants | Optional, freeform string | Structured array with stance enum |
|
|
77
|
+
| Alternatives | Optional, prose | Structured array with `rejected_because` |
|
|
78
|
+
| Status lifecycle | None | `active` / `proposed` / `superseded` / `deprecated` / `rejected` |
|
|
79
|
+
| Bidirectional supersede | One-way (`superseded_by`) | Two-way (`superseded_by` + `supersedes`) |
|
|
80
|
+
| Companion timeline coverage | Manual | Automatic |
|
|
81
|
+
| v6.0 acceptance | `paradigm_wisdom_record` rejects `type:'decision'` | First-class |
|
|
82
|
+
|
|
83
|
+
If you call `paradigm_wisdom_record({type:'decision'})` against a v6 install, you get a structured rejection envelope (`code: 'wisdom_decision_removed'`) pointing you at `paradigm_decision_record`. Same shape as the lore-record rejection envelope, so a calling agent can auto-retry without human intervention.
|
|
84
|
+
|
|
85
|
+
## Migrating v1/v2 Lore Decisions
|
|
86
|
+
|
|
87
|
+
Projects that recorded `type: decision` lore entries through v5 are not stranded. On read, the storage layer remaps `type: decision` to `type: insight` and applies the `v6-migrated:from-decision` tag for forensic recovery. Search for the old type still works via the tag (`paradigm_lore_search({ tag: 'v6-migrated:from-decision' })`).
|
|
88
|
+
|
|
89
|
+
If you want the old entries promoted to canonical decisions in the new store, do it deliberately — read each migrated entry, decide whether it still represents an active decision, and call `paradigm_decision_record` with the structured shape. There is no automatic backfill because the v1/v2 entries lack the structured participant/alternative data the new shape requires.
|
|
90
|
+
|
|
91
|
+
## When to Use Which Tool
|
|
92
|
+
|
|
93
|
+
- **Standalone architectural decision** (no implementation code): `paradigm_decision_record`. The companion lore covers the timeline.
|
|
94
|
+
- **Decision made *during* a work session** (alongside implementation): record an `agent-session` lore entry and put the decision in the entry's `decisions` field. If the choice deserves canonical status (search by symbol, supersede tracking, status lifecycle), *also* call `paradigm_decision_record` — the two are not mutually exclusive.
|
|
95
|
+
- **Team convention or coding standard**: `paradigm_wisdom_record({type:'preference', ...})`.
|
|
96
|
+
- **"Don't do X, do Y instead"**: `paradigm_wisdom_record({type:'antipattern', ...})`.
|
|
97
|
+
- **Tracking what changed and when**: `paradigm_history_record` (implementation events).
|
|
98
|
+
|
|
99
|
+
> **Going deeper:** PARA 501 covers the lore system in detail (including the v6 entry types and the decisions-have-their-own-store callout). PARA 601 covers the three knowledge streams (work-log, journal, decisions) and how the companion-lore pattern fits into the broader stream architecture.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-301-doctor-and-validation
|
|
3
|
+
title: Doctor & Validation
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-301
|
|
11
|
+
- paradigm-doctor-cli
|
|
12
|
+
- paradigmpurposevalidate-mcp-tool
|
|
13
|
+
- paradigmflowcheck
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 3
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-301.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Doctor & Validation
|
|
24
|
+
|
|
25
|
+
As a Paradigm project evolves, its metadata can drift out of sync with the actual code. A component gets renamed but its `.purpose` file still references the old name. A gate is added to `portal.yaml` but never implemented. An aspect loses its code anchor when someone refactors the file it pointed to. Paradigm's validation tools catch these inconsistencies before they cause confusion.
|
|
26
|
+
|
|
27
|
+
The `paradigm doctor` CLI command runs a comprehensive health check across your entire project. It validates several categories of issues:
|
|
28
|
+
|
|
29
|
+
- **Purpose file integrity**: Are all `.purpose` files valid YAML? Do all symbol references use correct prefixes?
|
|
30
|
+
- **Portal.yaml consistency**: Do routes reference gates that are actually defined? Are there gates defined but never used?
|
|
31
|
+
- **Aspect anchor verification**: Do all `~aspect` symbols have anchors? Do those anchors point to files and lines that still exist?
|
|
32
|
+
- **Orphaned symbol detection**: Are there symbols defined in `.purpose` files that are never referenced anywhere else?
|
|
33
|
+
- **Cross-reference validation**: When `#checkout-form` says it uses `$checkout-flow`, does that flow actually exist?
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
$ paradigm doctor
|
|
37
|
+
|
|
38
|
+
Checking .purpose files...
|
|
39
|
+
src/features/checkout/.purpose - OK
|
|
40
|
+
src/features/auth/.purpose - WARNING: #legacy-login referenced but not defined
|
|
41
|
+
src/services/.purpose - OK
|
|
42
|
+
|
|
43
|
+
Checking portal.yaml...
|
|
44
|
+
^authenticated - OK (used in 12 routes)
|
|
45
|
+
^project-admin - WARNING: defined but used in 0 routes
|
|
46
|
+
|
|
47
|
+
Checking aspects...
|
|
48
|
+
~audit-required - ERROR: anchor src/middleware/audit.ts:15-35 not found
|
|
49
|
+
~rate-limited - OK
|
|
50
|
+
|
|
51
|
+
Results: 2 warnings, 1 error
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
For more targeted validation, the MCP tool `paradigm_purpose_validate` lets you check a specific `.purpose` file or validate all files. You can also include portal.yaml validation with the `includePortal` parameter. This is useful after making changes to a specific area -- run validation on just the files you touched rather than the entire project.
|
|
55
|
+
|
|
56
|
+
The `paradigm_flow_check` tool specifically validates flow definitions. It checks that gates referenced in flow steps exist in `portal.yaml`, that actions described in steps have corresponding implementations in the codebase (when `checkImplementation` is true), and that signals emitted during the flow are properly defined.
|
|
57
|
+
|
|
58
|
+
A good rhythm is to run `paradigm doctor` after major changes (adding features, refactoring, renaming symbols) and before committing. Many teams integrate it into their pre-commit hooks or CI pipelines. Think of it as a linter for your Paradigm metadata -- catching problems early is always cheaper than debugging them later.
|
|
59
|
+
|
|
60
|
+
### Clarification Markers
|
|
61
|
+
|
|
62
|
+
When a requirement is ambiguous or incomplete in a `.purpose` file, use the `[NEEDS CLARIFICATION: ...]` marker format instead of guessing. For example:
|
|
63
|
+
|
|
64
|
+
```yaml
|
|
65
|
+
components:
|
|
66
|
+
payment-processor:
|
|
67
|
+
description: "Processes payments via Stripe [NEEDS CLARIFICATION: should this support PayPal fallback?]"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Clarification markers are reported as **warnings** (not errors) by both `paradigm doctor` and `paradigm_purpose_validate`. They do not block validation or break builds, but they surface during health checks to remind the team that a design question remains open. The exact format `[NEEDS CLARIFICATION: <question>]` is required -- the tooling scans for this specific prefix in all description fields across `.purpose` files. Resolve all markers before shipping by replacing them with the clarified text.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-301-enforcement-levels
|
|
3
|
+
title: Enforcement Levels
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-301
|
|
11
|
+
- three-enforcement-levels
|
|
12
|
+
- minimal-is-the
|
|
13
|
+
- 13-checks-control
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 3
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-301.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## The Three Enforcement Levels
|
|
24
|
+
|
|
25
|
+
Paradigm enforcement is configurable. Not every project needs the same rigor — a weekend prototype has different needs than a healthcare platform. Enforcement levels control which compliance checks **block** (stop you), **warn** (notify but continue), or are **off** (silent).
|
|
26
|
+
|
|
27
|
+
### Minimal — For Learning and Prototyping
|
|
28
|
+
|
|
29
|
+
Minimal enforcement is the default for new projects created by `paradigm shift`. Only two checks are active, both as warnings:
|
|
30
|
+
|
|
31
|
+
- `purpose-coverage` — warns if source directories lack `.purpose` files
|
|
32
|
+
- `habits-blocking` — warns if defined habits are being violated
|
|
33
|
+
|
|
34
|
+
Everything else is off. This means hooks never block you, so you can learn Paradigm without friction. You can always run checks manually with `paradigm doctor`.
|
|
35
|
+
|
|
36
|
+
### Balanced — For Active Development
|
|
37
|
+
|
|
38
|
+
When your team is comfortable with Paradigm, upgrade to balanced. This is where most teams operate:
|
|
39
|
+
|
|
40
|
+
- **Blocks on:** `purpose-coverage` (must have purpose files), `habits-blocking` (must follow habits)
|
|
41
|
+
- **Warns on:** `purpose-exists`, `portal-gates`, `aspect-anchors`, `purpose-freshness`, `lore-required`, `purpose-required-patterns`, `drift-detection`, `portal-compliance`, `orchestration-required`
|
|
42
|
+
- **Off:** `aspect-advisory`, `graduation-tracking`
|
|
43
|
+
|
|
44
|
+
Balanced catches problems early without being oppressive. The stop hook blocks on missing purpose files but lets you work freely otherwise.
|
|
45
|
+
|
|
46
|
+
### Strict — For Regulated Domains
|
|
47
|
+
|
|
48
|
+
Healthcare, finance, legal — domains where compliance is not optional. Strict blocks on nearly everything:
|
|
49
|
+
|
|
50
|
+
- **Blocks on:** `purpose-coverage`, `purpose-exists`, `portal-gates`, `aspect-anchors`, `lore-required`, `habits-blocking`, `purpose-required-patterns`, `drift-detection`, `portal-compliance`, `orchestration-required`
|
|
51
|
+
- **Warns on:** `purpose-freshness`, `aspect-advisory`, `graduation-tracking`
|
|
52
|
+
|
|
53
|
+
With strict enforcement, you cannot commit without purpose files, portal gates, lore records, and passing drift checks. This ensures every change is documented and traceable.
|
|
54
|
+
|
|
55
|
+
## Configuration
|
|
56
|
+
|
|
57
|
+
Set the level in `.paradigm/config.yaml`:
|
|
58
|
+
|
|
59
|
+
```yaml
|
|
60
|
+
enforcement:
|
|
61
|
+
level: balanced # minimal | balanced | strict
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Override individual checks when a preset does not quite fit:
|
|
65
|
+
|
|
66
|
+
```yaml
|
|
67
|
+
enforcement:
|
|
68
|
+
level: balanced
|
|
69
|
+
checks:
|
|
70
|
+
orchestration-required: block # Upgrade from warn to block
|
|
71
|
+
lore-required: off # Downgrade — we don't need lore yet
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Per-check overrides take precedence over the preset. This lets you start with a base level and tune specific checks to match your team's workflow.
|
|
75
|
+
|
|
76
|
+
## The 13 Checks
|
|
77
|
+
|
|
78
|
+
| Check | What It Validates |
|
|
79
|
+
|-------|------------------|
|
|
80
|
+
| `purpose-coverage` | Source directories have .purpose files |
|
|
81
|
+
| `purpose-exists` | Referenced purpose files actually exist on disk |
|
|
82
|
+
| `portal-gates` | Routes in portal.yaml have required gates defined |
|
|
83
|
+
| `aspect-anchors` | Aspect anchors point to valid code locations |
|
|
84
|
+
| `purpose-freshness` | Purpose files are not stale (content matches code) |
|
|
85
|
+
| `aspect-advisory` | Components have at least one aspect (1:1 ratio) |
|
|
86
|
+
| `lore-required` | Sessions modifying 3+ files record lore |
|
|
87
|
+
| `habits-blocking` | Defined habits are being followed |
|
|
88
|
+
| `purpose-required-patterns` | Required patterns (flows, gates) are present |
|
|
89
|
+
| `drift-detection` | Aspect anchor code has not drifted |
|
|
90
|
+
| `portal-compliance` | Portal.yaml matches actual route definitions |
|
|
91
|
+
| `graduation-tracking` | Habits are graduating through automation tiers |
|
|
92
|
+
| `orchestration-required` | Complex tasks use multi-agent orchestration |
|
|
93
|
+
|
|
94
|
+
## Progression Strategy
|
|
95
|
+
|
|
96
|
+
Most teams follow this path:
|
|
97
|
+
|
|
98
|
+
1. **Start minimal** — learn Paradigm, build habits, no blocking
|
|
99
|
+
2. **Move to balanced** after 1-2 weeks — catch issues early, still flexible
|
|
100
|
+
3. **Upgrade to strict** for production-critical or regulated codebases
|
|
101
|
+
|
|
102
|
+
You can change levels at any time. The switch is immediate — no migration needed.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-301-fragility-tracking
|
|
3
|
+
title: Fragility & Stability
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-301
|
|
11
|
+
- paradigmhistoryfragility
|
|
12
|
+
- stability-scores
|
|
13
|
+
- fragile-symbol-indicators
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 2
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-301.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Fragility & Stability
|
|
24
|
+
|
|
25
|
+
Not all parts of a codebase are equally stable. Some symbols have been rock-solid for months, while others seem to break every time someone touches them. Paradigm's fragility tracking system quantifies this by analyzing the history log to produce **stability scores** for each symbol.
|
|
26
|
+
|
|
27
|
+
The tool `paradigm_history_fragility` accepts an array of symbols and returns a stability assessment for each one. The score considers several factors: how frequently the symbol has been changed, how many rollbacks it has experienced, the ratio of fixes to features, and the recency of changes. A symbol that was implemented once six months ago and never touched again has high stability. A symbol that has been refactored three times in two weeks with one rollback is flagged as fragile.
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
paradigm_history_fragility({
|
|
31
|
+
symbols: ["#checkout-form", "#payment-service", "$onboarding"]
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
// Returns stability scores and warnings:
|
|
35
|
+
// #checkout-form: stable (score: 0.92)
|
|
36
|
+
// #payment-service: fragile (score: 0.34) -- 3 rollbacks in 30 days
|
|
37
|
+
// $onboarding: moderate (score: 0.61) -- frequent refactors
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Fragility information changes how you approach a task. When you are about to modify a fragile symbol, you should:
|
|
41
|
+
|
|
42
|
+
1. **Read the full history** with `paradigm_history_context` to understand *why* it has been unstable
|
|
43
|
+
2. **Check team wisdom** with `paradigm_wisdom_context` to see if there are known antipatterns or decisions about that area
|
|
44
|
+
3. **Write more comprehensive tests** before making changes
|
|
45
|
+
4. **Make smaller, incremental changes** rather than large refactors
|
|
46
|
+
5. **Validate thoroughly** with `paradigm_history_validate` after implementation
|
|
47
|
+
|
|
48
|
+
Refactor-heavy areas deserve special attention. If a symbol has a high count of `refactor` type events, it may indicate unclear requirements, poor initial design, or a component that is trying to do too much. The fragility system surfaces these patterns so you can address the root cause rather than adding another band-aid refactor.
|
|
49
|
+
|
|
50
|
+
Stability scores are also useful for planning. When estimating effort for a feature that touches multiple symbols, fragile symbols should be weighted higher in your estimate. They are more likely to require debugging, testing, and potentially rolling back. The fragility check is a form of risk assessment that should happen before every non-trivial change.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-301-history-system
|
|
3
|
+
title: The History System
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-301
|
|
11
|
+
- append-only-implementation-log
|
|
12
|
+
- paradigmhistoryrecord
|
|
13
|
+
- paradigmhistorycontext
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 2
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-301.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## The History System
|
|
24
|
+
|
|
25
|
+
Paradigm maintains an append-only log of every implementation change in your project. This is not a replacement for git history -- it is a higher-level, symbol-aware record that tracks *what changed at the Paradigm level*, not just which lines of code were modified. Every time you implement a feature, fix a bug, or refactor a component, Paradigm can record that event against the symbols it affected.
|
|
26
|
+
|
|
27
|
+
The primary tool for recording history is `paradigm_history_record`. When you call it, you specify three required fields: the **type** of change (`implement`, `refactor`, or `rollback`), the **symbols** affected (e.g., `["#payment-service", "$checkout-flow"]`), and a **description** of what was done. You can also specify an **intent** to further classify the change: `feature` for new capabilities, `fix` for bug repairs, `refactor` for structural improvements, `experimental` for exploratory changes, and `confirmed` for validated implementations.
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
paradigm_history_record({
|
|
31
|
+
type: "implement",
|
|
32
|
+
symbols: ["#payment-service", "!payment-completed"],
|
|
33
|
+
description: "Add Stripe webhook handler for payment confirmation",
|
|
34
|
+
intent: "feature",
|
|
35
|
+
commit: "a1b2c3d",
|
|
36
|
+
files: ["src/services/payment.ts", "src/handlers/webhook.ts"]
|
|
37
|
+
})
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
To retrieve history for symbols before making changes, use `paradigm_history_context`. Pass in an array of symbols and you get back the recent implementation events, who worked on them, and how stable they have been. This is critical context -- before modifying `#payment-service`, you want to know if it was just refactored last week, if it has been the target of multiple rollbacks, or if it has been stable for months.
|
|
41
|
+
|
|
42
|
+
The history log is append-only by design. Nothing is ever deleted or overwritten. This means you always have a complete timeline of how a symbol evolved. Rollback events do not erase the original implementation -- they add a new entry that says "this was rolled back and why." This immutability is what makes the history system trustworthy for fragility analysis and team wisdom.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-301-navigation-system
|
|
3
|
+
title: Codebase Navigation
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-301
|
|
11
|
+
- paradigmnavigate-with-three
|
|
12
|
+
- navigatoryaml-structure-map
|
|
13
|
+
- paradigmsearch-with-fuzzy
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 2
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-301.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Codebase Navigation
|
|
24
|
+
|
|
25
|
+
Large codebases are expensive to explore token-by-token. Reading files costs roughly 500-2000 tokens each, and broad exploration can quickly eat through an AI agent's context window. Paradigm's navigation system solves this by providing efficient, symbol-aware lookup that costs only 100-200 tokens per query.
|
|
26
|
+
|
|
27
|
+
The primary tool is `paradigm_navigate`, which supports three intents:
|
|
28
|
+
|
|
29
|
+
**"find"** performs a direct symbol lookup. Give it a symbol like `#checkout-form` or a file path, and it returns the exact location in the codebase. This is the fastest way to go from a symbol name to its source file.
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
paradigm_navigate({ intent: "find", target: "#payment-service" })
|
|
33
|
+
// Returns: src/services/payment.ts (defined in src/services/.purpose)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**"explore"** lets you browse a functional area of the codebase. Instead of looking for a specific symbol, you describe an area like "authentication" or "payments" and get back all the symbols, files, and structure in that domain.
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
paradigm_navigate({ intent: "explore", target: "authentication" })
|
|
40
|
+
// Returns: gates, components, flows related to auth
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**"context"** is task-based discovery. Describe what you want to accomplish, and the navigator returns the relevant files, symbols, and patterns you will need. This is the most powerful intent -- it answers "what do I need to know to complete this task?"
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
paradigm_navigate({ intent: "context", task: "add Apple Pay to checkout" })
|
|
47
|
+
// Returns: #payment-service, $checkout-flow, #checkout-form,
|
|
48
|
+
// existing payment method patterns, relevant gates
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Behind the scenes, navigation is powered by `navigator.yaml`, a generated structure map of your entire project. This file is created and updated by `paradigm scan` and contains the directory tree, symbol locations, and file classifications. You do not edit `navigator.yaml` directly -- it is regenerated from `.purpose` files.
|
|
52
|
+
|
|
53
|
+
For fuzzy text search across symbol names, descriptions, and tags, use `paradigm_search`. This supports typo-tolerant matching, so searching for "paymnt" will still find `#payment-service`. You can filter by symbol type (component, flow, gate, signal, aspect) and control result limits.
|
|
54
|
+
|
|
55
|
+
The general rule is: **MCP queries for discovery, file reads for implementation.** Use navigate and search to find what you need (~100-200 tokens), then read only the specific files required (~500-2000 tokens). Never broadly explore a codebase by reading directories when navigation tools are available.
|