@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,204 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-701-model-tier-resolution
|
|
3
|
+
title: 'Lesson 6: Model Tier Resolution'
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-701
|
|
11
|
+
- three-capability-tiers
|
|
12
|
+
- model-resolution-config-block
|
|
13
|
+
- five-level-resolution-cascade
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 5
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-701.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## The Platform Portability Problem
|
|
24
|
+
|
|
25
|
+
Early Paradigm agent profiles specified `defaultModel: opus | sonnet | haiku` — Anthropic-specific model names hardcoded into each agent's configuration. This created four problems:
|
|
26
|
+
|
|
27
|
+
1. **Platform lock-in** — These model names do not exist in Cursor, Windsurf, Copilot, or other IDEs. An agent profile designed for Claude Code breaks everywhere else.
|
|
28
|
+
2. **Plan limitations** — Not every user has access to Opus. A developer on a Sonnet-only plan cannot use agents that request Opus without manual profile editing.
|
|
29
|
+
3. **Provider assumptions** — The model names assume Anthropic. Users who want to use GPT-4o, Gemini, or local models through Ollama have no path.
|
|
30
|
+
4. **Maintenance burden** — Model names were hardcoded in the orchestrator as `DEFAULT_MODELS`. Every time Anthropic ships a new model, someone has to update agent profiles.
|
|
31
|
+
|
|
32
|
+
## The Solution: Capability Tiers
|
|
33
|
+
|
|
34
|
+
Model tier resolution replaces specific model names with abstract **capability tiers** that describe what the agent needs, not which model to use:
|
|
35
|
+
|
|
36
|
+
| Tier | Capability | Use Cases |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| `tier-1` (reasoning) | Complex analysis, multi-step planning | Architect, security audit, system design |
|
|
39
|
+
| `tier-2` (balanced) | General coding, review, design | Reviewer, designer, most agent work |
|
|
40
|
+
| `tier-3` (fast) | Simple tasks, documentation, bulk ops | Builder, tester, documentor |
|
|
41
|
+
|
|
42
|
+
Agent profiles now specify `modelTier` instead of `defaultModel`:
|
|
43
|
+
|
|
44
|
+
```yaml
|
|
45
|
+
# Before (platform-locked)
|
|
46
|
+
defaultModel: opus
|
|
47
|
+
|
|
48
|
+
# After (platform-agnostic)
|
|
49
|
+
modelTier: tier-1
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The orchestrator maps tier requests to available models through a resolution table in the project configuration.
|
|
53
|
+
|
|
54
|
+
## The model-resolution Config Block
|
|
55
|
+
|
|
56
|
+
The `model-resolution` block in `.paradigm/config.yaml` maps tiers to actual model identifiers:
|
|
57
|
+
|
|
58
|
+
```yaml
|
|
59
|
+
# .paradigm/config.yaml
|
|
60
|
+
model-resolution:
|
|
61
|
+
tier-1: claude-opus-4-6 # Best reasoning available
|
|
62
|
+
tier-2: claude-sonnet-4-6 # Balanced
|
|
63
|
+
tier-3: claude-haiku-4-5 # Fast/cheap
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
This is the single configuration point where model choices live. Changing all agent models is a 3-line edit. Different environments ship different defaults:
|
|
67
|
+
|
|
68
|
+
```yaml
|
|
69
|
+
# Claude Code (full Anthropic access)
|
|
70
|
+
model-resolution:
|
|
71
|
+
tier-1: claude-opus-4-6
|
|
72
|
+
tier-2: claude-sonnet-4-6
|
|
73
|
+
tier-3: claude-haiku-4-5
|
|
74
|
+
|
|
75
|
+
# Cursor (may not have Opus access)
|
|
76
|
+
model-resolution:
|
|
77
|
+
tier-1: claude-sonnet-4-6
|
|
78
|
+
tier-2: claude-sonnet-4-6
|
|
79
|
+
tier-3: claude-haiku-4-5
|
|
80
|
+
|
|
81
|
+
# OpenAI-only environment
|
|
82
|
+
model-resolution:
|
|
83
|
+
tier-1: gpt-4o
|
|
84
|
+
tier-2: gpt-4o-mini
|
|
85
|
+
tier-3: gpt-4o-mini
|
|
86
|
+
|
|
87
|
+
# Self-hosted / Ollama
|
|
88
|
+
model-resolution:
|
|
89
|
+
tier-1: llama-3.1-70b
|
|
90
|
+
tier-2: llama-3.1-8b
|
|
91
|
+
tier-3: llama-3.1-8b
|
|
92
|
+
|
|
93
|
+
# Budget-conscious
|
|
94
|
+
model-resolution:
|
|
95
|
+
tier-1: claude-sonnet-4-6
|
|
96
|
+
tier-2: claude-sonnet-4-6
|
|
97
|
+
tier-3: claude-sonnet-4-6
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
The budget-conscious configuration demonstrates the power of tiers: you can run the full 54-agent orchestration system with Sonnet for everything by mapping all three tiers to the same model. The agents still have different personalities, expertise, and behaviors — the model tier only affects the underlying LLM capability.
|
|
101
|
+
|
|
102
|
+
## Resolution Order
|
|
103
|
+
|
|
104
|
+
When the orchestrator needs a model for an agent, it resolves through a five-level cascade:
|
|
105
|
+
|
|
106
|
+
1. **Agent profile** — `modelTier` field (what the agent requests)
|
|
107
|
+
2. **Project config** — `.paradigm/config.yaml` `model-resolution` block (project override)
|
|
108
|
+
3. **Global config** — `~/.paradigm/config.yaml` `model-resolution` block (user preference)
|
|
109
|
+
4. **IDE detection** — Auto-detect available models from environment variables (`CLAUDE_CODE`, `CURSOR_SESSION`, `WINDSURF_SESSION`)
|
|
110
|
+
5. **Fallback** — Default to tier-2 (balanced) with the best available model
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
function resolveModel(tier: ModelTier, config: ParadigmConfig): string {
|
|
114
|
+
return config.modelResolution?.[tier] ?? DEFAULTS[tier];
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
The cascade ensures that agent preferences are respected when possible, project-level overrides take precedence over global preferences, and there is always a working fallback even if nothing is configured.
|
|
119
|
+
|
|
120
|
+
## Environment Detection
|
|
121
|
+
|
|
122
|
+
The system auto-detects the IDE environment to set sensible defaults:
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
function detectEnvironment(): ModelResolution {
|
|
126
|
+
if (process.env.CLAUDE_CODE) {
|
|
127
|
+
return {
|
|
128
|
+
'tier-1': 'claude-opus-4-6',
|
|
129
|
+
'tier-2': 'claude-sonnet-4-6',
|
|
130
|
+
'tier-3': 'claude-haiku-4-5'
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
if (process.env.CURSOR_SESSION) {
|
|
134
|
+
return {
|
|
135
|
+
'tier-1': 'claude-sonnet-4-6',
|
|
136
|
+
'tier-2': 'claude-sonnet-4-6',
|
|
137
|
+
'tier-3': 'claude-haiku-4-5'
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
// Fallback: everything is tier-2
|
|
141
|
+
return {
|
|
142
|
+
'tier-1': 'claude-sonnet-4-6',
|
|
143
|
+
'tier-2': 'claude-sonnet-4-6',
|
|
144
|
+
'tier-3': 'claude-sonnet-4-6'
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Claude Code users get the full tier spread (Opus/Sonnet/Haiku). Cursor users get Sonnet for tier-1 because Opus may not be available in Cursor's model selection. Unknown environments get Sonnet for everything as a safe fallback.
|
|
150
|
+
|
|
151
|
+
## Default Tier Assignments
|
|
152
|
+
|
|
153
|
+
The orchestrator assigns default tiers to standard agent roles:
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
const DEFAULT_TIERS: Record<string, ModelTier> = {
|
|
157
|
+
architect: 'tier-1', // Complex planning and design
|
|
158
|
+
security: 'tier-1', // Critical analysis, cannot miss vulnerabilities
|
|
159
|
+
reviewer: 'tier-2', // Balanced evaluation
|
|
160
|
+
builder: 'tier-3', // Fast implementation
|
|
161
|
+
tester: 'tier-3', // Fast test writing
|
|
162
|
+
documentor: 'tier-3', // Fast file maintenance
|
|
163
|
+
};
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Architect and security get tier-1 because their work requires deep reasoning (system design, vulnerability analysis). Builder, tester, and documentor get tier-3 because their work is more mechanical (implement this spec, write this test, update this .purpose file). Reviewer gets tier-2 as a balanced middle ground.
|
|
167
|
+
|
|
168
|
+
These defaults can be overridden per-agent in the `.agent` file (`modelTier: tier-2`) or per-project in config.yaml.
|
|
169
|
+
|
|
170
|
+
## Cost Estimation
|
|
171
|
+
|
|
172
|
+
The orchestrator uses tier cost multipliers for budget estimation:
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
const TIER_COST_MULTIPLIER = {
|
|
176
|
+
'tier-1': 3.0, // ~$15/MTok for Opus
|
|
177
|
+
'tier-2': 1.0, // ~$3/MTok for Sonnet (baseline)
|
|
178
|
+
'tier-3': 0.25, // ~$0.80/MTok for Haiku
|
|
179
|
+
};
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
The orchestration plan output includes cost estimates: "Estimated cost: $0.12 (tier-1: architect, tier-2: reviewer, tier-3: builder+documentor)". This transparency lets the human approve or modify the plan before execution.
|
|
183
|
+
|
|
184
|
+
## Backward Compatibility
|
|
185
|
+
|
|
186
|
+
The migration path preserves existing profiles:
|
|
187
|
+
|
|
188
|
+
```yaml
|
|
189
|
+
# Agent profile with both fields (transitional)
|
|
190
|
+
defaultModel: opus # Old field (deprecated, still read)
|
|
191
|
+
modelTier: tier-1 # New field (preferred)
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
The resolution logic checks `modelTier` first. If only `defaultModel` exists, it maps: `opus` to `tier-1`, `sonnet` to `tier-2`, `haiku` to `tier-3`. This ensures existing agent profiles continue working without modification.
|
|
195
|
+
|
|
196
|
+
## What This Enables
|
|
197
|
+
|
|
198
|
+
Model tier resolution unlocks five capabilities:
|
|
199
|
+
|
|
200
|
+
- **Budget control** — Map all tiers to Sonnet and run the full orchestration at Sonnet cost.
|
|
201
|
+
- **Platform portability** — Same agents work in Claude Code, Cursor, Windsurf, and Copilot.
|
|
202
|
+
- **Provider flexibility** — Swap to OpenAI, Gemini, or local models by changing 3 lines in config.
|
|
203
|
+
- **Graceful degradation** — If the tier-1 model is unavailable, fall back to tier-2 automatically.
|
|
204
|
+
- **Team consistency** — The entire team shares one `model-resolution` config block, not per-agent model names.
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-701-orchestration-enforcement
|
|
3
|
+
title: 'Lesson 7: Orchestration Enforcement'
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-701
|
|
11
|
+
- three-seed-habits
|
|
12
|
+
- enforcement-uses-the
|
|
13
|
+
- nominations-surface-in
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 6
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-701.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Why Enforcement Matters
|
|
24
|
+
|
|
25
|
+
Orchestration is powerful but optional. An agent can skip `paradigm_orchestrate_inline` and implement a 10-file feature solo, bypassing security review, missing test coverage, and producing no documentation updates. The feature ships, but quality degrades silently.
|
|
26
|
+
|
|
27
|
+
Enforcement solves this by making orchestration the path of least resistance. Instead of hardcoding rules into agent logic ("always call the orchestrator"), enforcement works through Paradigm's habit system — three seed habits that nudge, warn, and track orchestration compliance.
|
|
28
|
+
|
|
29
|
+
## The Three Orchestration Habits
|
|
30
|
+
|
|
31
|
+
Paradigm seeds three habits specifically for orchestration enforcement:
|
|
32
|
+
|
|
33
|
+
### 1. orchestration-required (preflight, warn)
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
{
|
|
37
|
+
id: 'orchestration-required',
|
|
38
|
+
name: 'Orchestrate Complex Tasks',
|
|
39
|
+
description: 'Tasks affecting 3+ files or touching security symbols
|
|
40
|
+
should use paradigm_orchestrate_inline to determine which agents
|
|
41
|
+
are needed.',
|
|
42
|
+
category: 'collaboration',
|
|
43
|
+
trigger: 'preflight',
|
|
44
|
+
severity: 'warn',
|
|
45
|
+
check: {
|
|
46
|
+
type: 'tool-called',
|
|
47
|
+
params: { tools: ['paradigm_orchestrate_inline'] }
|
|
48
|
+
},
|
|
49
|
+
enabled: true,
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
This habit fires at **preflight** (session start). It checks whether `paradigm_orchestrate_inline` was called. If not, and the task description suggests complexity (3+ files, security symbols), it emits a `warn` severity message: "This task may benefit from orchestration. Call paradigm_orchestrate_inline mode='plan' to see which agents are needed."
|
|
54
|
+
|
|
55
|
+
The severity is `warn`, not `block`. This is deliberate. Blocking on orchestration would prevent quick fixes, hot patches, and simple tasks that genuinely do not need multi-agent coordination. The warning surfaces the recommendation; the human decides whether to follow it.
|
|
56
|
+
|
|
57
|
+
### 2. agent-coverage-validated (postflight, advisory)
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
{
|
|
61
|
+
id: 'agent-coverage-validated',
|
|
62
|
+
name: 'Validate Agent Involvement',
|
|
63
|
+
description: 'After completing work, verify that agents with relevant
|
|
64
|
+
expertise were consulted. Check nominations that were surfaced but
|
|
65
|
+
not acted on.',
|
|
66
|
+
category: 'collaboration',
|
|
67
|
+
trigger: 'postflight',
|
|
68
|
+
severity: 'advisory',
|
|
69
|
+
check: {
|
|
70
|
+
type: 'tool-called',
|
|
71
|
+
params: {
|
|
72
|
+
tools: ['paradigm_ambient_nominations', 'paradigm_agent_list']
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
enabled: true,
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
This habit fires at **postflight** (before session end). It checks whether agent nominations were reviewed. If `paradigm_ambient_nominations` was not called, it advises: "There may be agent nominations you haven't reviewed. Run paradigm_ambient_nominations to check if any agents have relevant contributions."
|
|
80
|
+
|
|
81
|
+
This catches the scenario where the orchestrator was bypassed but agents still self-nominated. The security agent may have noticed a new route without a gate, but if nobody checked nominations, the contribution is lost.
|
|
82
|
+
|
|
83
|
+
### 3. hot-mode-incident (on-stop, advisory)
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
{
|
|
87
|
+
id: 'hot-mode-incident',
|
|
88
|
+
name: 'Incident Response Acknowledgment',
|
|
89
|
+
description: 'During incident response, orchestration enforcement is
|
|
90
|
+
waived. But a post-incident lore entry is required and a postflight
|
|
91
|
+
review should be scheduled.',
|
|
92
|
+
category: 'collaboration',
|
|
93
|
+
trigger: 'on-stop',
|
|
94
|
+
severity: 'advisory',
|
|
95
|
+
check: { type: 'lore-recorded' },
|
|
96
|
+
enabled: true,
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
This habit acknowledges that incidents are different. When production is down, you do not want a warning about calling the orchestrator. You want to fix the problem. This habit fires at **on-stop** and only checks that a lore entry was recorded. The rationale: during incidents, skip orchestration. After incidents, record what happened so the learning loop can process it.
|
|
101
|
+
|
|
102
|
+
## The Nomination System
|
|
103
|
+
|
|
104
|
+
Orchestration enforcement works hand-in-hand with the nomination system. When events flow through the event stream, each agent scores them against their attention patterns. Agents whose scores exceed their threshold self-nominate contributions.
|
|
105
|
+
|
|
106
|
+
Nominations surface in two places:
|
|
107
|
+
|
|
108
|
+
1. **During orchestration plan/execute** — The orchestrator includes pending nominations in the plan. If the security agent nominated a gate-coverage review, it appears in the orchestration plan's agent list with the nomination brief.
|
|
109
|
+
|
|
110
|
+
2. **Via paradigm_ambient_nominations** — This MCP tool returns all pending nominations with their urgency, agent, and brief description. The `agent-coverage-validated` habit points agents here when orchestration was skipped.
|
|
111
|
+
|
|
112
|
+
The nomination flow:
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
Event emitted → Each agent scores it → Score >= threshold →
|
|
116
|
+
Agent self-nominates → Nomination stored →
|
|
117
|
+
Surfaced in orchestration OR paradigm_ambient_nominations
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## The Post-Write Hook Connection
|
|
121
|
+
|
|
122
|
+
The post-write hook (which runs after every file edit) emits events into the event stream. These events trigger attention scoring across all active agents. If an agent's attention score exceeds its threshold, a nomination is created.
|
|
123
|
+
|
|
124
|
+
The post-write hook itself does not enforce orchestration. It simply produces the events that feed the nomination engine. The enforcement comes from the habits that check whether nominations were reviewed.
|
|
125
|
+
|
|
126
|
+
## Enforcement Through Habits, Not Hardcoded Logic
|
|
127
|
+
|
|
128
|
+
This is a critical architectural decision. Orchestration enforcement is not baked into the orchestrator or the agent runtime. It lives in the habit system, which means:
|
|
129
|
+
|
|
130
|
+
- **Configurable** — A project can disable `orchestration-required` by setting `enabled: false` in their habits override. A team that always orchestrates manually can turn off the nag.
|
|
131
|
+
- **Tunable** — A project can change the severity from `warn` to `block` if they want strict enforcement. A project can change it to `advisory` if they want a softer touch.
|
|
132
|
+
- **Extensible** — Teams can add custom orchestration habits. A habit that requires security review for any task touching `auth/**` files. A habit that requires documentation review for API changes.
|
|
133
|
+
- **Transparent** — Habits are declared in YAML, visible in the project configuration, and evaluated at predictable trigger points (preflight, postflight, on-stop).
|
|
134
|
+
|
|
135
|
+
The alternative — hardcoding orchestration requirements into the orchestrator itself — would be rigid, opaque, and impossible to customize per project. The habit system provides the same enforcement with full flexibility.
|
|
136
|
+
|
|
137
|
+
## Habit Evaluation Context
|
|
138
|
+
|
|
139
|
+
When habits are evaluated, the system provides an `EvaluationContext` that includes:
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
interface EvaluationContext {
|
|
143
|
+
toolsCalled: string[]; // Which MCP tools were invoked
|
|
144
|
+
filesModified: string[]; // Which files were changed
|
|
145
|
+
symbolsTouched: string[]; // Which symbols were affected
|
|
146
|
+
loreRecorded: boolean; // Whether a lore entry was written
|
|
147
|
+
hasPortalRoutes: boolean; // Whether portal.yaml has routes
|
|
148
|
+
taskAddsRoutes: boolean; // Whether the task added new routes
|
|
149
|
+
taskDescription?: string; // The task description (for complexity analysis)
|
|
150
|
+
gitClean?: boolean; // Whether the working tree is clean
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
The `orchestration-required` habit checks `toolsCalled` for `paradigm_orchestrate_inline`. The `agent-coverage-validated` habit checks for `paradigm_ambient_nominations` or `paradigm_agent_list`. The `hot-mode-incident` habit checks `loreRecorded`.
|
|
155
|
+
|
|
156
|
+
The evaluation produces a `HabitEvaluation` with three possible results: `followed` (the habit was satisfied), `skipped` (the habit was not satisfied), or `partial` (some conditions met, others not). Skipped habits with `warn` severity produce warnings; skipped habits with `block` severity prevent the session from completing.
|
|
157
|
+
|
|
158
|
+
## Practical Workflow
|
|
159
|
+
|
|
160
|
+
Here is how orchestration enforcement plays out in a typical session:
|
|
161
|
+
|
|
162
|
+
1. Developer starts a task: "Add webhook support for Stripe events"
|
|
163
|
+
2. **Preflight** — `orchestration-required` fires: "This task modifies auth-related symbols. Consider calling paradigm_orchestrate_inline."
|
|
164
|
+
3. Developer calls `paradigm_orchestrate_inline mode='plan'` — the plan includes builder (implement), security (gate review), tester (write tests), documentor (update .purpose)
|
|
165
|
+
4. Developer calls `paradigm_orchestrate_inline mode='execute'` — agents produce their outputs
|
|
166
|
+
5. Work is done. **Postflight** — `agent-coverage-validated` fires: evaluates whether nominations were reviewed. Since orchestration was used, this passes.
|
|
167
|
+
6. Session ends. **On-stop** — standard hooks check .purpose coverage, portal.yaml gates, etc.
|
|
168
|
+
|
|
169
|
+
If step 3 was skipped (developer implemented solo), the postflight habit would advise reviewing `paradigm_ambient_nominations` to check for security or documentation contributions that were self-nominated by agents watching the event stream.
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-701-per-project-rosters
|
|
3
|
+
title: 'Lesson 5: Per-Project Rosters'
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-701
|
|
11
|
+
- rosteryaml-at-paradigmrosteryaml
|
|
12
|
+
- no-rosteryaml-
|
|
13
|
+
- project-type-detection
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 6
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-701.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## The Problem: 54 Agents Everywhere
|
|
24
|
+
|
|
25
|
+
Without project-level rosters, all 54 global agents are available to every project. This creates three problems:
|
|
26
|
+
|
|
27
|
+
1. **Noise** — The orchestrator considers 54 agents when planning, even though a backend API project does not need a designer, copywriter, or SEO agent. More candidates means more evaluation time and potentially irrelevant agents being included in plans.
|
|
28
|
+
|
|
29
|
+
2. **Irrelevance** — Agents that have no domain expertise for the project (gamedev on a SaaS app, legal on an open-source tool) waste attention by scoring events and producing nominations that will never be acted on.
|
|
30
|
+
|
|
31
|
+
3. **Global benching is broken** — Before rosters, benching an agent (setting `benched: true` on the `.agent` file) was a global operation. Benching the gamedev agent for your SaaS project also benched it for your game project. There was no per-project control.
|
|
32
|
+
|
|
33
|
+
## The Solution: roster.yaml
|
|
34
|
+
|
|
35
|
+
The `roster.yaml` file at `.paradigm/roster.yaml` lists exactly which agents are active on this project:
|
|
36
|
+
|
|
37
|
+
```yaml
|
|
38
|
+
# .paradigm/roster.yaml
|
|
39
|
+
version: "1.0"
|
|
40
|
+
project: dealoracle
|
|
41
|
+
type: saas-web-app
|
|
42
|
+
|
|
43
|
+
active:
|
|
44
|
+
- architect
|
|
45
|
+
- builder
|
|
46
|
+
- reviewer
|
|
47
|
+
- tester
|
|
48
|
+
- security
|
|
49
|
+
- documentor
|
|
50
|
+
- designer # Mika
|
|
51
|
+
- copywriter # Wren
|
|
52
|
+
- performance # Bolt
|
|
53
|
+
- devops # Atlas
|
|
54
|
+
- dba # Vault
|
|
55
|
+
- e2e # Ghost
|
|
56
|
+
- dx # Helix
|
|
57
|
+
- seo # Beacon
|
|
58
|
+
- pm # Yuki
|
|
59
|
+
- product # North
|
|
60
|
+
- advocate # Jinx
|
|
61
|
+
- debugger # Trace
|
|
62
|
+
- release # Ship
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Agents not listed are not active on this project. They still exist globally at `~/.paradigm/agents/` but the orchestrator will not consider them when planning work for this project.
|
|
66
|
+
|
|
67
|
+
## Backward Compatibility
|
|
68
|
+
|
|
69
|
+
The key design decision: **no roster.yaml = all agents available**. Existing projects that never created a roster continue working exactly as before. The `isAgentActive()` function implements this:
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
function isAgentActive(agentId: string, rootDir: string): boolean {
|
|
73
|
+
const roster = loadProjectRoster(rootDir);
|
|
74
|
+
if (!roster) return true; // No roster = all active
|
|
75
|
+
return roster.includes(agentId);
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
This ensures zero breaking changes. You opt into roster filtering by creating the file. Until then, the system behaves as it always has.
|
|
80
|
+
|
|
81
|
+
## Project Type Detection
|
|
82
|
+
|
|
83
|
+
When running `paradigm shift` (the project initialization command), the system auto-detects the project type from filesystem signals:
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
function detectProjectType(cwd: string): ProjectType {
|
|
87
|
+
const signals = {
|
|
88
|
+
hasPackageJson: exists('package.json'),
|
|
89
|
+
hasSupabase: exists('supabase/'),
|
|
90
|
+
hasNextConfig: exists('next.config.*'),
|
|
91
|
+
hasSwiftPackage: exists('Package.swift'),
|
|
92
|
+
hasGodotProject: exists('project.godot'),
|
|
93
|
+
hasCargoToml: exists('Cargo.toml'),
|
|
94
|
+
hasPubspecYaml: exists('pubspec.yaml'),
|
|
95
|
+
hasPrisma: exists('prisma/'),
|
|
96
|
+
hasDockerfile: exists('Dockerfile'),
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
if (signals.hasGodotProject) return 'game';
|
|
100
|
+
if (signals.hasSwiftPackage) return 'ios-app';
|
|
101
|
+
if (signals.hasPubspecYaml) return 'flutter-app';
|
|
102
|
+
if (signals.hasSupabase && signals.hasNextConfig) return 'saas-web-app';
|
|
103
|
+
if (signals.hasNextConfig) return 'web-app';
|
|
104
|
+
if (signals.hasCargoToml) return 'rust-project';
|
|
105
|
+
if (signals.hasPrisma || signals.hasDockerfile) return 'backend-api';
|
|
106
|
+
return 'generic';
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Detected types include `saas-web-app`, `web-app`, `backend-api`, `ios-app`, `flutter-app`, `game`, `rust-project`, and `generic`. Each type maps to a suggested roster.
|
|
111
|
+
|
|
112
|
+
## Suggested Rosters by Type
|
|
113
|
+
|
|
114
|
+
Each project type has a pre-defined suggested roster. These are starting points, not mandatory configurations:
|
|
115
|
+
|
|
116
|
+
| Project Type | Typical Size | Notable Inclusions | Notable Exclusions |
|
|
117
|
+
|---|---|---|---|
|
|
118
|
+
| saas-web-app | ~24 agents | Full stack: designer, dba, seo, sales, legal | gamedev, 3d, audio, streaming |
|
|
119
|
+
| web-app | ~15 agents | Frontend-focused: designer, seo, a11y | dba, sales, legal |
|
|
120
|
+
| backend-api | ~13 agents | Backend-focused: dba, dx, performance | designer, copywriter, seo |
|
|
121
|
+
| ios-app | ~12 agents | Mobile: mobile (Swift), a11y, performance | dba, seo, devops |
|
|
122
|
+
| game | ~11 agents | Game-specific: gamedev, 3d, audio | seo, legal, sales, dba |
|
|
123
|
+
| flutter-app | ~11 agents | Cross-platform: mobile, a11y | dba, seo, devops |
|
|
124
|
+
| generic | ~8 agents | Core only: architect through documentor + debugger + qa | All specialists |
|
|
125
|
+
|
|
126
|
+
The `generic` roster is intentionally minimal: architect, builder, reviewer, tester, security, documentor, debugger, and qa. These 8 agents provide the baseline quality coverage (design, build, review, test, secure, document, debug, validate) that every project needs.
|
|
127
|
+
|
|
128
|
+
## CLI Commands for Roster Management
|
|
129
|
+
|
|
130
|
+
Roster management is done through the CLI:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# Interactive roster setup (suggests based on project type)
|
|
134
|
+
paradigm agents roster
|
|
135
|
+
|
|
136
|
+
# Activate specific agents
|
|
137
|
+
paradigm agents activate designer copywriter security devops dba
|
|
138
|
+
|
|
139
|
+
# Deactivate agents
|
|
140
|
+
paradigm agents deactivate gamedev 3d audio streaming
|
|
141
|
+
|
|
142
|
+
# List active agents for this project
|
|
143
|
+
paradigm agents list # Shows only active roster
|
|
144
|
+
paradigm agents list --all # Shows all global + active status
|
|
145
|
+
|
|
146
|
+
# Activate a pod (all agents in the pod)
|
|
147
|
+
paradigm agents activate --pod ship-pod
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Activate and deactivate modify the `roster.yaml` file — they never modify global `.agent` files. This is the key architectural decision: the roster is a project-level filter over global agents. Agents are not "installed" or "removed" per project; they are "active" or "inactive" based on whether they appear in the roster.
|
|
151
|
+
|
|
152
|
+
## Orchestrator Integration
|
|
153
|
+
|
|
154
|
+
The orchestrator's planning phase reads the roster before selecting agents:
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
function getActiveAgents(rootDir: string): string[] {
|
|
158
|
+
const rosterPath = path.join(rootDir, '.paradigm', 'roster.yaml');
|
|
159
|
+
if (fs.existsSync(rosterPath)) {
|
|
160
|
+
const roster = yaml.load(fs.readFileSync(rosterPath, 'utf8'));
|
|
161
|
+
return roster.active || [];
|
|
162
|
+
}
|
|
163
|
+
// Fallback: all global agents (backward compat)
|
|
164
|
+
return getAllGlobalAgents().map(a => a.id);
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
The returned list gates which agents are considered during orchestration planning. If the security agent is not in the roster, it will not be included in orchestration plans, will not receive event notifications, and will not self-nominate contributions. It is effectively invisible on this project.
|
|
169
|
+
|
|
170
|
+
## paradigm shift Integration
|
|
171
|
+
|
|
172
|
+
During `paradigm shift` (first-time project setup), the roster step runs after team initialization:
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
Step 2b/6: Agent roster setup...
|
|
176
|
+
|
|
177
|
+
Detected project type: SaaS web app (React + Supabase + Vercel)
|
|
178
|
+
|
|
179
|
+
Suggested roster (20 agents):
|
|
180
|
+
Core: architect, builder, reviewer, tester, security, documentor
|
|
181
|
+
Design: designer (Mika), copywriter (Wren), a11y (Aria)
|
|
182
|
+
Data: dba (Vault), performance (Bolt), analyst (Sage)
|
|
183
|
+
Infra: devops (Atlas), seo (Beacon), release (Ship)
|
|
184
|
+
Product: pm (Yuki), product (North)
|
|
185
|
+
Quality: e2e (Ghost), qa (Shield), advocate (Jinx)
|
|
186
|
+
|
|
187
|
+
Accept suggested roster? [Y/n]
|
|
188
|
+
|
|
189
|
+
Roster saved to .paradigm/roster.yaml (20 agents active)
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
The human can accept the suggestion, modify it, or skip (which creates no roster file, keeping all agents active). On existing projects, running `paradigm shift` again offers to create a roster based on the detected type.
|
|
193
|
+
|
|
194
|
+
## Why Rosters Are Not Agent Behavior
|
|
195
|
+
|
|
196
|
+
Rosters are a filtering mechanism, not a behavior modifier. An agent's `.agent` file defines who it is (personality, expertise, behaviors, attention). The roster defines whether it is active on this project. If the designer is not in the roster, it does not mean the designer "knows" it is inactive — it simply is not invoked.
|
|
197
|
+
|
|
198
|
+
This separation is important: when you activate the designer on a project, it arrives with its full personality, expertise, notebooks, and transferable patterns intact. Nothing about the agent changed. The roster just opened the door.
|