@a-company/paradigm 5.37.11 → 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-SBZVK3H4.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/{aggregate-W66DM3GA.js → aggregate-A5S5MTCC.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/{beacon-5QVYV5DF.js → beacon-QVUD3MGP.js} +1 -1
- package/dist/{calibration-OLJYB5HN.js → calibration-BDHGYJOK.js} +1 -1
- package/dist/{chunk-SI6SV76D.js → chunk-3DZK54RU.js} +72 -19
- package/dist/{chunk-CHVQNRRT.js → chunk-4PSD5R7N.js} +2 -2
- package/dist/chunk-6SKSV5B2.js +24 -0
- package/dist/{chunk-KFNHCQ4R.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-LPBCQM5Y.js +6 -0
- package/dist/{chunk-T6IDXUUA.js → chunk-LWAIVOSF.js} +1 -1
- 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-SUU6M4JH.js → chunk-TOYQ2QCB.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-LBQBWIEX.js → chunk-Y4P4SGZV.js} +1 -1
- package/dist/{chunk-DOCDDDTD.js → chunk-YNDPSWOE.js} +5 -5
- package/dist/chunk-Z5QW6USC.js +2 -0
- package/dist/chunk-ZJQY5PPP.js +7 -0
- package/dist/{commands-LMUD5L6R.js → commands-ANRJNG2W.js} +1 -1
- package/dist/compliance-BNFWQPKM.js +6 -0
- package/dist/config-schema-FLHRVZMI.js +2 -0
- package/dist/{constellation-CG7C4WFE.js → constellation-NWLXYATA.js} +1 -1
- package/dist/{context-audit-XRPT3OU2.js → context-audit-JVCA6GSV.js} +1 -1
- package/dist/{cost-IDNVMAEV.js → cost-24UZSS2P.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-JVEYCXUC.js → diff-MF55KQZH.js} +1 -1
- package/dist/{dist-KGRCLBJP-2QAPFYNF.js → dist-GQ42YS5N-4HIJZVBB.js} +10 -10
- package/dist/dist-JZZJLVMR.js +2 -0
- package/dist/{dist-3ZCH25SG.js → dist-OG6MM4VY.js} +1 -1
- package/dist/dist-SE67SOXB.js +2 -0
- 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-POQP27WA.js → flow-BGXOVE2V.js} +1 -1
- package/dist/{hooks-IG2GOAHP.js → hooks-TFMMMB2H.js} +1 -1
- package/dist/index.js +6 -6
- package/dist/init-M44SO65G.js +2 -0
- package/dist/init-V4KSEKPK.js +2 -0
- package/dist/{integrity-UYDOOJDP.js → integrity-ROO3G43N.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 +19 -11
- package/dist/metrics-UESGUHTA.js +2 -0
- package/dist/{migrate-IBDE7VK4.js → migrate-Z5UQN57G.js} +1 -1
- package/dist/migrate-assessments-YSITX7KM.js +4 -0
- package/dist/migrate-decisions-NPLQOEEH.js +6 -0
- package/dist/migrate-plsat-EM2ACIQ3.js +6 -0
- package/dist/{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-RCAMBOIB.js → orchestrate-RID7HHHH.js} +1 -1
- package/dist/{platform-server-DNAMH4YI.js → platform-server-UD45NTGV.js} +1 -1
- package/dist/portal-check-DV2VSJ5E.js +8 -0
- package/dist/{portal-compliance-4MG5F2GI.js → portal-compliance-JONQ4SOP.js} +1 -1
- package/dist/{probe-B22G2JKF.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/{review-6UAH6V3R.js → review-VMSX2PKI.js} +1 -1
- package/dist/{ripple-ZGDITCGB.js → ripple-FNZI47SH.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/sentinel.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-3F5IK7MO.js → setup-ZSEC72BS.js} +2 -2
- package/dist/{shift-FDADESC4.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/{snapshot-L2G56RPL.js → snapshot-3IYB67D4.js} +1 -1
- package/dist/{spawn-M5BAV252.js → spawn-UH5RENSE.js} +1 -1
- package/dist/{status-77M3SDIF.js → status-DB3KNLW3.js} +1 -1
- package/dist/status-S7Z5FVIE.js +6 -0
- package/dist/{summary-LXLHFRN7.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-MGT66HZQ.js +2 -0
- package/dist/{test-BQJMS4Y2.js → test-WLEPZQFC.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-VZXTJHGO.js → validate-BB6LRWIY.js} +1 -1
- package/dist/validate-XUQZTF3H.js +9 -0
- package/dist/{watch-YCODNIET.js → watch-25GJHQYT.js} +1 -1
- package/dist/workspace-VMSPYIBV.js +2 -0
- 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 +3 -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/templates/paradigm/specs/symbols.md +4 -2
- package/dist/add-P76GEMGF.js +0 -8
- package/dist/chunk-3TR6LLXP.js +0 -111
- package/dist/chunk-G7XFK2GI.js +0 -11
- package/dist/chunk-J6KWGCHN.js +0 -24
- package/dist/chunk-JQKKVAAN.js +0 -2
- package/dist/chunk-ODVKPZZ4.js +0 -2
- package/dist/chunk-Q2J542ST.js +0 -2
- package/dist/chunk-QT2LKB3P.js +0 -7
- package/dist/chunk-SHD27BQX.js +0 -6
- package/dist/chunk-WS2N27RX.js +0 -3
- package/dist/chunk-YT52WLBF.js +0 -521
- package/dist/compliance-WJINB5DM.js +0 -6
- package/dist/config-schema-GUQY2QN7.js +0 -2
- package/dist/decision-loader-2XPZE4EZ.js +0 -2
- package/dist/dist-R3RWD35F.js +0 -2
- package/dist/dist-VXCZWVVJ.js +0 -2
- package/dist/doctor-QJ47XAUP.js +0 -2
- package/dist/init-HIBRSVUB.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-check-Z3OCQEQR.js +0 -8
- package/dist/quiz-FE5UGAY2.js +0 -10
- package/dist/reindex-FO5VMZVQ.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/team-NSP6PMPS.js +0 -2
- package/dist/tools-CERDNVCG.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/dist/workspace-MKSQN7B2.js +0 -2
- 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,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-601-attention-scoring
|
|
3
|
+
title: Attention & Scoring
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-601
|
|
11
|
+
- agentattention-has-four
|
|
12
|
+
- four-scoring-dimensions
|
|
13
|
+
- score-is-max-based
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 5
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-601.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## AgentAttention Patterns
|
|
24
|
+
|
|
25
|
+
Every agent in the ambient system has an attention configuration — a set of patterns that define what the agent notices. Think of it as a personalized filter: events that match the agent's attention patterns are potentially relevant; events that do not match are noise.
|
|
26
|
+
|
|
27
|
+
The `AgentAttention` interface has five fields:
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
interface AgentAttention {
|
|
31
|
+
symbols?: string[]; // Symbol patterns (e.g., ["^*", "#*-middleware"])
|
|
32
|
+
paths?: string[]; // File path patterns (e.g., ["auth/**", "middleware/**"])
|
|
33
|
+
concepts?: string[]; // Semantic triggers (e.g., ["JWT", "RBAC", "injection"])
|
|
34
|
+
signals?: AttentionSignal[]; // Event type triggers (e.g., [{ type: "gate-added" }])
|
|
35
|
+
threshold?: number; // Confidence threshold (default 0.6)
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Symbols** use glob patterns to match against the `symbols` array on events. A security agent watching `["^*", "#*-auth", "#*-middleware"]` will match any gate symbol and any component whose name ends in `-auth` or `-middleware`.
|
|
40
|
+
|
|
41
|
+
**Paths** use glob patterns to match against the `path` field on events. A builder watching `["src/**", "lib/**", "packages/**"]` matches any source file change.
|
|
42
|
+
|
|
43
|
+
**Concepts** are semantic keywords matched against the event's `context`, `keywords`, and `type` fields (all lowercased). A tester watching `["test", "coverage", "assertion"]` will match events mentioning those terms.
|
|
44
|
+
|
|
45
|
+
**Signals** match against the event's `type` field. A security agent with `signals: [{ type: 'gate-added' }, { type: 'route-created' }]` will match whenever a new gate or route appears in the stream.
|
|
46
|
+
|
|
47
|
+
## Four Scoring Dimensions
|
|
48
|
+
|
|
49
|
+
When an event enters the stream, each agent scores it against their attention patterns across four dimensions:
|
|
50
|
+
|
|
51
|
+
**symbolMatch (0.0-1.0):** For each pattern in the agent's `symbols` array, check if any symbol in the event matches (using glob). If any match is found, `symbolMatch = 1.0`. If no agent symbols are defined or no event symbols exist, `symbolMatch = 0.0`.
|
|
52
|
+
|
|
53
|
+
**pathMatch (0.0-1.0):** For each pattern in the agent's `paths` array, check if the event's `path` matches. If any match is found, `pathMatch = 1.0`. Binary: either a path matches or it does not.
|
|
54
|
+
|
|
55
|
+
**conceptMatch (0.0-1.0):** The event's `context`, `keywords`, and `type` are joined into a lowercased text. Each concept in the agent's `concepts` array is checked for inclusion. The score is `matched / total_concepts`. If the agent watches 5 concepts and 3 appear in the event text, `conceptMatch = 0.6`.
|
|
56
|
+
|
|
57
|
+
**signalMatch (0.0-1.0):** For each signal in the agent's `signals` array, check if the event's `type` matches. If any match, `signalMatch = 1.0`. Binary.
|
|
58
|
+
|
|
59
|
+
## Max-Based Score
|
|
60
|
+
|
|
61
|
+
The overall score is the **maximum** of the four dimensions:
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
const score = Math.max(symbolMatch, pathMatch, conceptMatch, signalMatch);
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
This is a deliberate design choice. Using max (rather than average or weighted sum) means a single strong match is enough to trigger attention. A security agent does not need to match on all four dimensions — if the event mentions a gate symbol (`symbolMatch = 1.0`), that alone is sufficient even if the file path, concepts, and signals do not match.
|
|
68
|
+
|
|
69
|
+
The alternative (averaging) would dilute strong signals: a perfect symbol match (1.0) with no other matches would average to 0.25, likely falling below the threshold. Max scoring ensures that domain-specific expertise in any single dimension is respected.
|
|
70
|
+
|
|
71
|
+
## Threshold-Based Self-Nomination
|
|
72
|
+
|
|
73
|
+
After scoring, the agent checks its threshold:
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
const threshold = attention.threshold ?? 0.6;
|
|
77
|
+
const shouldNominate = score >= threshold;
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
If the score meets or exceeds the threshold, the agent should self-nominate a contribution. If not, the agent stays quiet, and the `quietReason` field records why: `'below-threshold'`.
|
|
81
|
+
|
|
82
|
+
The default threshold is 0.6, but different agent roles have different defaults based on their domain:
|
|
83
|
+
|
|
84
|
+
| Role | Default Threshold | Rationale |
|
|
85
|
+
|---|---|---|
|
|
86
|
+
| architect | 0.5 | Broad awareness — should notice most structural changes |
|
|
87
|
+
| builder | 0.7 | Focused — only speaks when directly relevant to implementation |
|
|
88
|
+
| reviewer | 0.6 | Balanced — watches code quality and patterns |
|
|
89
|
+
| tester | 0.5 | Broad — testing intersects all areas |
|
|
90
|
+
| security | 0.4 | Most sensitive — should speak up early and often |
|
|
91
|
+
|
|
92
|
+
A lower threshold means the agent speaks up more often (more false positives, fewer missed issues). A higher threshold means the agent speaks up less often (fewer false positives, more missed issues). Security uses 0.4 because the cost of missing a security issue far outweighs the cost of a false alarm.
|
|
93
|
+
|
|
94
|
+
## scoreEventForAgent
|
|
95
|
+
|
|
96
|
+
The `scoreEventForAgent` function ties everything together:
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
function scoreEventForAgent(
|
|
100
|
+
event: StreamEvent,
|
|
101
|
+
agentId: string,
|
|
102
|
+
attention: AgentAttention
|
|
103
|
+
): AttentionScore
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
It returns an `AttentionScore` with five fields:
|
|
107
|
+
- `agentId` — Which agent evaluated this event
|
|
108
|
+
- `score` — Overall relevance (0.0-1.0)
|
|
109
|
+
- `breakdown` — The four dimension scores (`symbolMatch`, `pathMatch`, `conceptMatch`, `signalMatch`)
|
|
110
|
+
- `shouldNominate` — Whether the score exceeds the agent's threshold
|
|
111
|
+
- `quietReason` — Why the agent stayed quiet (if it did)
|
|
112
|
+
|
|
113
|
+
The breakdown is valuable for debugging attention patterns. If an agent is not speaking up when expected, the breakdown shows which dimension scored low. If `symbolMatch = 0.0` but the event clearly involves the agent's domain, the agent's symbol patterns may need expanding.
|
|
114
|
+
|
|
115
|
+
## DEFAULT_ATTENTION for Standard Roles
|
|
116
|
+
|
|
117
|
+
Paradigm provides default attention configurations for five standard roles:
|
|
118
|
+
|
|
119
|
+
**Architect** — Watches all flows (`$*`) and components (`#*`), concepts like `architecture`, `design`, `pattern`, `refactor`. Threshold 0.5.
|
|
120
|
+
|
|
121
|
+
**Builder** — Watches source paths (`src/**`, `lib/**`, `packages/**`). Threshold 0.7.
|
|
122
|
+
|
|
123
|
+
**Reviewer** — Watches concepts like `code quality`, `bug`, `smell`, `convention`. Threshold 0.6.
|
|
124
|
+
|
|
125
|
+
**Tester** — Watches test paths (`**/*.test.*`, `**/*.spec.*`), concepts like `test`, `coverage`, `assertion`, and `error-encountered` signals. Threshold 0.5.
|
|
126
|
+
|
|
127
|
+
**Security** — Watches gate symbols (`^*`), auth components (`#*-auth`, `#*-middleware`), auth paths (`auth/**`, `middleware/**`, `guards/**`), concepts like `permission`, `JWT`, `session`, `RBAC`, `XSS`, `injection`, and signals `gate-added` and `route-created`. Threshold 0.4.
|
|
128
|
+
|
|
129
|
+
These defaults are overridable in the agent's `.agent` file via the `attention` field. A security agent working on a project with no web routes might raise its threshold to 0.6 and remove the path patterns.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-601-context-composition
|
|
3
|
+
title: Context Composition
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-601
|
|
11
|
+
- slim-claudemd-150
|
|
12
|
+
- paradigmcontextcompose-assembles-base
|
|
13
|
+
- agent-contributions-use
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 6
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-601.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## From Verbose to Slim
|
|
24
|
+
|
|
25
|
+
Paradigm's CLAUDE.md historically contained everything an agent might need: logging rules, portal conventions, MCP workflow guidance, flow patterns, orchestration instructions, workspace configuration, and more. At its peak, the file was ~856 lines — loaded in full at the start of every session, consuming thousands of tokens regardless of whether the task involved logging, security, or lore.
|
|
26
|
+
|
|
27
|
+
This approach has two problems. First, it wastes context window space. An agent working on test coverage does not need 200 lines of portal gate conventions. Second, it creates staleness — with all guidance in one file, updates to any topic require reading and understanding the entire file.
|
|
28
|
+
|
|
29
|
+
v5.0 restructured this into a two-layer architecture: a slim CLAUDE.md (~150 lines) for universal orientation, plus 12 on-demand guidance resources for topic-specific depth.
|
|
30
|
+
|
|
31
|
+
## The Slim CLAUDE.md
|
|
32
|
+
|
|
33
|
+
The reduced CLAUDE.md contains only what every session needs:
|
|
34
|
+
|
|
35
|
+
1. **Project Overview** — What this project is and which version of Paradigm it uses
|
|
36
|
+
2. **Symbol System** — The 5 symbols (#, $, ^, !, ~) and their meanings
|
|
37
|
+
3. **Conventions** — Naming, commit format, .purpose rules
|
|
38
|
+
4. **Agent Onboarding** — What to call first (`paradigm_status`), what to check
|
|
39
|
+
5. **Before Implementing** — Protocol search, ripple, gates check
|
|
40
|
+
6. **Automatic Enforcement** — What the stop hook blocks
|
|
41
|
+
7. **On-Demand Guidance** — Table of 12 guidance resources with their MCP URIs
|
|
42
|
+
|
|
43
|
+
This provides enough context for any agent to orient itself and know where to find deeper guidance, without spending tokens on content irrelevant to the current task.
|
|
44
|
+
|
|
45
|
+
## 12 Guidance Resources
|
|
46
|
+
|
|
47
|
+
Guidance resources are served via MCP at `paradigm://guidance/{topic}`. Each resource generates its content on demand — it is not a static file but a function that produces the latest guidance.
|
|
48
|
+
|
|
49
|
+
The 12 topics:
|
|
50
|
+
|
|
51
|
+
| Topic | What It Covers |
|
|
52
|
+
|---|---|
|
|
53
|
+
| `logging` | Logger usage, symbol-to-method mapping by directory |
|
|
54
|
+
| `portal` | Portal protocol, gate patterns, route declarations |
|
|
55
|
+
| `mcp-workflow` | MCP tool orchestration, token budgets |
|
|
56
|
+
| `flows` | Flow-first development, $flow documentation |
|
|
57
|
+
| `orchestration` | Multi-agent orchestration, agent spawning |
|
|
58
|
+
| `workspaces` | Multi-project symbol awareness |
|
|
59
|
+
| `university` | Knowledge base, courses, PLSAT |
|
|
60
|
+
| `calibration` | Confidence calibration, overconfidence alerts |
|
|
61
|
+
| `checkpoints` | Session checkpoints, crash recovery |
|
|
62
|
+
| `navigation` | Task recipes, navigation patterns |
|
|
63
|
+
| `component-types` | Component hierarchy, type guidelines |
|
|
64
|
+
| `troubleshooting` | Common issues, diagnostic steps |
|
|
65
|
+
|
|
66
|
+
An agent working on portal.yaml calls `paradigm://guidance/portal` to get the full portal protocol. An agent setting up multi-project awareness calls `paradigm://guidance/workspaces`. This on-demand model means the agent pays the token cost only for the guidance it actually uses.
|
|
67
|
+
|
|
68
|
+
## Agent Contributions Section
|
|
69
|
+
|
|
70
|
+
Beyond the static guidance resources, composed context includes a dynamic **Agent Contributions** section built from active agents' `AgentContext.contributions`.
|
|
71
|
+
|
|
72
|
+
For example, if a security agent is active and its profile includes:
|
|
73
|
+
|
|
74
|
+
```yaml
|
|
75
|
+
context:
|
|
76
|
+
contributions:
|
|
77
|
+
- section: "Security Warnings"
|
|
78
|
+
content: "New routes added in this session require ^authenticated gate minimum."
|
|
79
|
+
priority: high
|
|
80
|
+
- section: "Portal Conventions"
|
|
81
|
+
content_ref: "paradigm://guidance/portal"
|
|
82
|
+
priority: medium
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
...the composed context will include a "Security Warnings" section (always, because `priority: high`) and may include the full portal guidance (if token budget allows, because `priority: medium`).
|
|
86
|
+
|
|
87
|
+
Contributions with `content_ref` instead of inline `content` are resolved lazily — the MCP resource is fetched only when the contribution is actually included in the composed context.
|
|
88
|
+
|
|
89
|
+
## paradigm_context_compose
|
|
90
|
+
|
|
91
|
+
The `paradigm_context_compose` tool assembles the full context for a session. It takes:
|
|
92
|
+
|
|
93
|
+
- The active agent(s) and their profiles
|
|
94
|
+
- The current task or focus area
|
|
95
|
+
- Token budget constraints
|
|
96
|
+
|
|
97
|
+
It produces a composed context string that includes:
|
|
98
|
+
|
|
99
|
+
1. **Base CLAUDE.md content** — Universal orientation
|
|
100
|
+
2. **Agent identity section** — From `buildProfileEnrichment`
|
|
101
|
+
3. **High-priority contributions** — From all active agents' context contributions
|
|
102
|
+
4. **Relevant guidance** — On-demand resources loaded based on the task
|
|
103
|
+
5. **Ambient context** — Recent team decisions, transferable journal insights, pending nominations
|
|
104
|
+
6. **Medium-priority contributions** — If token budget allows
|
|
105
|
+
|
|
106
|
+
Low-priority contributions and unused guidance resources are omitted from the initial context but remain available via MCP resource URIs if the agent needs them mid-session.
|
|
107
|
+
|
|
108
|
+
## The Full Loop: Journal to Context
|
|
109
|
+
|
|
110
|
+
Here is where everything connects. Consider this sequence:
|
|
111
|
+
|
|
112
|
+
1. **Session A**: Builder modifies `#payment-service`, makes a mistake with JWT token ordering, gets corrected by the human. The builder records a journal entry: `trigger: 'correction_received', insight: 'JWT refresh tokens must be validated before access tokens when both are present', transferable: true, pattern: { id: 'jwt-ordering', applies_when: 'validating multiple JWT types', correct_approach: 'Check refresh token first, then access token' }`.
|
|
113
|
+
|
|
114
|
+
2. **Between sessions**: The journal entry is stored at `~/.paradigm/agents/builder/journal/`. The pattern is extracted as a transferable pattern.
|
|
115
|
+
|
|
116
|
+
3. **Session B**: A different agent (or the same builder on a different project) starts work on an authentication module. `paradigm_context_compose` runs, loading the builder's profile. The `buildProfileEnrichment` function includes the transferable pattern and the journal insight in the "Transferable Insights" section of the composed context.
|
|
117
|
+
|
|
118
|
+
4. **Result**: The agent in Session B sees the JWT ordering insight before writing any code, preventing the same mistake.
|
|
119
|
+
|
|
120
|
+
This is the closed loop: DO (Session A work) -> RECORD (journal entry) -> ASSESS (attention scoring recognizes auth work in Session B) -> LEARN (pattern extracted) -> ADAPT (context composition includes the pattern) -> DO (Session B starts with the insight).
|
|
121
|
+
|
|
122
|
+
## emitAndProcess
|
|
123
|
+
|
|
124
|
+
The `emitAndProcess` function unifies event emission with nomination processing. When an event is emitted, it is simultaneously:
|
|
125
|
+
|
|
126
|
+
1. Written to the event stream (JSONL file + memory buffer)
|
|
127
|
+
2. Scored against all active agents' attention patterns
|
|
128
|
+
3. For any agent exceeding its threshold, a nomination opportunity is created
|
|
129
|
+
|
|
130
|
+
This single-call pattern ensures that no event is emitted without being evaluated for nominations. It prevents the race condition where an event is emitted but attention scoring happens too late to catch it.
|
|
131
|
+
|
|
132
|
+
The function returns both the emitted event and any nominations that were generated, giving the caller full visibility into what happened.
|
|
133
|
+
|
|
134
|
+
## Putting It All Together
|
|
135
|
+
|
|
136
|
+
Ambient coordination is not a single feature — it is a system of interconnected capabilities:
|
|
137
|
+
|
|
138
|
+
- **Knowledge streams** split lore into purpose-specific channels
|
|
139
|
+
- **Events** capture every meaningful action in a structured format
|
|
140
|
+
- **Attention** filters events to the right agents
|
|
141
|
+
- **Nominations** let agents contribute without being asked
|
|
142
|
+
- **Data sovereignty** ensures data stays where it belongs
|
|
143
|
+
- **Agent renaissance** gives agents the behavioral vocabulary to participate
|
|
144
|
+
- **Context composition** closes the loop by feeding learnings back into future sessions
|
|
145
|
+
|
|
146
|
+
Each piece is independently useful, but together they create a system that gets smarter with every session — not because any single component is intelligent, but because the loop never breaks.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-601-data-sovereignty
|
|
3
|
+
title: Data Sovereignty
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-601
|
|
11
|
+
- four-trust-rings
|
|
12
|
+
- all-data-is
|
|
13
|
+
- data-policyyaml-configures-observation
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 5
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-601.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## The Local Brain Principle
|
|
24
|
+
|
|
25
|
+
All data produced during agent work is project-locked by default. This is not a policy choice that requires opt-in — it is the architectural default. No data leaves the project unless the user explicitly configures it to do so. This principle is called the "local brain" — every project has its own self-contained intelligence that never leaks.
|
|
26
|
+
|
|
27
|
+
The reason is trust. When an agent records a learning journal entry about your payment processing logic, that entry should not appear in another user's project. When a work log captures which files were modified, those file paths should not flow to an analytics dashboard without consent. Data sovereignty means the user controls every boundary their data crosses.
|
|
28
|
+
|
|
29
|
+
## Trust Rings
|
|
30
|
+
|
|
31
|
+
Data classification uses four concentric trust rings, each expanding the boundary of who can see the data:
|
|
32
|
+
|
|
33
|
+
**Ring 1: Project-Locked** — Data never leaves the project directory. Work log entries, event stream, nominations, and team decisions are project-locked by default. Storage lives in `.paradigm/` within the project.
|
|
34
|
+
|
|
35
|
+
**Ring 2: User-Scoped** — Data travels across the user's own projects but not beyond. Learning journal entries are user-scoped — an agent's insights from project A are available when working on project B, but only for the same user. Storage lives in `~/.paradigm/`.
|
|
36
|
+
|
|
37
|
+
**Ring 3: Creator-Upstream** — Anonymized, aggregate data flows to agent creators (for agents installed from a marketplace). Only high-level metrics like task type, outcome, and helpfulness rating — never code, file paths, symbol names, or conversation content. This ring requires explicit opt-in.
|
|
38
|
+
|
|
39
|
+
**Ring 4: Network-Public** — Fully anonymized, aggregated statistics shared publicly. Only `aggregated_task_success_rates` and `anonymized_pattern_frequency`. Requires explicit opt-in. Nothing in this ring can identify a project, user, or agent.
|
|
40
|
+
|
|
41
|
+
The rings are ordered: data at ring 1 can never reach ring 3 without passing through ring 2 first. Each ring expansion requires a policy declaration.
|
|
42
|
+
|
|
43
|
+
## data-policy.yaml Format
|
|
44
|
+
|
|
45
|
+
The data policy is configured in `.paradigm/data-policy.yaml`:
|
|
46
|
+
|
|
47
|
+
```yaml
|
|
48
|
+
version: "1.0"
|
|
49
|
+
default_ring: project-locked
|
|
50
|
+
|
|
51
|
+
observation:
|
|
52
|
+
allow:
|
|
53
|
+
- "src/**"
|
|
54
|
+
- ".paradigm/**"
|
|
55
|
+
- "portal.yaml"
|
|
56
|
+
deny:
|
|
57
|
+
- ".env*"
|
|
58
|
+
- "**/*.key"
|
|
59
|
+
- "**/*.pem"
|
|
60
|
+
- "**/secrets/**"
|
|
61
|
+
|
|
62
|
+
streams:
|
|
63
|
+
work_log:
|
|
64
|
+
ring: project-locked
|
|
65
|
+
allow_content: [file_paths, symbol_names, outcome]
|
|
66
|
+
deny_content: [code_snippets, file_contents, diff_content]
|
|
67
|
+
learning_journal:
|
|
68
|
+
ring: user-scoped
|
|
69
|
+
allow_content: [pattern_descriptions, confidence_adjustments, approach_descriptions]
|
|
70
|
+
deny_content: [code_snippets, file_contents, symbol_names_with_context]
|
|
71
|
+
redaction:
|
|
72
|
+
- pattern: "\\b[A-Z_]{2,}_KEY\\b"
|
|
73
|
+
- pattern: "password|secret|token"
|
|
74
|
+
team_decisions:
|
|
75
|
+
ring: project-locked
|
|
76
|
+
allow_content: [rationale, alternatives, symbol_references]
|
|
77
|
+
deny_content: [implementation_details]
|
|
78
|
+
|
|
79
|
+
upstream:
|
|
80
|
+
ring: creator-upstream
|
|
81
|
+
allowed: [task_type, outcome, helpfulness, duration_bucket, error_category]
|
|
82
|
+
denied: [code_of_any_kind, file_paths, symbol_names, conversation_content, user_identity]
|
|
83
|
+
|
|
84
|
+
network:
|
|
85
|
+
ring: network-public
|
|
86
|
+
opt_in: false
|
|
87
|
+
if_opted_in: [aggregated_task_success_rates, anonymized_pattern_frequency]
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Observation Rules
|
|
91
|
+
|
|
92
|
+
Observation rules control which files agents can observe. The `allow` list defines glob patterns for permitted paths. The `deny` list defines patterns that are always blocked — deny overrides allow.
|
|
93
|
+
|
|
94
|
+
The default denies `.env*`, `*.key`, `*.pem`, and `**/secrets/**`. These patterns catch common secret file locations. The deny list is **additive** when merging user policy over defaults — you can add deny patterns but never remove the built-in ones.
|
|
95
|
+
|
|
96
|
+
## Stream Content Rules
|
|
97
|
+
|
|
98
|
+
Each knowledge stream has its own content rules defining what categories of content are allowed or denied:
|
|
99
|
+
|
|
100
|
+
**14 content categories:** `file_paths`, `symbol_names`, `symbol_names_with_context`, `outcome`, `pattern_descriptions`, `confidence_adjustments`, `approach_descriptions`, `rationale`, `alternatives`, `symbol_references`, `code_snippets`, `file_contents`, `diff_content`, `implementation_details`, `architectural_decisions`.
|
|
101
|
+
|
|
102
|
+
The work log allows `file_paths` and `symbol_names` (needed for standup context) but denies `code_snippets` (no raw code in work logs). The learning journal allows `pattern_descriptions` (abstract learnings) but denies `symbol_names_with_context` (no project-specific details in the cross-project journal).
|
|
103
|
+
|
|
104
|
+
**Redaction patterns** use regex to scrub sensitive content before it is stored. The default learning journal redaction catches environment variable names (`\b[A-Z_]{2,}_KEY\b`) and common secret terms (`password|secret|token`). Matches are replaced with `[REDACTED]`.
|
|
105
|
+
|
|
106
|
+
## Per-Agent Overrides
|
|
107
|
+
|
|
108
|
+
The `agent_overrides` section allows per-agent policy customization:
|
|
109
|
+
|
|
110
|
+
```yaml
|
|
111
|
+
agent_overrides:
|
|
112
|
+
security:
|
|
113
|
+
observation:
|
|
114
|
+
allow: ["src/**", ".paradigm/**", "portal.yaml", ".env.example"]
|
|
115
|
+
learning_journal:
|
|
116
|
+
deny_content: [code_snippets, file_contents, diff_content, implementation_details]
|
|
117
|
+
upstream:
|
|
118
|
+
opt_in: false
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
This gives the security agent slightly broader observation (it can read `.env.example` to verify it matches the template) while restricting its journal content and disabling upstream feedback.
|
|
122
|
+
|
|
123
|
+
## Enforcement Boundaries
|
|
124
|
+
|
|
125
|
+
The data policy is enforced at eight boundaries:
|
|
126
|
+
|
|
127
|
+
1. **event-emission** — Before an event enters the stream, check if the path is observable
|
|
128
|
+
2. **attention-filtering** — Agents only score events for paths they are allowed to observe
|
|
129
|
+
3. **work-log-recording** — Content is filtered and redacted before writing to the work log
|
|
130
|
+
4. **journal-recording** — Content is filtered and redacted before writing to the journal
|
|
131
|
+
5. **cross-project-transfer** — Journal entries marked `transferable` are checked against ring 2 rules
|
|
132
|
+
6. **upstream-feedback** — Data flowing to agent creators is checked against ring 3 rules
|
|
133
|
+
7. **network-aggregation** — Data flowing to the network is checked against ring 4 rules
|
|
134
|
+
8. **notebook-promotion** — Journal entries promoted to notebook are checked against content rules
|
|
135
|
+
|
|
136
|
+
Every enforcement action is auditable. The `AuditEntry` interface captures who, when, what boundary, what data category, and what action was taken (allowed, filtered, redacted, or blocked).
|
|
137
|
+
|
|
138
|
+
## The Merge Rule
|
|
139
|
+
|
|
140
|
+
When a user provides a `data-policy.yaml`, it is merged over the `DEFAULT_DATA_POLICY` with a critical rule: **deny lists are additive, never replacing**. If the default denies `.env*` and the user's policy does not mention `.env*`, the deny still applies. The user can add more deny patterns but cannot remove built-in protections. Allow lists, by contrast, can be fully replaced.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-601-event-stream
|
|
3
|
+
title: The Event Stream
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-601
|
|
11
|
+
- streamevent-has-12
|
|
12
|
+
- 12-event-types
|
|
13
|
+
- 6-event-sources
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 5
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-601.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## How Events Are Produced
|
|
24
|
+
|
|
25
|
+
Every meaningful action in a Paradigm session produces an event. When an agent modifies a file, the post-write hook emits a `file-modified` event. When an MCP tool is called, a `symbol-queried` or `gate-checked` event fires depending on the tool. When compliance issues are detected, a `compliance-violation` event captures the details. These events flow into a shared stream that all agents can observe.
|
|
26
|
+
|
|
27
|
+
The event stream is the nervous system of ambient coordination. Without it, agents are blind to each other's actions. With it, a security agent can notice that a new route was created without a gate, a tester can see that a new component was added without test coverage, and a reviewer can observe that a complex flow was modified without documentation updates.
|
|
28
|
+
|
|
29
|
+
## StreamEvent Anatomy
|
|
30
|
+
|
|
31
|
+
Every event follows the `StreamEvent` interface with 12 fields:
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
interface StreamEvent {
|
|
35
|
+
id: string; // Unique ID (e.g., "ev-1710937200000-4821")
|
|
36
|
+
type: EventType; // Classification (12 types)
|
|
37
|
+
source: EventSource; // Origin (6 sources)
|
|
38
|
+
timestamp: string; // ISO 8601
|
|
39
|
+
path?: string; // File path (if applicable)
|
|
40
|
+
symbols?: string[]; // Paradigm symbols referenced
|
|
41
|
+
keywords?: string[]; // Semantic keywords extracted
|
|
42
|
+
context?: string; // Brief context snippet
|
|
43
|
+
agent?: string; // Agent that produced this event
|
|
44
|
+
tool?: string; // MCP tool name (if from tool call)
|
|
45
|
+
severity?: string; // info, warning, error, critical
|
|
46
|
+
data?: Record<string, unknown>; // Structured metadata
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Event IDs** are generated from the current timestamp plus a random 4-digit suffix: `ev-{timestamp}-{rand}`. This ensures uniqueness without coordination.
|
|
51
|
+
|
|
52
|
+
**Event Sources** identify where the event originated:
|
|
53
|
+
- `post-write-hook` — File was written, hook detected the change
|
|
54
|
+
- `mcp-tool-call` — An MCP tool was invoked
|
|
55
|
+
- `stop-hook` — Session end triggered an event
|
|
56
|
+
- `conversation` — Event derived from conversation context
|
|
57
|
+
- `agent-action` — Agent explicitly emitted an event
|
|
58
|
+
- `error` — An error occurred during processing
|
|
59
|
+
|
|
60
|
+
**Event Types** classify what happened. Twelve types cover the full range of project activity:
|
|
61
|
+
|
|
62
|
+
| Type | When It Fires |
|
|
63
|
+
|---|---|
|
|
64
|
+
| `file-modified` | A source file was changed |
|
|
65
|
+
| `symbol-queried` | A symbol was looked up via search/navigate/ripple |
|
|
66
|
+
| `gate-checked` | A gate (^) was evaluated or referenced |
|
|
67
|
+
| `compliance-violation` | A habit, hook, or policy check failed |
|
|
68
|
+
| `concept-mentioned` | A semantic concept appeared in context |
|
|
69
|
+
| `work-completed` | A unit of work finished (pass/fail/partial) |
|
|
70
|
+
| `decision-made` | A team decision was recorded |
|
|
71
|
+
| `error-encountered` | An error was caught during processing |
|
|
72
|
+
| `route-created` | A new API route was added |
|
|
73
|
+
| `gate-added` | A new gate was added to portal.yaml |
|
|
74
|
+
| `flow-modified` | A flow definition was changed |
|
|
75
|
+
| `test-result` | A test suite reported results |
|
|
76
|
+
|
|
77
|
+
## JSONL Storage
|
|
78
|
+
|
|
79
|
+
Events are stored as append-only JSONL (one JSON object per line) at `.paradigm/events/stream.jsonl`. The append-only format is chosen for performance — writing one line is cheaper than reading, modifying, and rewriting a file.
|
|
80
|
+
|
|
81
|
+
The stream is bounded by `DEFAULT_MAX_EVENTS` (1000). When the file exceeds ~500KB (a rough proxy for 1000 events), the `pruneIfNeeded` function reads the file, keeps only the most recent 1000 lines, and rewrites it. This ensures the stream does not grow unbounded while preserving recent history.
|
|
82
|
+
|
|
83
|
+
Events are also held in a memory buffer (`memoryStream`) for fast access during the current session. The memory buffer is independently bounded to 1000 events. Even if file I/O fails, the memory stream continues to function — file write failure is non-fatal.
|
|
84
|
+
|
|
85
|
+
## emitEvent
|
|
86
|
+
|
|
87
|
+
The `emitEvent` function is the single entry point for producing events:
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
emitEvent(rootDir, {
|
|
91
|
+
type: 'file-modified',
|
|
92
|
+
source: 'post-write-hook',
|
|
93
|
+
path: 'src/auth/middleware.ts',
|
|
94
|
+
symbols: ['#auth-middleware', '^authenticated'],
|
|
95
|
+
keywords: ['authentication', 'JWT'],
|
|
96
|
+
context: 'Modified JWT validation logic',
|
|
97
|
+
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
The function auto-generates the `id` and `timestamp`, appends to both the memory buffer and the JSONL file, and prunes if the file is oversized. It returns the complete `StreamEvent` with all fields populated.
|
|
101
|
+
|
|
102
|
+
## queryEvents
|
|
103
|
+
|
|
104
|
+
The `queryEvents` function reads events from disk (falling back to the memory buffer on read failure) and supports five filters:
|
|
105
|
+
|
|
106
|
+
- `type` — Filter by event type (e.g., `'file-modified'`)
|
|
107
|
+
- `source` — Filter by event source (e.g., `'mcp-tool-call'`)
|
|
108
|
+
- `symbol` — Filter by a specific symbol in the event's `symbols` array
|
|
109
|
+
- `agent` — Filter by the agent that produced the event
|
|
110
|
+
- `since` — Only events after this ISO timestamp
|
|
111
|
+
- `limit` — Maximum number of events to return
|
|
112
|
+
|
|
113
|
+
Results are sorted by timestamp descending (most recent first). This ordering is intentional — in ambient coordination, recent events are almost always more relevant than older ones.
|
|
114
|
+
|
|
115
|
+
## Event Stream Configuration
|
|
116
|
+
|
|
117
|
+
The `EventStreamConfig` interface allows fine-grained control:
|
|
118
|
+
|
|
119
|
+
- `enabled` — Master switch for ambient coordination (default: true in v5.0 projects)
|
|
120
|
+
- `max_events` — Maximum events retained (default: 1000)
|
|
121
|
+
- `event_ttl_seconds` — Time-to-live for events (default: 3600 = 1 hour)
|
|
122
|
+
- `emit` — Whitelist of event types to produce (if set, only these types fire)
|
|
123
|
+
- `suppress` — Blacklist of event types to silence (overrides emit)
|
|
124
|
+
- `storage` — `'memory'` (in-process only) or `'file'` (JSONL persistence)
|
|
125
|
+
|
|
126
|
+
For projects that do not need ambient coordination, setting `enabled: false` turns off event emission entirely. For projects that need it but want to reduce noise, the `suppress` list can silence high-frequency event types like `symbol-queried` while preserving important ones like `compliance-violation` and `gate-added`.
|