@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,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-201-aspects-and-anchors
|
|
3
|
+
title: Aspects & Code Anchors
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-201
|
|
11
|
+
- aspects-are-the
|
|
12
|
+
- anchor-formats-single
|
|
13
|
+
- applies-to-uses-glob
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 4
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-201.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Why Aspects Require Anchors
|
|
24
|
+
|
|
25
|
+
Aspects (`~`) are unique among Paradigm's five symbols because they are the only ones that **require code anchors**. An anchor is a pointer to the exact lines of code where the aspect is enforced. This requirement exists for a practical reason: an aspect without an anchor is just a wish.
|
|
26
|
+
|
|
27
|
+
Consider `~audit-required`. If you define it without anchors, you are saying "financial operations should be audited" — but there is no proof that they actually are. With anchors pointing to `src/middleware/audit.ts:15-35`, you are saying "financial operations are audited, and here is the enforcement code." AI agents can verify the anchor, developers can review it, and `paradigm_aspect_check` can validate that the code still exists.
|
|
28
|
+
|
|
29
|
+
## Anchor Format
|
|
30
|
+
|
|
31
|
+
Anchors support three formats:
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
~rate-limited:
|
|
35
|
+
description: API endpoints are rate-limited to prevent abuse
|
|
36
|
+
anchors:
|
|
37
|
+
- src/middleware/rate-limiter.ts:42 # Single line
|
|
38
|
+
- src/middleware/rate-limiter.ts:42-78 # Line range
|
|
39
|
+
- src/decorators/throttle.ts:10,15,22 # Multiple specific lines
|
|
40
|
+
applies-to: ["#*-handler"]
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- **Single line** (`file:42`) — Points to one specific line. Use when the enforcement is a single check or decorator.
|
|
44
|
+
- **Range** (`file:42-78`) — Points to a block of code. Use when the enforcement spans multiple lines (a middleware function, a class method).
|
|
45
|
+
- **Multiple lines** (`file:10,15,22`) — Points to several non-contiguous lines. Use when the enforcement is scattered across a file (multiple decorators, multiple conditional checks).
|
|
46
|
+
|
|
47
|
+
Anchors must point to *real files with real code*. If the file does not exist or the lines are outside the file's range, `paradigm_aspect_check` will report an error.
|
|
48
|
+
|
|
49
|
+
## The applies-to Pattern
|
|
50
|
+
|
|
51
|
+
The `applies-to` field uses glob patterns to declare which symbols the aspect covers:
|
|
52
|
+
|
|
53
|
+
```yaml
|
|
54
|
+
~audit-required:
|
|
55
|
+
applies-to: ["#*Service"] # All components ending in 'Service'
|
|
56
|
+
|
|
57
|
+
~rate-limited:
|
|
58
|
+
applies-to: ["#*-handler", "#*-endpoint"] # All handlers and endpoints
|
|
59
|
+
|
|
60
|
+
~cached:
|
|
61
|
+
applies-to: ["#*-query"] # All query components
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
This is declarative — it says "this aspect should apply to these components." AI agents use this to check whether a new component matching the pattern has the aspect applied. If you create `#billing-service` and `~audit-required` applies to `#*Service`, the agent knows to apply the audit aspect.
|
|
65
|
+
|
|
66
|
+
## Defining Aspects in .purpose Files
|
|
67
|
+
|
|
68
|
+
```yaml
|
|
69
|
+
aspects:
|
|
70
|
+
~audit-required:
|
|
71
|
+
description: All financial operations must log to the audit trail
|
|
72
|
+
anchors:
|
|
73
|
+
- src/middleware/audit.ts:15-35
|
|
74
|
+
- src/decorators/auditable.ts:1-20
|
|
75
|
+
applies-to: ["#*Service"]
|
|
76
|
+
enforcement: middleware
|
|
77
|
+
tags: [compliance, security]
|
|
78
|
+
|
|
79
|
+
~rate-limited:
|
|
80
|
+
description: API endpoints enforce per-user rate limits
|
|
81
|
+
anchors:
|
|
82
|
+
- src/middleware/rate-limiter.ts:42-78
|
|
83
|
+
applies-to: ["#*-handler"]
|
|
84
|
+
enforcement: middleware
|
|
85
|
+
tags: [security, performance]
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
The `enforcement` field is optional metadata that describes *how* the aspect is enforced — via middleware, decorator, wrapper function, etc. It helps AI agents understand the enforcement mechanism when they need to apply the aspect to new components.
|
|
89
|
+
|
|
90
|
+
## Validating Aspects
|
|
91
|
+
|
|
92
|
+
Use `paradigm_aspect_check` to verify that an aspect's anchors are valid:
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
paradigm_aspect_check({ aspect: "~audit-required" })
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
This tool checks:
|
|
99
|
+
1. **Anchor existence** — Do the referenced files exist?
|
|
100
|
+
2. **Line validity** — Are the line numbers within the file's range?
|
|
101
|
+
3. **Coverage** — Are all components matching `applies-to` actually covered?
|
|
102
|
+
|
|
103
|
+
Run this after refactoring. If you move or rename files, the anchors break — and a broken anchor means the enforcement code is lost or relocated. The aspect check catches this drift.
|
|
104
|
+
|
|
105
|
+
## Aspects vs Gates
|
|
106
|
+
|
|
107
|
+
A common confusion: when should you use an aspect (`~`) versus a gate (`^`)? The distinction is clear:
|
|
108
|
+
|
|
109
|
+
- **Gates** check a *specific condition at a specific time*. "Can this user access this project?" or "Is this feature flag enabled?" is a gate.
|
|
110
|
+
- **Aspects** enforce rules *across many components as a pattern*. "All financial services must log to the audit trail" is an aspect.
|
|
111
|
+
|
|
112
|
+
Gates are reactive (triggered per request or operation). Aspects are structural (enforced by code patterns). A gate checks one condition at one point; an aspect applies to all components matching a pattern.
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-201-component-patterns
|
|
3
|
+
title: Component Patterns
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-201
|
|
11
|
+
- feature-components-user-facing
|
|
12
|
+
- integration-components-third-party
|
|
13
|
+
- state-components-data
|
|
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
|
+
## The Many Faces of `#`
|
|
24
|
+
|
|
25
|
+
The `#` component is Paradigm's most used symbol — and intentionally the broadest. It covers everything from a React button to a database service to a CLI command parser. This breadth is a feature, not a bug: it means you never struggle to classify code. But it also means you need **tags** to create meaningful subcategories.
|
|
26
|
+
|
|
27
|
+
This lesson covers the major component patterns and when to use each one.
|
|
28
|
+
|
|
29
|
+
## Feature Components
|
|
30
|
+
|
|
31
|
+
Feature components represent **user-facing functionality**. They are the things your users interact with — checkout, search, profile editing, notification preferences.
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
#checkout:
|
|
35
|
+
description: Shopping cart checkout with payment processing
|
|
36
|
+
file: checkout.ts
|
|
37
|
+
tags: [feature, critical, payments]
|
|
38
|
+
flows: ["$checkout-flow"]
|
|
39
|
+
signals: ["!order-placed"]
|
|
40
|
+
gates: ["^authenticated"]
|
|
41
|
+
|
|
42
|
+
#search:
|
|
43
|
+
description: Full-text search across products and content
|
|
44
|
+
file: search.ts
|
|
45
|
+
tags: [feature, search]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Feature components often have the richest cross-references: they participate in flows, emit signals, and require gates. They are the entry points into your system's behavior.
|
|
49
|
+
|
|
50
|
+
## Integration Components
|
|
51
|
+
|
|
52
|
+
Integration components wrap **third-party services**. They isolate external API calls behind a stable internal interface:
|
|
53
|
+
|
|
54
|
+
```yaml
|
|
55
|
+
#stripe-service:
|
|
56
|
+
description: Stripe API client for payment processing
|
|
57
|
+
file: stripe-service.ts
|
|
58
|
+
tags: [integration, stripe, payments]
|
|
59
|
+
signals: ["!payment-completed", "!payment-failed"]
|
|
60
|
+
|
|
61
|
+
#sendgrid-client:
|
|
62
|
+
description: SendGrid email delivery wrapper
|
|
63
|
+
file: sendgrid.ts
|
|
64
|
+
tags: [integration, sendgrid, email]
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
The convention is to tag integrations with both `[integration]` and the service name (`[stripe]`, `[sendgrid]`). This lets you search for all integrations OR for all Stripe-related code specifically.
|
|
68
|
+
|
|
69
|
+
## State Components
|
|
70
|
+
|
|
71
|
+
State components manage **data storage and state containers** — databases, caches, in-memory stores, Redux slices:
|
|
72
|
+
|
|
73
|
+
```yaml
|
|
74
|
+
#user-store:
|
|
75
|
+
description: User data persistence and caching layer
|
|
76
|
+
file: user-store.ts
|
|
77
|
+
tags: [state, users, cache]
|
|
78
|
+
|
|
79
|
+
#session-cache:
|
|
80
|
+
description: Redis-backed session storage with 24h TTL
|
|
81
|
+
file: session-cache.ts
|
|
82
|
+
tags: [state, session, redis]
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
State components are often referenced by many other components. Use `paradigm_ripple` before modifying them — a change to `#user-store` might impact every feature that reads user data.
|
|
86
|
+
|
|
87
|
+
## Infrastructure Components
|
|
88
|
+
|
|
89
|
+
Infrastructure components provide **foundational services** that other components depend on but users never directly interact with:
|
|
90
|
+
|
|
91
|
+
```yaml
|
|
92
|
+
#logger:
|
|
93
|
+
description: Structured logging with symbol tagging
|
|
94
|
+
file: logger.ts
|
|
95
|
+
tags: [infrastructure, observability]
|
|
96
|
+
|
|
97
|
+
#config-loader:
|
|
98
|
+
description: Environment-aware configuration loading
|
|
99
|
+
file: config.ts
|
|
100
|
+
tags: [infrastructure, config]
|
|
101
|
+
|
|
102
|
+
#database-pool:
|
|
103
|
+
description: PostgreSQL connection pool with health checks
|
|
104
|
+
file: db.ts
|
|
105
|
+
tags: [infrastructure, database, postgres]
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Infrastructure components rarely have flows or gates, but they are often the most fragile — many other components depend on them. Check `paradigm_history_fragility` before making changes.
|
|
109
|
+
|
|
110
|
+
## When to Split vs Combine
|
|
111
|
+
|
|
112
|
+
A common question: should a large module be one component or several?
|
|
113
|
+
|
|
114
|
+
**Split when:**
|
|
115
|
+
- The module has distinct responsibilities that could change independently
|
|
116
|
+
- Different parts require different gates or emit different signals
|
|
117
|
+
- The file exceeds ~300 lines and contains clearly separable logic
|
|
118
|
+
|
|
119
|
+
**Combine when:**
|
|
120
|
+
- The parts are tightly coupled and always change together
|
|
121
|
+
- Splitting would create components with trivial descriptions ("calls the other half")
|
|
122
|
+
- The module is a cohesive unit with a single responsibility
|
|
123
|
+
|
|
124
|
+
```yaml
|
|
125
|
+
# Good split — distinct responsibilities
|
|
126
|
+
#payment-processor:
|
|
127
|
+
description: Charges cards via Stripe
|
|
128
|
+
#payment-validator:
|
|
129
|
+
description: Validates payment amounts and currencies
|
|
130
|
+
|
|
131
|
+
# Bad split — artificial separation
|
|
132
|
+
#payment-step-1:
|
|
133
|
+
description: First half of payment processing
|
|
134
|
+
#payment-step-2:
|
|
135
|
+
description: Second half of payment processing
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
If you cannot describe the component without referencing the other half, they should be one component.
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-201-cross-cutting-concerns
|
|
3
|
+
title: Cross-Cutting Concerns
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-201
|
|
11
|
+
- cross-cutting-concerns-apply
|
|
12
|
+
- common-aspects-audit
|
|
13
|
+
- applies-to-uses-glob
|
|
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
|
+
## Rules That Span the System
|
|
24
|
+
|
|
25
|
+
Some requirements do not belong to any single component. "All financial operations must be audited." "All API endpoints must be rate-limited." "All sensitive data must be encrypted at rest." These are **cross-cutting concerns** — rules that apply across multiple components as a structural pattern rather than a per-request check.
|
|
26
|
+
|
|
27
|
+
Paradigm models cross-cutting concerns as **aspects** (`~`). Unlike gates (which check access per request) or signals (which fire per event), aspects describe ongoing constraints that are enforced by code patterns, middleware, decorators, or architectural choices.
|
|
28
|
+
|
|
29
|
+
## Common Aspect Patterns
|
|
30
|
+
|
|
31
|
+
### Audit Trails
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
~audit-required:
|
|
35
|
+
description: All financial operations must log to the audit trail with user, action, and timestamp
|
|
36
|
+
anchors:
|
|
37
|
+
- src/middleware/audit.ts:15-35
|
|
38
|
+
- src/decorators/auditable.ts:1-20
|
|
39
|
+
applies-to: ["#*Service"]
|
|
40
|
+
enforcement: middleware
|
|
41
|
+
tags: [compliance, security]
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Audit aspects ensure that certain operations leave a trail. The anchors point to the middleware or decorator that performs the logging. Any service matching `#*Service` is expected to use this middleware.
|
|
45
|
+
|
|
46
|
+
### Rate Limiting
|
|
47
|
+
|
|
48
|
+
```yaml
|
|
49
|
+
~rate-limited:
|
|
50
|
+
description: API endpoints enforce per-user rate limits (100 req/min default)
|
|
51
|
+
anchors:
|
|
52
|
+
- src/middleware/rate-limiter.ts:10-45
|
|
53
|
+
applies-to: ["#*-handler", "#*-endpoint"]
|
|
54
|
+
enforcement: middleware
|
|
55
|
+
tags: [security, performance]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Rate limiting protects against abuse. The aspect documents the default limit (100 req/min) and points to the middleware that enforces it.
|
|
59
|
+
|
|
60
|
+
### Caching
|
|
61
|
+
|
|
62
|
+
```yaml
|
|
63
|
+
~cached:
|
|
64
|
+
description: Read-heavy queries use a 5-minute TTL cache
|
|
65
|
+
anchors:
|
|
66
|
+
- src/lib/cache-wrapper.ts:20-55
|
|
67
|
+
applies-to: ["#*-query"]
|
|
68
|
+
enforcement: wrapper-function
|
|
69
|
+
tags: [performance]
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Input Validation
|
|
73
|
+
|
|
74
|
+
```yaml
|
|
75
|
+
~validated:
|
|
76
|
+
description: All API inputs are validated against defined schemas before processing
|
|
77
|
+
anchors:
|
|
78
|
+
- src/middleware/validate.ts:1-30
|
|
79
|
+
- src/schemas/index.ts:1-50
|
|
80
|
+
applies-to: ["#*-handler"]
|
|
81
|
+
enforcement: middleware
|
|
82
|
+
tags: [security, data-integrity]
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Idempotency
|
|
86
|
+
|
|
87
|
+
```yaml
|
|
88
|
+
~idempotent:
|
|
89
|
+
description: Mutation endpoints use idempotency keys to prevent duplicate processing
|
|
90
|
+
anchors:
|
|
91
|
+
- src/middleware/idempotency.ts:15-60
|
|
92
|
+
applies-to: ["#*-handler"]
|
|
93
|
+
enforcement: middleware
|
|
94
|
+
tags: [reliability, payments]
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Encryption at Rest
|
|
98
|
+
|
|
99
|
+
```yaml
|
|
100
|
+
~encrypted-at-rest:
|
|
101
|
+
description: Sensitive fields are encrypted before storage using AES-256-GCM
|
|
102
|
+
anchors:
|
|
103
|
+
- src/lib/encryption.ts:10-45
|
|
104
|
+
- src/models/base-model.ts:30-50
|
|
105
|
+
applies-to: ["#*-store"]
|
|
106
|
+
enforcement: model-hook
|
|
107
|
+
tags: [security, compliance]
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## The applies-to Glob Pattern
|
|
111
|
+
|
|
112
|
+
The `applies-to` field uses glob patterns to declare which symbols the aspect covers:
|
|
113
|
+
|
|
114
|
+
| Pattern | Matches |
|
|
115
|
+
|---------|---------|
|
|
116
|
+
| `#*Service` | `#payment-service`, `#email-service`, `#auth-service` |
|
|
117
|
+
| `#*-handler` | `#login-handler`, `#webhook-handler` |
|
|
118
|
+
| `#*-store` | `#user-store`, `#session-store` |
|
|
119
|
+
| `#*` | All components (use sparingly) |
|
|
120
|
+
|
|
121
|
+
When an AI agent creates a new component matching a pattern, it should check whether any aspects apply. If `~rate-limited` applies to `#*-handler` and the agent creates `#upload-handler`, the agent should ensure rate limiting middleware is applied.
|
|
122
|
+
|
|
123
|
+
## Aspects vs Other Symbols
|
|
124
|
+
|
|
125
|
+
Understanding when to use each symbol avoids misclassification:
|
|
126
|
+
|
|
127
|
+
| If the rule... | Use |
|
|
128
|
+
|----------------|-----|
|
|
129
|
+
| Checks a specific condition per request or operation | `^` Gate |
|
|
130
|
+
| Fires an event that triggers side effects | `!` Signal |
|
|
131
|
+
| Applies the same pattern across many components | `~` Aspect |
|
|
132
|
+
| Describes a multi-step process | `$` Flow |
|
|
133
|
+
|
|
134
|
+
A rate limiter is an aspect (it applies the same pattern to all handlers), not a gate (it does not check authorization). An audit log is an aspect (it applies to all financial services), not a signal (it is a structural requirement, not a one-time event).
|
|
135
|
+
|
|
136
|
+
## Maintaining Aspects During Refactors
|
|
137
|
+
|
|
138
|
+
Aspects are the most maintenance-sensitive symbol because their anchors contain file paths and line numbers. When you refactor:
|
|
139
|
+
|
|
140
|
+
1. Run `paradigm_aspect_check` before the refactor to know the current state.
|
|
141
|
+
2. Make your code changes.
|
|
142
|
+
3. Run `paradigm_aspect_check` again to find broken anchors.
|
|
143
|
+
4. Update the anchors in the `.purpose` file to point to the new locations.
|
|
144
|
+
|
|
145
|
+
This is a conscious trade-off: anchors create maintenance burden, but they prevent the much worse problem of unverified rules that silently stop being enforced.
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-201-disciplines
|
|
3
|
+
title: Disciplines
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-201
|
|
11
|
+
- disciplines-define-how
|
|
12
|
+
- 14-disciplines-web
|
|
13
|
+
- auto-detection-at-init
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 7
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-201.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## How Symbols Map Across Domains
|
|
24
|
+
|
|
25
|
+
A Paradigm `discipline` defines how directory patterns and code structures map to symbol types in a specific development domain. A web frontend project organizes code differently from a backend API, which differs from a CLI tool. Disciplines capture these differences so that tooling — the navigator, the logging conventions, gate recommendations, and auto-scan — works correctly regardless of your tech stack.
|
|
26
|
+
|
|
27
|
+
## Auto-Detection
|
|
28
|
+
|
|
29
|
+
When you run `paradigm shift` or `paradigm init`, Paradigm automatically detects the discipline from your project structure. It examines `package.json`, `Cargo.toml`, `go.mod`, `pyproject.toml`, and other project markers to infer the best match. The detected discipline is written to `.paradigm/config.yaml`:
|
|
30
|
+
|
|
31
|
+
```yaml
|
|
32
|
+
discipline: fullstack # auto-detected from Next.js in package.json
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Detection heuristics include: monorepo markers (workspaces), framework deps (Next.js → fullstack, React alone → web, Express alone → api), Python ML deps (PyTorch → ml), Rust crate deps (clap → cli, axum → api, bevy → game), and more. You can always override the detected value.
|
|
36
|
+
|
|
37
|
+
## The 14 Disciplines
|
|
38
|
+
|
|
39
|
+
Paradigm supports 14 disciplines, each with tailored symbol mappings, purpose-required paths, and scan patterns:
|
|
40
|
+
|
|
41
|
+
| Discipline | When to Use | Key Directories |
|
|
42
|
+
|------------|-------------|------------------|
|
|
43
|
+
| `web` | Frontend-only (React, Vue, Svelte) | `components/`, `pages/`, `hooks/`, `stores/` |
|
|
44
|
+
| `backend` | General backend (fallback) | `services/`, `routes/`, `models/` |
|
|
45
|
+
| `fullstack` | SSR or combined frontend+backend (Next.js, Django) | `components/`, `pages/`, `api/`, `services/` |
|
|
46
|
+
| `api` | API-only (Express, FastAPI, Gin) | `routes/`, `endpoints/`, `controllers/` |
|
|
47
|
+
| `cli` | CLI tools (Node bin, Click, clap) | `commands/`, `cmd/` |
|
|
48
|
+
| `ml` | Machine learning (PyTorch, TF, scikit-learn) | `models/`, `experiments/`, `pipelines/` |
|
|
49
|
+
| `mobile` | Mobile apps (React Native, Flutter) | `screens/`, `widgets/`, `navigation/` |
|
|
50
|
+
| `game` | Game dev (Bevy, Godot, Unity) | `gameplay/`, `entities/`, `systems/` |
|
|
51
|
+
| `embedded` | Embedded/IoT (embedded-hal, PlatformIO) | `drivers/`, `hal/`, `protocols/` |
|
|
52
|
+
| `devops` | Infrastructure (Terraform, Ansible) | `modules/`, `pipelines/`, `scripts/` |
|
|
53
|
+
| `data` | Data engineering (dbt, Airflow, Spark) | `models/`, `dags/`, `transforms/` |
|
|
54
|
+
| `library` | Reusable packages (npm, PyPI, crates) | `src/`, `lib/` |
|
|
55
|
+
| `monorepo` | Multi-package repos (workspaces, Nx) | `packages/`, `apps/`, `libs/` |
|
|
56
|
+
| `custom` | User-defined mappings | Whatever you configure |
|
|
57
|
+
|
|
58
|
+
## Web Discipline
|
|
59
|
+
|
|
60
|
+
In a web project, the primary units are routes, components, and pages:
|
|
61
|
+
|
|
62
|
+
| Directory | Symbol | Rationale |
|
|
63
|
+
|-----------|--------|-----------|
|
|
64
|
+
| `routes/`, `pages/`, `views/` | `#` component | User-facing entry points |
|
|
65
|
+
| `components/` | `#` component | Reusable UI elements |
|
|
66
|
+
| `hooks/` | `#` component | Shared logic (hooks are code units, not signals) |
|
|
67
|
+
| `stores/`, `state/` | `#` component (tag: `[state]`) | Client-side state |
|
|
68
|
+
| `middleware/` | `^` gate | Route guards and auth checks |
|
|
69
|
+
| `api/` | `#` component | API client wrappers |
|
|
70
|
+
|
|
71
|
+
An important distinction: **hooks are components, not signals**. A frontend hook like `useAuth` encapsulates logic — it is `#useAuth`, a component. The `!` signal prefix is reserved for events that trigger decoupled side effects.
|
|
72
|
+
|
|
73
|
+
## Backend / API Discipline
|
|
74
|
+
|
|
75
|
+
In a backend or API project, the primary units are services, controllers, and models:
|
|
76
|
+
|
|
77
|
+
| Directory | Symbol | Rationale |
|
|
78
|
+
|-----------|--------|-----------|
|
|
79
|
+
| `services/` | `#` component | Business logic |
|
|
80
|
+
| `controllers/`, `handlers/` | `#` component | Request handlers |
|
|
81
|
+
| `models/`, `entities/` | `#` component (tag: `[state]`) | Data models |
|
|
82
|
+
| `middleware/`, `guards/` | `^` gate | Auth and validation |
|
|
83
|
+
| `events/`, `listeners/` | `!` signal | Event emitters and handlers |
|
|
84
|
+
| `jobs/`, `workers/` | `#` component | Background processing |
|
|
85
|
+
| `integrations/`, `clients/` | `#` component (tag: `[integration]`) | External service wrappers |
|
|
86
|
+
|
|
87
|
+
The `api` discipline is like `backend` but focused on HTTP endpoints (adds `endpoints/`, `controllers/`, `webhooks/`).
|
|
88
|
+
|
|
89
|
+
## Fullstack Discipline
|
|
90
|
+
|
|
91
|
+
The fullstack discipline combines both mappings. Paradigm determines which mapping to use based on the directory path:
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
src/
|
|
95
|
+
client/ → Web discipline mappings apply
|
|
96
|
+
server/ → Backend discipline mappings apply
|
|
97
|
+
shared/ → Common mappings (# for all code units)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Auto-detected for SSR frameworks like Next.js, Nuxt, SvelteKit, or when both React and Express are present.
|
|
101
|
+
|
|
102
|
+
## Domain-Specific Disciplines
|
|
103
|
+
|
|
104
|
+
**ML**: Scans `models/`, `experiments/`, `notebooks/`. Pipelines map to `$` flows. Training events map to `!` signals.
|
|
105
|
+
|
|
106
|
+
**Data**: Scans `dbt/`, `dags/`, `transforms/`. ETL pipelines are `$` flows. Data quality checks are `!` signals.
|
|
107
|
+
|
|
108
|
+
**Game**: Scans `gameplay/`, `entities/`, `systems/`. Game loops are `$` flows. Game events are `!` signals.
|
|
109
|
+
|
|
110
|
+
**Embedded**: Scans `drivers/`, `hal/`, `protocols/`. State machines are `$` flows. Interrupts are `!` signals.
|
|
111
|
+
|
|
112
|
+
## Why Disciplines Matter
|
|
113
|
+
|
|
114
|
+
Disciplines affect four things:
|
|
115
|
+
|
|
116
|
+
1. **Symbol mappings** — Each discipline populates the `logging.symbol-mapping` section in config.yaml with directory-to-symbol mappings appropriate for your domain.
|
|
117
|
+
2. **Navigator generation** — `paradigm scan` uses the discipline to categorize directories and suggest symbol types for undocumented code.
|
|
118
|
+
3. **Gate recommendations** — `paradigm_gates_for_route` uses the discipline to understand which routes exist and what patterns apply.
|
|
119
|
+
4. **Auto-scan patterns** — `paradigm scan --auto` adds discipline-specific file patterns (e.g., ML scans `.ipynb` notebooks, game scans `.gd` scripts).
|
|
120
|
+
|
|
121
|
+
With auto-detection, most projects get the right discipline without any manual configuration.
|
|
122
|
+
|
|
123
|
+
## Custom Mappings
|
|
124
|
+
|
|
125
|
+
If your project does not fit a standard discipline, you can override mappings in `config.yaml`:
|
|
126
|
+
|
|
127
|
+
```yaml
|
|
128
|
+
discipline: backend
|
|
129
|
+
custom-mappings:
|
|
130
|
+
"workers/": "#" # Override default if needed
|
|
131
|
+
"policies/": "^" # Treat policies as gates
|
|
132
|
+
"sagas/": "$" # Treat sagas as flows
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Custom mappings extend (not replace) the discipline defaults. Or set `discipline: custom` and define everything yourself.
|
|
136
|
+
|
|
137
|
+
## Stack Presets
|
|
138
|
+
|
|
139
|
+
Disciplines tell Paradigm *what kind* of project you have (web, backend, mobile). Stack presets go one level deeper — they tell Paradigm *which framework* you are using. A stack preset layers framework-specific configuration on top of the discipline.
|
|
140
|
+
|
|
141
|
+
Paradigm ships 16 stack presets:
|
|
142
|
+
|
|
143
|
+
| Preset | Discipline | What It Adds |
|
|
144
|
+
|--------|------------|-------------|
|
|
145
|
+
| `nextjs` | fullstack | `app/` routes, server actions, RSC patterns |
|
|
146
|
+
| `remix` | fullstack | loader/action patterns, nested routes |
|
|
147
|
+
| `sveltekit` | fullstack | `+page.svelte`, `+server.ts` patterns |
|
|
148
|
+
| `nuxt` | fullstack | `composables/`, auto-imports |
|
|
149
|
+
| `react-spa` | web | CRA/Vite SPA patterns, `hooks/`, `contexts/` |
|
|
150
|
+
| `vue-spa` | web | Composition API, Pinia stores |
|
|
151
|
+
| `express` | api | `app.get/post`, middleware chains |
|
|
152
|
+
| `fastapi` | api | `@app.get`, Pydantic models, dependency injection |
|
|
153
|
+
| `django` | fullstack | `views.py`, `models.py`, `urls.py` |
|
|
154
|
+
| `flask` | api | `@app.route`, blueprints |
|
|
155
|
+
| `gin-go` | api | `r.GET`, handler groups |
|
|
156
|
+
| `axum-rs` | api | Axum extractors, tower middleware |
|
|
157
|
+
| `swift-ios` | mobile | SwiftUI views, `@Observable`, navigation |
|
|
158
|
+
| `kotlin-android` | mobile | Jetpack Compose, ViewModels, Hilt |
|
|
159
|
+
| `react-native` | mobile | Expo/bare RN, navigation, native modules |
|
|
160
|
+
| `flutter` | mobile | Widgets, BLoC/Riverpod, platform channels |
|
|
161
|
+
|
|
162
|
+
Stack presets are auto-detected during `paradigm init` from your dependencies and project files. You can also specify one explicitly:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
paradigm init --stack nextjs
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
The detected stack is written to config.yaml:
|
|
169
|
+
|
|
170
|
+
```yaml
|
|
171
|
+
discipline: fullstack
|
|
172
|
+
stack: nextjs
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Stack presets add three things on top of the discipline:
|
|
176
|
+
1. **Refined symbol mappings** — Framework-specific directories (e.g., `app/api/` for Next.js route handlers)
|
|
177
|
+
2. **Purpose-required paths** — Directories that should have `.purpose` files for the framework to work well with Paradigm
|
|
178
|
+
3. **Scan hints** — Framework-specific patterns for component detection, route patterns, auth patterns, and state management
|
|
179
|
+
|
|
180
|
+
To see all available presets:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
paradigm presets
|
|
184
|
+
paradigm presets --discipline mobile # Filter by discipline
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Stack presets solve the cold-start problem: when you run `paradigm init` on an existing Next.js project, the preset knows to look for `app/` routes, server components, and API handlers — producing meaningful `.purpose` scaffolding instead of generic stubs.
|