@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,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-101-project-structure
|
|
3
|
+
title: Project Structure
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-101
|
|
11
|
+
- paradigm-holds-project-wide
|
|
12
|
+
- configyaml-defines-discipline
|
|
13
|
+
- navigatoryaml-is-generated
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 3
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-101.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## The .paradigm/ Directory
|
|
24
|
+
|
|
25
|
+
Every Paradigm project has a `.paradigm/` directory at its root. This is the central nervous system of the framework — it holds project-wide configuration, specifications, documentation, and metadata that apply across the entire codebase. While `.purpose` files describe individual directories, the `.paradigm/` directory describes the project as a whole.
|
|
26
|
+
|
|
27
|
+
## Core Files
|
|
28
|
+
|
|
29
|
+
### config.yaml — Project Configuration
|
|
30
|
+
|
|
31
|
+
The most important file. It defines the project's discipline (web, backend, fullstack, etc.), naming conventions, and agent preferences:
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
name: my-project
|
|
35
|
+
discipline: fullstack
|
|
36
|
+
version: "2.0"
|
|
37
|
+
|
|
38
|
+
conventions:
|
|
39
|
+
naming: kebab-case
|
|
40
|
+
components: PascalCase
|
|
41
|
+
files: kebab-case
|
|
42
|
+
|
|
43
|
+
agent-provider: claude-code
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The `discipline` field tells Paradigm how to map directory patterns to symbol types. A `web` discipline treats `routes/` as components; a `backend` discipline treats `services/` as components. This affects the navigator, logger suggestions, and gate recommendations.
|
|
47
|
+
|
|
48
|
+
### tags.yaml — Tag Bank
|
|
49
|
+
|
|
50
|
+
Defines all valid tags in three sections: `core` (universal), `project` (team-specific), and `suggested` (AI-proposed). Covered in detail in the Tags lesson.
|
|
51
|
+
|
|
52
|
+
### agents.yaml — Agent Roles
|
|
53
|
+
|
|
54
|
+
Configures the AI agents that work on your project — their roles, model assignments, context includes/excludes, and token budgets:
|
|
55
|
+
|
|
56
|
+
```yaml
|
|
57
|
+
agents:
|
|
58
|
+
architect:
|
|
59
|
+
defaultModel: opus
|
|
60
|
+
context:
|
|
61
|
+
include: [".paradigm/**", "portal.yaml", "**/.purpose"]
|
|
62
|
+
builder:
|
|
63
|
+
defaultModel: haiku
|
|
64
|
+
context:
|
|
65
|
+
include: ["src/**", "**/.purpose"]
|
|
66
|
+
exclude: ["**/*.test.*"]
|
|
67
|
+
security:
|
|
68
|
+
defaultModel: opus
|
|
69
|
+
context:
|
|
70
|
+
include: ["portal.yaml", "**/auth/**", "**/middleware/**"]
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### navigator.yaml — Generated Codebase Map
|
|
74
|
+
|
|
75
|
+
A machine-generated file that maps symbols to file paths, directories to categories, and provides a structural overview of the codebase. AI agents read this to quickly locate code without directory traversal. Generated by `paradigm scan`.
|
|
76
|
+
|
|
77
|
+
## Subdirectories
|
|
78
|
+
|
|
79
|
+
### specs/ — Detailed Specifications
|
|
80
|
+
|
|
81
|
+
Long-form documents that describe system behaviors, protocols, and standards. These are too detailed for `.purpose` files but essential for AI agents implementing features:
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
.paradigm/specs/
|
|
85
|
+
logger.md ← Full logger specification
|
|
86
|
+
disciplines.md ← Symbol mapping by domain
|
|
87
|
+
portal-protocol.md ← Authorization workflow
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### docs/ — Commands and Patterns
|
|
91
|
+
|
|
92
|
+
Quick-reference documentation for CLI commands, coding patterns, and troubleshooting:
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
.paradigm/docs/
|
|
96
|
+
commands.md ← CLI command reference
|
|
97
|
+
patterns.md ← Coding patterns and conventions
|
|
98
|
+
ai-maintenance-protocol.md ← When/how to update Paradigm files
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### wisdom/ — Team Knowledge
|
|
102
|
+
|
|
103
|
+
Captures the team's learned preferences, architectural decisions, and antipatterns:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
.paradigm/wisdom/
|
|
107
|
+
preferences.yaml ← Coding style preferences
|
|
108
|
+
decisions.yaml ← Architectural Decision Records (ADRs)
|
|
109
|
+
antipatterns.yaml ← What NOT to do, and why
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
AI agents check wisdom before implementing changes by calling `paradigm_wisdom_context`.
|
|
113
|
+
|
|
114
|
+
### history/ — Implementation Timeline
|
|
115
|
+
|
|
116
|
+
Tracks what was implemented, when, and by whom. Used for fragility analysis and rollback tracking.
|
|
117
|
+
|
|
118
|
+
## The Big Picture
|
|
119
|
+
|
|
120
|
+
Here is the complete project layout showing both `.paradigm/` and `.purpose` files:
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
my-project/
|
|
124
|
+
.paradigm/
|
|
125
|
+
config.yaml ← Project-wide settings
|
|
126
|
+
tags.yaml ← Tag definitions
|
|
127
|
+
agents.yaml ← Agent configurations
|
|
128
|
+
navigator.yaml ← Generated codebase map
|
|
129
|
+
specs/ ← Detailed specifications
|
|
130
|
+
docs/ ← Commands and patterns
|
|
131
|
+
wisdom/ ← Team knowledge
|
|
132
|
+
history/ ← Implementation timeline
|
|
133
|
+
portal.yaml ← Security gates and routes (project root)
|
|
134
|
+
src/
|
|
135
|
+
payments/
|
|
136
|
+
.purpose ← Directory-level documentation
|
|
137
|
+
payment-service.ts
|
|
138
|
+
auth/
|
|
139
|
+
.purpose
|
|
140
|
+
middleware.ts
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Notice that `portal.yaml` lives at the project root, not inside `.paradigm/`. This is intentional — it is a security-critical file that should be visible and easy to audit.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-101-purpose-files
|
|
3
|
+
title: Purpose Files
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-101
|
|
11
|
+
- purpose-files-are
|
|
12
|
+
- they-declare-components
|
|
13
|
+
- ai-agents-read
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 3
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-101.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## The Map AI Agents Read First
|
|
24
|
+
|
|
25
|
+
A `.purpose` file is a YAML document that lives in a directory alongside your source code. It declares what that directory contains — its components, flows, gates, signals, and aspects. When an AI agent enters a directory, the first thing it should do is read the `.purpose` file. This single file gives the agent enough context to understand the directory without scanning every source file.
|
|
26
|
+
|
|
27
|
+
Think of `.purpose` files as the table of contents for a chapter in a book. You would not read every page to find out what topics are covered — you check the table of contents. Similarly, AI agents should not `grep` through every `.ts` or `.py` file to figure out what a directory does.
|
|
28
|
+
|
|
29
|
+
## Structure of a Purpose File
|
|
30
|
+
|
|
31
|
+
A `.purpose` file has a top-level metadata section and then named sections for each symbol type:
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
name: Payment Module
|
|
35
|
+
description: Handles all payment processing and billing logic
|
|
36
|
+
version: "1.0.0"
|
|
37
|
+
context:
|
|
38
|
+
- Uses Stripe as the payment provider
|
|
39
|
+
- All amounts are in cents (integer)
|
|
40
|
+
- Webhooks are verified with Stripe signatures
|
|
41
|
+
|
|
42
|
+
components:
|
|
43
|
+
#payment-service:
|
|
44
|
+
description: Core payment processing logic
|
|
45
|
+
file: payment-service.ts
|
|
46
|
+
tags: [integration, stripe, critical]
|
|
47
|
+
signals: ["!payment-completed", "!payment-failed"]
|
|
48
|
+
gates: ["^authenticated"]
|
|
49
|
+
|
|
50
|
+
#billing-calculator:
|
|
51
|
+
description: Computes totals, taxes, and discounts
|
|
52
|
+
file: billing.ts
|
|
53
|
+
tags: [feature]
|
|
54
|
+
|
|
55
|
+
flows:
|
|
56
|
+
$checkout-flow:
|
|
57
|
+
description: End-to-end purchase sequence
|
|
58
|
+
steps:
|
|
59
|
+
- component: "#cart-service"
|
|
60
|
+
action: validate-items
|
|
61
|
+
- component: "#billing-calculator"
|
|
62
|
+
action: compute-total
|
|
63
|
+
- component: "#payment-service"
|
|
64
|
+
action: charge
|
|
65
|
+
|
|
66
|
+
signals:
|
|
67
|
+
!payment-completed:
|
|
68
|
+
description: Emitted after successful charge
|
|
69
|
+
emitters: ["#payment-service"]
|
|
70
|
+
category: business
|
|
71
|
+
|
|
72
|
+
gates:
|
|
73
|
+
^payment-authorized:
|
|
74
|
+
description: User has a valid payment method on file
|
|
75
|
+
check: user.paymentMethods.length > 0
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Key Rules for Purpose Files
|
|
79
|
+
|
|
80
|
+
**One per directory.** Each directory that contains meaningful code should have at most one `.purpose` file. Not every directory needs one — only directories that contain components worth documenting.
|
|
81
|
+
|
|
82
|
+
**Symbols must use the correct prefix.** Components use `#`, flows use `$`, gates use `^`, signals use `!`, aspects use `~`. The prefix is part of the identifier.
|
|
83
|
+
|
|
84
|
+
**Descriptions are required.** Every component, flow, gate, signal, and aspect must have a `description` field. Without it, the symbol is opaque to AI agents.
|
|
85
|
+
|
|
86
|
+
**References link symbols together.** A component can reference the gates it requires (`gates: ["^authenticated"]`), the signals it emits (`signals: ["!payment-completed"]`), and the flows it participates in (`flows: ["$checkout-flow"]`). These cross-references let tools like `paradigm_ripple` calculate impact.
|
|
87
|
+
|
|
88
|
+
**The `context` field is for AI.** The top-level `context` array contains free-text notes aimed at AI agents: conventions, gotchas, assumptions. This is where you write "all amounts are in cents" or "this module is deprecated, use v2 instead."
|
|
89
|
+
|
|
90
|
+
## Where Purpose Files Live
|
|
91
|
+
|
|
92
|
+
Purpose files are placed in source directories — wherever your code lives:
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
src/
|
|
96
|
+
payments/
|
|
97
|
+
.purpose ← describes the payments module
|
|
98
|
+
payment-service.ts
|
|
99
|
+
billing.ts
|
|
100
|
+
auth/
|
|
101
|
+
.purpose ← describes the auth module
|
|
102
|
+
login.ts
|
|
103
|
+
middleware.ts
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
They are NOT placed in the `.paradigm/` directory. The `.paradigm/` directory holds project-wide configuration; `.purpose` files hold directory-level documentation.
|
|
107
|
+
|
|
108
|
+
## Creating Purpose Files with MCP Tools
|
|
109
|
+
|
|
110
|
+
You can create and update purpose files using the Paradigm MCP tools:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
paradigm_purpose_init → Create/update file-level metadata
|
|
114
|
+
paradigm_purpose_add_component → Add a #component
|
|
115
|
+
paradigm_purpose_add_flow → Add a $flow
|
|
116
|
+
paradigm_purpose_add_gate → Add a ^gate
|
|
117
|
+
paradigm_purpose_add_signal → Add a !signal
|
|
118
|
+
paradigm_purpose_add_aspect → Add a ~aspect (with required anchors)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
These tools handle YAML formatting and symbol quoting automatically. For example, YAML treats `!` as a tag indicator, so signal IDs need special quoting — the tools handle this for you.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-101-tags-and-classification
|
|
3
|
+
title: Tags & Classification
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-101
|
|
11
|
+
- tags-classify-components
|
|
12
|
+
- tags-are-defined
|
|
13
|
+
- three-sections-core
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 3
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-101.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Beyond Symbols: The Tag Bank
|
|
24
|
+
|
|
25
|
+
Paradigm's five symbols classify code by *role* — component, flow, gate, signal, aspect. But within each role, you often need finer distinctions. Is this component a user-facing feature or a third-party integration? Is it critical infrastructure or an experimental idea? Paradigm handles this with a unified **tag system**.
|
|
26
|
+
|
|
27
|
+
Tags are plain strings in brackets that you attach to any symbol. They live in the `tags` array on a symbol definition:
|
|
28
|
+
|
|
29
|
+
```yaml
|
|
30
|
+
components:
|
|
31
|
+
#checkout:
|
|
32
|
+
description: Shopping cart checkout experience
|
|
33
|
+
tags: [feature, critical, payments]
|
|
34
|
+
|
|
35
|
+
#stripe-service:
|
|
36
|
+
description: Stripe API client wrapper
|
|
37
|
+
tags: [integration, stripe, payments]
|
|
38
|
+
|
|
39
|
+
#cart-store:
|
|
40
|
+
description: In-memory shopping cart state
|
|
41
|
+
tags: [state, ephemeral]
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## The Tag Bank File
|
|
45
|
+
|
|
46
|
+
Tags are not arbitrary strings — they are defined in `.paradigm/tags.yaml`, which serves as the project's tag bank. The tag bank has three sections:
|
|
47
|
+
|
|
48
|
+
```yaml
|
|
49
|
+
core: # Universal tags, defined by Paradigm itself
|
|
50
|
+
feature: { description: "User-facing functionality" }
|
|
51
|
+
integration: { description: "Third-party service connection" }
|
|
52
|
+
state: { description: "Data store or state container" }
|
|
53
|
+
critical: { description: "Failure causes major user impact" }
|
|
54
|
+
deprecated: { description: "Scheduled for removal" }
|
|
55
|
+
idea: { description: "Experimental, not yet approved" }
|
|
56
|
+
|
|
57
|
+
project: # Team-defined tags specific to this project
|
|
58
|
+
payments: { description: "Related to payment processing" }
|
|
59
|
+
onboarding: { description: "Part of the new-user experience" }
|
|
60
|
+
|
|
61
|
+
suggested: # AI-proposed tags awaiting human approval
|
|
62
|
+
webhook-handler: { description: "Processes incoming webhooks" }
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The **core** section contains tags that apply to any project. The **project** section contains tags your team has defined for this specific codebase. The **suggested** section is where AI agents can propose new tags using the `paradigm_tags_suggest` tool — a human reviews and promotes them to the project section.
|
|
66
|
+
|
|
67
|
+
## How Tags Work in Practice
|
|
68
|
+
|
|
69
|
+
Here is how tags differentiate components that serve different roles:
|
|
70
|
+
|
|
71
|
+
| Role | How to Tag |
|
|
72
|
+
|-----------|---------------|
|
|
73
|
+
| User-facing feature | `#checkout` with `tags: [feature]` |
|
|
74
|
+
| Third-party service | `#stripe-service` with `tags: [integration, stripe]` |
|
|
75
|
+
| Data store | `#cart-store` with `tags: [state]` |
|
|
76
|
+
| Experimental prototype | `#new-widget` with `tags: [idea]` |
|
|
77
|
+
| Scheduled for removal | `#legacy-handler` with `tags: [deprecated]` |
|
|
78
|
+
|
|
79
|
+
This means fewer concepts to remember and no ambiguity. A Stripe payment service is `#stripe-service` with `tags: [integration, stripe]` — clear, searchable, and consistent.
|
|
80
|
+
|
|
81
|
+
## Using Tags Effectively
|
|
82
|
+
|
|
83
|
+
Tags are most powerful when they are **consistent and searchable**. Follow these guidelines:
|
|
84
|
+
|
|
85
|
+
- **Use existing tags before inventing new ones.** Check `paradigm_tags({ action: "list" })` to see what is available.
|
|
86
|
+
- **Keep tags lowercase and kebab-case.** `webhook-handler`, not `WebhookHandler` or `WEBHOOK_HANDLER`.
|
|
87
|
+
- **Use 2-4 tags per symbol.** One tag is too vague; ten tags is noise.
|
|
88
|
+
- **Tag for discoverability.** Ask: "What would I search for to find this component?" Those search terms are your tags.
|
|
89
|
+
- **Let AI propose tags.** If you notice a pattern (e.g., five components all handle webhooks), use `paradigm_tags_suggest` to propose a `webhook-handler` tag.
|
|
90
|
+
|
|
91
|
+
## Querying by Tags
|
|
92
|
+
|
|
93
|
+
The Paradigm MCP tools support tag-based discovery. When you call `paradigm_search` with a tag name, it returns all symbols bearing that tag. This makes it easy to ask questions like "show me everything tagged `critical`" or "find all `integration` components."
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-101-welcome
|
|
3
|
+
title: Welcome to Paradigm
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-101
|
|
11
|
+
- meta-framework-for-ai-assisted
|
|
12
|
+
- structured-context-over
|
|
13
|
+
- five-operational-symbols
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 3
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-101.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## What Is Paradigm?
|
|
24
|
+
|
|
25
|
+
Paradigm is a **meta-framework for structured AI-assisted development**. It is not a code framework like React or Express — it does not ship components, generate boilerplate, or impose a runtime. Instead, Paradigm organizes *how AI agents understand your code*. It provides a shared vocabulary of symbols, a directory-level documentation format, and a set of specifications that let any AI assistant — whether Claude, Cursor, or another tool — navigate even large codebases with precision and minimal token waste.
|
|
26
|
+
|
|
27
|
+
The core insight behind Paradigm is simple: AI agents are powerful, but they struggle when dropped into an undocumented codebase. They spend thousands of tokens exploring directories, guessing at relationships, and re-reading files they have already seen. Paradigm solves this by giving the codebase *structured context* — lightweight metadata files that describe what lives where, how pieces relate, and what rules apply.
|
|
28
|
+
|
|
29
|
+
## The Three Pillars
|
|
30
|
+
|
|
31
|
+
Paradigm rests on three pillars:
|
|
32
|
+
|
|
33
|
+
1. **Symbols** — A set of five prefixed identifiers (`#`, `$`, `^`, `!`, `~`) that classify every meaningful unit in your project. A payment service is `#PaymentService`. An authorization check is `^authenticated`. A business event is `!order-placed`. Symbols are the vocabulary AI agents use to talk about your code.
|
|
34
|
+
|
|
35
|
+
2. **Purpose Files** — YAML files named `.purpose` that live in directories alongside your source code. They declare which components, flows, gates, signals, and aspects exist in that directory. They are the map AI agents read before they touch any code.
|
|
36
|
+
|
|
37
|
+
3. **Specifications** — Files in the `.paradigm/` directory that define project-wide configuration, tag taxonomies, agent roles, navigation maps, and team wisdom. They are the rulebook that keeps every agent aligned with your team's conventions.
|
|
38
|
+
|
|
39
|
+
## Why It Matters
|
|
40
|
+
|
|
41
|
+
Without structured context, an AI agent working on a checkout feature might:
|
|
42
|
+
- Spend 2,000+ tokens reading irrelevant files looking for the payment service
|
|
43
|
+
- Miss an authorization gate that protects the endpoint
|
|
44
|
+
- Accidentally duplicate a signal that another component already emits
|
|
45
|
+
- Use `console.log` instead of the team's structured logger
|
|
46
|
+
|
|
47
|
+
With Paradigm, that same agent calls `paradigm_navigate` to find `#PaymentService` in ~100 tokens, checks `paradigm_ripple` to see what depends on it, reads the `.purpose` file to understand the directory, and follows the team's logging convention. The result is faster, safer, and more consistent code changes.
|
|
48
|
+
|
|
49
|
+
## What You Will Learn
|
|
50
|
+
|
|
51
|
+
In this course you will learn the five symbols and when to use each one, how to write and read `.purpose` files, how to classify symbols with tags, how to use the Paradigm logger, how the `.paradigm/` directory is organized, how `portal.yaml` secures your routes, and how to set up a new project from scratch.
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-201-architecture-review
|
|
3
|
+
title: Putting It All Together
|
|
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-building-follows
|
|
12
|
+
- implementation-comes-last
|
|
13
|
+
- check-existing-aspects
|
|
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
|
+
## Building a Complete Feature
|
|
24
|
+
|
|
25
|
+
You have learned flows, gates, aspects, disciplines, naming conventions, component patterns, signal patterns, and cross-cutting concerns. Now let us walk through building a complete feature from scratch, using every tool in the Paradigm toolkit. The feature: **a team invitation system** where team admins can invite new members via email.
|
|
26
|
+
|
|
27
|
+
## Step 1: Identify Components
|
|
28
|
+
|
|
29
|
+
Start by listing the code units you will need:
|
|
30
|
+
|
|
31
|
+
```yaml
|
|
32
|
+
#invitation-service:
|
|
33
|
+
description: Creates and manages team invitations
|
|
34
|
+
tags: [feature, teams]
|
|
35
|
+
|
|
36
|
+
#invitation-email:
|
|
37
|
+
description: Sends invitation emails via SendGrid
|
|
38
|
+
tags: [integration, sendgrid, email]
|
|
39
|
+
|
|
40
|
+
#invitation-token:
|
|
41
|
+
description: Generates and validates secure invitation tokens
|
|
42
|
+
tags: [infrastructure, security]
|
|
43
|
+
|
|
44
|
+
#invitation-store:
|
|
45
|
+
description: Persists invitations with status tracking
|
|
46
|
+
tags: [state, teams]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Four components — one feature, one integration, one infrastructure, one state. Each has a clear responsibility and appropriate tags.
|
|
50
|
+
|
|
51
|
+
## Step 2: Define the Flow
|
|
52
|
+
|
|
53
|
+
The invitation process spans all four components in sequence:
|
|
54
|
+
|
|
55
|
+
```yaml
|
|
56
|
+
$team-invitation-flow:
|
|
57
|
+
description: Admin invites a user, email is sent, user accepts and joins team
|
|
58
|
+
steps:
|
|
59
|
+
- component: "#invitation-service"
|
|
60
|
+
action: create-invitation
|
|
61
|
+
description: Validates admin permissions and creates invitation record
|
|
62
|
+
- component: "#invitation-token"
|
|
63
|
+
action: generate-token
|
|
64
|
+
description: Creates a cryptographically secure token with 7-day expiry
|
|
65
|
+
- component: "#invitation-store"
|
|
66
|
+
action: persist-invitation
|
|
67
|
+
description: Saves invitation with pending status
|
|
68
|
+
- component: "#invitation-email"
|
|
69
|
+
action: send-invite
|
|
70
|
+
description: Sends email with accept link containing the token
|
|
71
|
+
signals: ["!invitation-sent", "!invitation-accepted"]
|
|
72
|
+
gates: ["^authenticated", "^team-admin"]
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Step 3: Add Gates
|
|
76
|
+
|
|
77
|
+
Two gates are needed. First, check `portal.yaml` for existing gates. `^authenticated` likely exists. `^team-admin` may need to be created:
|
|
78
|
+
|
|
79
|
+
```yaml
|
|
80
|
+
# In portal.yaml
|
|
81
|
+
gates:
|
|
82
|
+
^team-admin:
|
|
83
|
+
description: User must be an admin of the specified team
|
|
84
|
+
check: team.admins.includes(req.user.id)
|
|
85
|
+
type: role
|
|
86
|
+
requires: [^authenticated]
|
|
87
|
+
effects: []
|
|
88
|
+
|
|
89
|
+
routes:
|
|
90
|
+
"POST /api/teams/:id/invitations": [^authenticated, ^team-admin]
|
|
91
|
+
"POST /api/invitations/:token/accept": [^authenticated]
|
|
92
|
+
"GET /api/teams/:id/invitations": [^authenticated, ^team-admin]
|
|
93
|
+
"DELETE /api/invitations/:id": [^authenticated, ^team-admin]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Notice that accepting an invitation only requires `^authenticated` — any logged-in user with a valid token can accept. But creating, listing, and deleting invitations requires `^team-admin`.
|
|
97
|
+
|
|
98
|
+
## Step 4: Define Signals
|
|
99
|
+
|
|
100
|
+
```yaml
|
|
101
|
+
!invitation-sent:
|
|
102
|
+
description: An invitation email was successfully sent to a prospective team member
|
|
103
|
+
emitters: ["#invitation-service"]
|
|
104
|
+
category: business
|
|
105
|
+
data:
|
|
106
|
+
invitationId: string
|
|
107
|
+
teamId: string
|
|
108
|
+
email: string
|
|
109
|
+
|
|
110
|
+
!invitation-accepted:
|
|
111
|
+
description: A user accepted a team invitation and joined the team
|
|
112
|
+
emitters: ["#invitation-service"]
|
|
113
|
+
category: business
|
|
114
|
+
data:
|
|
115
|
+
invitationId: string
|
|
116
|
+
teamId: string
|
|
117
|
+
userId: string
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
These business signals enable decoupled side effects — an analytics tracker can listen for `!invitation-accepted` to track conversion rates, and a notification service can alert existing team members.
|
|
121
|
+
|
|
122
|
+
## Step 5: Apply Aspects
|
|
123
|
+
|
|
124
|
+
Check which aspects apply to the new components:
|
|
125
|
+
|
|
126
|
+
- `~audit-required` applies to `#*Service` → `#invitation-service` is covered. Ensure the audit middleware is applied.
|
|
127
|
+
- `~rate-limited` applies to `#*-handler` → Not directly applicable here (no handler component), but the API route should go through the rate limiter.
|
|
128
|
+
- `~validated` applies to `#*-handler` → The invitation endpoint should validate input (email format, team existence).
|
|
129
|
+
|
|
130
|
+
## Step 6: Write the .purpose File
|
|
131
|
+
|
|
132
|
+
Assemble everything into `src/invitations/.purpose`:
|
|
133
|
+
|
|
134
|
+
```yaml
|
|
135
|
+
name: Team Invitations
|
|
136
|
+
description: Team admin invitation system with email delivery and token-based acceptance
|
|
137
|
+
context:
|
|
138
|
+
- Invitation tokens expire after 7 days
|
|
139
|
+
- Maximum 50 pending invitations per team
|
|
140
|
+
- Uses SendGrid for email delivery
|
|
141
|
+
|
|
142
|
+
components:
|
|
143
|
+
#invitation-service:
|
|
144
|
+
description: Creates and manages team invitations
|
|
145
|
+
file: invitation-service.ts
|
|
146
|
+
tags: [feature, teams]
|
|
147
|
+
flows: ["$team-invitation-flow"]
|
|
148
|
+
signals: ["!invitation-sent", "!invitation-accepted"]
|
|
149
|
+
gates: ["^authenticated", "^team-admin"]
|
|
150
|
+
aspects: ["~audit-required"]
|
|
151
|
+
# ... (remaining components)
|
|
152
|
+
|
|
153
|
+
flows:
|
|
154
|
+
$team-invitation-flow:
|
|
155
|
+
# ... (as defined above)
|
|
156
|
+
|
|
157
|
+
signals:
|
|
158
|
+
!invitation-sent:
|
|
159
|
+
# ... (as defined above)
|
|
160
|
+
!invitation-accepted:
|
|
161
|
+
# ... (as defined above)
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Step 7: Validate
|
|
165
|
+
|
|
166
|
+
Before writing any implementation code, validate the Paradigm definitions:
|
|
167
|
+
|
|
168
|
+
1. `paradigm_purpose_validate` — Checks the .purpose file for schema errors.
|
|
169
|
+
2. `paradigm_flow_check` — Verifies the flow references valid components.
|
|
170
|
+
3. `paradigm_aspect_check` — Confirms aspect anchors are valid for applied aspects.
|
|
171
|
+
4. `paradigm_ripple` — Shows what existing code is affected by the new components.
|
|
172
|
+
|
|
173
|
+
## The Pattern
|
|
174
|
+
|
|
175
|
+
Every feature follows this pattern: **identify components** → **define flows** → **add gates** → **define signals** → **apply aspects** → **write .purpose** → **validate** → **implement**. The implementation comes last — after the architecture is documented and validated. This front-loaded documentation pays dividends: AI agents can navigate the new feature immediately, security is defined before code, and the team has a clear map of what will be built.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-201-aspect-graph
|
|
3
|
+
title: The Aspect Graph
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-201
|
|
11
|
+
- aspect-graph-connects
|
|
12
|
+
- five-aspect-categories
|
|
13
|
+
- five-edge-relations
|
|
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
|
+
## What Is the Aspect Graph?
|
|
24
|
+
|
|
25
|
+
In earlier lessons you learned that aspects (`~`) represent cross-cutting rules, constraints, and configuration values anchored to specific lines of code. The **aspect graph** connects those aspects to each other and to the rest of your symbol system — components, gates, flows, and signals — creating a queryable relationship map.
|
|
26
|
+
|
|
27
|
+
Think of it this way: a single aspect like `~token-expiry-24h` is useful on its own. But when you can see that it is *enforced by* `^authenticated`, *related to* `~refresh-token-7d`, and linked to a lore entry explaining why the team chose 24 hours — that is the graph at work.
|
|
28
|
+
|
|
29
|
+
## v3.5 Aspect Fields
|
|
30
|
+
|
|
31
|
+
Paradigm v3.5 extended aspects with structured fields that make them graph-ready:
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
aspects:
|
|
35
|
+
~rate-limit-100:
|
|
36
|
+
description: API rate limited to 100 requests per minute
|
|
37
|
+
value: 100/min
|
|
38
|
+
category: constraint
|
|
39
|
+
severity: high
|
|
40
|
+
anchors:
|
|
41
|
+
- src/middleware/rate-limiter.ts:12-18
|
|
42
|
+
applies-to: [#api-gateway]
|
|
43
|
+
edges:
|
|
44
|
+
- symbol: ^authenticated
|
|
45
|
+
relation: enforced-by
|
|
46
|
+
tags: [security, performance]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Key fields:
|
|
50
|
+
- **value** — The concrete value (a number, duration, threshold) making aspects searchable by content
|
|
51
|
+
- **category** — One of five types: `rule` (behavioral), `decision` (architectural choice), `constraint` (hard limit), `configuration` (environment-specific), `invariant` (always-true condition)
|
|
52
|
+
- **severity** — Impact of violation: `low`, `medium`, `high`, `critical`
|
|
53
|
+
- **edges** — Explicit relationships to other symbols with typed relations: `enforced-by`, `depends-on`, `contradicts`, `supersedes`, `related-to`
|
|
54
|
+
- **lore** — References to lore entries providing historical context
|
|
55
|
+
|
|
56
|
+
## Working with the Graph
|
|
57
|
+
|
|
58
|
+
Seven MCP tools let you interact with the aspect graph:
|
|
59
|
+
|
|
60
|
+
| Tool | Purpose |
|
|
61
|
+
|------|---------|
|
|
62
|
+
| `paradigm_aspect_search` | Find aspects by keyword — uses a three-tier search (learned mappings, full-text, fuzzy) |
|
|
63
|
+
| `paradigm_aspect_get` | Deep-dive: full definition, code snippets at anchors, edges, linked lore |
|
|
64
|
+
| `paradigm_aspect_graph` | Explore the neighborhood around a symbol (N hops out) |
|
|
65
|
+
| `paradigm_aspect_heatmap` | See which aspects are accessed most (search, ripple, navigate, direct) |
|
|
66
|
+
| `paradigm_aspect_suggest_scan` | Scan a source file for undocumented aspects (magic numbers, hardcoded strings, rate limits, etc.) |
|
|
67
|
+
| `paradigm_aspect_drift` | Check if code at anchored lines changed since last scan (SHA-256 hash comparison) |
|
|
68
|
+
| `paradigm_aspect_confirm` | Confirm a search result to improve future search accuracy (learning loop) |
|
|
69
|
+
|
|
70
|
+
The graph is stored as a SQLite database at `.paradigm/aspect-graph.db` — a derived artifact rebuilt by `paradigm_reindex`. The YAML `.purpose` files remain the source of truth.
|
|
71
|
+
|
|
72
|
+
## When to Use the Aspect Graph
|
|
73
|
+
|
|
74
|
+
- **Before modifying enforcement code** — call `paradigm_aspect_drift` to check for stale anchors
|
|
75
|
+
- **Exploring unfamiliar rules** — call `paradigm_aspect_search` then `paradigm_aspect_get` for full context
|
|
76
|
+
- **Understanding impact** — call `paradigm_aspect_graph` to see what a change affects
|
|
77
|
+
- **Finding undocumented rules** — call `paradigm_aspect_suggest_scan` on source files
|
|
78
|
+
|
|
79
|
+
> **Deep dive:** PARA 501 covers the SQLite schema, three-tier search internals, the learning loop, edge origins (explicit vs inferred vs learned), and the materialization pipeline in detail.
|