@a-company/paradigm 5.38.0 → 6.0.4
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-TIXUQQGR.js} +1 -1
- package/dist/add-UOR4INIV.js +8 -0
- package/dist/agent-MB3H5EZA.js +33 -0
- package/dist/{agent-loader-RIVI6QPP.js → agent-loader-VGBPL3TH.js} +1 -1
- package/dist/{agent-loader-RJRVO5GQ.js → agent-loader-W3RQJVW7.js} +1 -1
- package/dist/{agents-suggest-HYTFMQD3.js → agents-suggest-IKY6VD2R.js} +1 -1
- package/dist/{ambient-WTLYUAQM.js → ambient-AI42BOM5.js} +12 -12
- package/dist/{ambient-76YMUA5Q.js → ambient-FNNFB4AP.js} +1 -1
- package/dist/{assess-UFPYEJKP.js → assess-63WXHWJV.js} +1 -1
- package/dist/authority-FA3HLEOA.js +2 -0
- package/dist/{calibration-OLJYB5HN.js → calibration-BDHGYJOK.js} +1 -1
- package/dist/chunk-23T6UG73.js +605 -0
- package/dist/{chunk-4L7665QV.js → chunk-2AU5L333.js} +1 -1
- package/dist/{chunk-BOYQAMGC.js → chunk-4N56FRNE.js} +1 -1
- package/dist/{chunk-5QOCKWK5.js → chunk-4PSD5R7N.js} +2 -2
- package/dist/{chunk-MQIG6SMF.js → chunk-6QXBXZF6.js} +1 -1
- package/dist/{chunk-ORDKEGII.js → chunk-AMLD7IYC.js} +1 -1
- package/dist/{chunk-3DZK54RU.js → chunk-DBEWOKD6.js} +32 -7
- package/dist/{chunk-AGFPVSX5.js → chunk-F6E3HW45.js} +1 -1
- package/dist/{chunk-X3U3IGYT.js → chunk-GD4F2HC6.js} +2 -2
- package/dist/chunk-GRZQIKST.js +2 -0
- package/dist/{chunk-HOBHJPTL.js → chunk-IOVHF4SR.js} +1 -1
- package/dist/{chunk-RLCH7DXQ.js → chunk-K7X3Z3GL.js} +1 -1
- package/dist/{chunk-74SGKSRQ.js → chunk-KAFQA7HV.js} +2 -2
- package/dist/{chunk-NEJ4ZLCY.js → chunk-LAYBUKMB.js} +1 -1
- package/dist/{chunk-4VKSEOXZ.js → chunk-LPBCQM5Y.js} +3 -3
- package/dist/chunk-Q527BPUF.js +2 -0
- package/dist/{chunk-AO7ZSRME.js → chunk-TQOT2LBO.js} +2 -2
- 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-WXF5VFB4.js +111 -0
- package/dist/chunk-XQLO5URP.js +11 -0
- package/dist/{chunk-DOCDDDTD.js → chunk-YNDPSWOE.js} +5 -5
- package/dist/chunk-Z5QW6USC.js +2 -0
- package/dist/{compliance-D7GD6ZYC.js → compliance-J3VOV445.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-75MABOSL.js} +1 -1
- package/dist/{dist-KGRCLBJP-2QAPFYNF.js → dist-GQ42YS5N-4HIJZVBB.js} +10 -10
- package/dist/{docs-USDAF26F.js → docs-TSAAS4W3.js} +1 -1
- package/dist/doctor-L5XZENCF.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/{hooks-TFMMMB2H.js → hooks-KUEE5KMM.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-Z5UQN57G.js → migrate-ZPNYDNM4.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/migration-notices-BHLEYC4T.js +4 -0
- package/dist/{nomination-engine-EALA5MGI.js → nomination-engine-NCLTGMAK.js} +1 -1
- package/dist/{notebook-loader-PXNRBBXD.js → notebook-loader-3J2OFMS3.js} +1 -1
- package/dist/{orchestrate-M5PBZBJQ.js → orchestrate-K4KBTBYK.js} +1 -1
- package/dist/{platform-server-DNAMH4YI.js → platform-server-ANOALDPL.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-TBPOE4DI.js} +1 -1
- package/dist/quiz-WYIZJG5K.js +10 -0
- package/dist/{record-YXPB34MY.js → record-N3VNYYKJ.js} +1 -1
- package/dist/registry-OUTA3DXW.js +20 -0
- package/dist/reindex-IZCD2JGD.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-3FMUWW5K.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-HHNY6J4I.js +2 -0
- package/dist/{session-work-log-ZP45TREI.js → session-work-log-MEJ33TYD.js} +1 -1
- package/dist/{session-work-log-PAKXOFGL.js → session-work-log-ZVVJGO7X.js} +1 -1
- package/dist/{setup-FEWSYS3Y.js → setup-ZSEC72BS.js} +1 -1
- package/dist/shift-WGMZGWOC.js +60 -0
- package/dist/{show-PJ5LFLIL.js → show-JH7LJ5MT.js} +1 -1
- package/dist/show-WVHAL4VU.js +7 -0
- package/dist/{spawn-M5BAV252.js → spawn-KKDDR6UR.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-2LGZQRP4.js} +1 -1
- package/dist/{timeline-K3ZFKJ3R.js → timeline-RK7O2SCM.js} +1 -1
- package/dist/tools-4RRFTU5H.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-451-agent-routing.md +117 -0
- package/dist/university-content/notes/N-para-451-archetypes-vs-instances.md +82 -0
- package/dist/university-content/notes/N-para-451-identity-layers.md +76 -0
- package/dist/university-content/notes/N-para-451-orchestration-modes.md +85 -0
- package/dist/university-content/notes/N-para-451-paradigm-shift.md +95 -0
- package/dist/university-content/notes/N-para-451-partners-primitive.md +107 -0
- package/dist/university-content/notes/N-para-451-roster-management.md +132 -0
- package/dist/university-content/notes/N-para-451-roster-reference.md +106 -0
- package/dist/university-content/notes/N-para-451-the-team-pattern.md +87 -0
- package/dist/university-content/notes/N-para-451-tiers.md +81 -0
- package/dist/university-content/notes/N-para-451-welcome.md +55 -0
- package/dist/university-content/notes/N-para-451-what-is-an-agent.md +73 -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-451.yaml +69 -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-451-foundations.yaml +154 -0
- package/dist/university-content/quizzes/Q-para-451-when-to-invoke.yaml +182 -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/agent-X6I2YWOB.js +0 -33
- 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/registry-KOOKFUWD.js +0 -20
- 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/shift-PC6C7NUX.js +0 -60
- 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-HXGYVS2N.js} +0 -0
- /package/templates/paradigm/specs/{scan.md → probe.md} +0 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
id: Q-para-201-component-patterns
|
|
2
|
+
title: 'PARA 201: Architecture — Component Patterns'
|
|
3
|
+
description: 'Quiz for lesson: Component Patterns'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: A Redis caching layer is used by the user service, the product service, and the search service. How should it be tagged?
|
|
19
|
+
choices:
|
|
20
|
+
A: 'tags: [feature, redis] — because users interact with cached data'
|
|
21
|
+
B: 'tags: [integration, redis] — because Redis is a third-party service'
|
|
22
|
+
C: 'tags: [state, cache, redis] — because it manages data storage'
|
|
23
|
+
D: 'tags: [infrastructure, redis] — because it is a foundational service'
|
|
24
|
+
E: Both C and D are acceptable, depending on whether caching is the primary purpose or a supporting capability
|
|
25
|
+
correct: E
|
|
26
|
+
explanation: 'If the component''s primary purpose is data caching (storing and retrieving cached data), tags: [state, cache, redis] is appropriate. If it is more of a foundational service that provides caching as infrastructure, tags: [infrastructure, cache, redis] fits. Both are valid interpretations.'
|
|
27
|
+
- id: q2
|
|
28
|
+
question: You have a 500-line module that handles payment processing AND sends email receipts. What should you do?
|
|
29
|
+
choices:
|
|
30
|
+
A: Keep it as one component — splitting would be premature optimization
|
|
31
|
+
B: 'Split into #payment-processor and #receipt-emailer — they have distinct responsibilities'
|
|
32
|
+
C: Create a $payment-receipt-flow instead of splitting
|
|
33
|
+
D: Add more tags to cover both responsibilities in one component
|
|
34
|
+
E: Move the email logic into the logger
|
|
35
|
+
correct: B
|
|
36
|
+
explanation: Payment processing and email sending are distinct responsibilities that could change independently (e.g., switching email providers without touching payment logic). The module is also large (500 lines). Splitting into two focused components follows the 'split when responsibilities are distinct' guideline.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: Why should you check paradigm_history_fragility before modifying infrastructure components?
|
|
39
|
+
choices:
|
|
40
|
+
A: Because infrastructure components have more lines of code
|
|
41
|
+
B: Because many other components depend on them, making changes high-risk
|
|
42
|
+
C: Because infrastructure components are never tested
|
|
43
|
+
D: Because the fragility check automatically creates a backup
|
|
44
|
+
E: Because infrastructure tags prevent direct modification
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: 'Infrastructure components (logger, config-loader, database-pool) are foundational — many other components depend on them. A breaking change to #database-pool could cascade across the entire application. Fragility analysis warns you about this risk before you make changes.'
|
|
47
|
+
- id: q4
|
|
48
|
+
question: What is wrong with splitting a payment module into `#payment-step-1` and `#payment-step-2`?
|
|
49
|
+
choices:
|
|
50
|
+
A: Components cannot have numbers in their names
|
|
51
|
+
B: There should be three components minimum
|
|
52
|
+
C: The names are non-descriptive and the split is artificial — neither component has an independent responsibility
|
|
53
|
+
D: Steps should be defined as a flow, not as components
|
|
54
|
+
E: The hyphen before the number violates kebab-case
|
|
55
|
+
correct: C
|
|
56
|
+
explanation: 'If you cannot describe a component without referencing ''the other half,'' the split is artificial. #payment-step-1 and #payment-step-2 are not independent responsibilities — they are an arbitrary division of a single unit. Keep them as one component with a clear description.'
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
id: Q-para-201-cross-cutting-concerns
|
|
2
|
+
title: 'PARA 201: Architecture — Cross-Cutting Concerns'
|
|
3
|
+
description: 'Quiz for lesson: Cross-Cutting Concerns'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: All API handlers must validate input against a defined schema. Should this be modeled as a gate, signal, or aspect?
|
|
19
|
+
choices:
|
|
20
|
+
A: ^ gate — it checks a condition before processing
|
|
21
|
+
B: '! signal — it fires when validation fails'
|
|
22
|
+
C: ~ aspect — it is a structural pattern applied across all handlers
|
|
23
|
+
D: $ flow — it is a step in the request processing flow
|
|
24
|
+
E: '# component — it is a validation utility'
|
|
25
|
+
correct: C
|
|
26
|
+
explanation: Input validation across all handlers is a cross-cutting concern — the same pattern (validate against a schema) applies to every handler. This is an aspect (~validated), not a gate (gates check conditions like authorization, not input format) or a signal (validation is a structural requirement, not an event).
|
|
27
|
+
- id: q2
|
|
28
|
+
question: 'An aspect `~cached` has `applies-to: ["#*-query"]`. You create `#user-query` without applying caching. What is the recommended action?'
|
|
29
|
+
choices:
|
|
30
|
+
A: Nothing — aspects are just documentation
|
|
31
|
+
B: Delete the ~cached aspect since it does not apply universally
|
|
32
|
+
C: 'Apply the caching pattern to #user-query, since it matches the applies-to pattern'
|
|
33
|
+
D: 'Rename #user-query to #user-fetch to avoid matching the pattern'
|
|
34
|
+
E: 'Add an exception for #user-query in the aspect definition'
|
|
35
|
+
correct: C
|
|
36
|
+
explanation: 'When a new component matches an aspect''s applies-to pattern, the aspect should be applied. If ~cached applies to all #*-query components, then #user-query should use the caching pattern. If there is a genuine reason to exempt it, document that exception rather than working around the naming.'
|
|
37
|
+
- id: q3
|
|
38
|
+
question: Why is a rate limiter classified as an aspect (~rate-limited) rather than a gate (^rate-limited)?
|
|
39
|
+
choices:
|
|
40
|
+
A: Because rate limiters are implemented in middleware
|
|
41
|
+
B: Because rate limiters do not return 403 status codes
|
|
42
|
+
C: Because rate limiting is a structural pattern applied across many endpoints, not a per-resource authorization check
|
|
43
|
+
D: Because rate limiters do not require authentication
|
|
44
|
+
E: Because the ~ prefix is alphabetically closer to 'rate'
|
|
45
|
+
correct: C
|
|
46
|
+
explanation: Gates check specific conditions per request — 'is this user allowed to access this resource?' or 'is this feature enabled?' Rate limiting is a different concern — it applies the same pattern (request counting and throttling) across many endpoints as a structural rule. This cross-cutting nature makes it an aspect.
|
|
47
|
+
- id: q4
|
|
48
|
+
question: After a large refactor that moved files, what is the correct procedure for maintaining aspects?
|
|
49
|
+
choices:
|
|
50
|
+
A: Delete all aspects and recreate them from scratch
|
|
51
|
+
B: Run paradigm_aspect_check to find broken anchors, then update the anchor paths in .purpose files
|
|
52
|
+
C: Aspects automatically update their anchors when files move
|
|
53
|
+
D: Ignore broken anchors — they will fix themselves on the next paradigm scan
|
|
54
|
+
E: Convert all aspects to gates since gates do not have anchors
|
|
55
|
+
correct: B
|
|
56
|
+
explanation: After refactoring, run paradigm_aspect_check to identify which anchors now point to moved or renamed files. Then update the anchors in the .purpose files to reflect the new file paths and line numbers. This maintenance is the trade-off for having verifiable enforcement code.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
id: Q-para-201-disciplines
|
|
2
|
+
title: 'PARA 201: Architecture — Disciplines'
|
|
3
|
+
description: 'Quiz for lesson: Disciplines'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: In a web discipline project, what symbol type should a frontend hook like `useAuth` be classified as?
|
|
19
|
+
choices:
|
|
20
|
+
A: '! signal — hooks fire events'
|
|
21
|
+
B: ^ gate — hooks check conditions
|
|
22
|
+
C: '# component — hooks are code units that encapsulate logic'
|
|
23
|
+
D: $ flow — hooks define sequences
|
|
24
|
+
E: ~ aspect — hooks are cross-cutting concerns
|
|
25
|
+
correct: C
|
|
26
|
+
explanation: 'Hooks are code units, not events. A frontend hook like useAuth encapsulates authentication logic — it is #useAuth, a component. The ! signal prefix is reserved for events that trigger decoupled side effects, which is not what hooks do.'
|
|
27
|
+
- id: q2
|
|
28
|
+
question: A project has `src/client/` for frontend and `src/server/` for backend code. Which discipline should be used?
|
|
29
|
+
choices:
|
|
30
|
+
A: web — because the client directory is listed first
|
|
31
|
+
B: backend — because server code is more important
|
|
32
|
+
C: fullstack — it combines both web and backend mappings based on directory path
|
|
33
|
+
D: library — because the code is shared between client and server
|
|
34
|
+
E: cli — because the server might have CLI commands
|
|
35
|
+
correct: C
|
|
36
|
+
explanation: 'The fullstack discipline combines web and backend mappings. It uses the directory path to determine which mapping applies: src/client/ uses web discipline rules, src/server/ uses backend rules.'
|
|
37
|
+
- id: q3
|
|
38
|
+
question: What three things does the discipline setting affect in Paradigm tooling?
|
|
39
|
+
choices:
|
|
40
|
+
A: Build output, test runner, deployment target
|
|
41
|
+
B: Navigator generation, logging conventions, gate recommendations
|
|
42
|
+
C: File naming, import paths, type definitions
|
|
43
|
+
D: Package manager, bundler, linter configuration
|
|
44
|
+
E: Database schema, API schema, UI schema
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: 'The discipline affects: (1) navigator generation — how paradigm scan categorizes directories, (2) logging conventions — which log methods are conventional for each directory, and (3) gate recommendations — what paradigm_gates_for_route suggests.'
|
|
47
|
+
- id: q4
|
|
48
|
+
question: Your backend project has a `policies/` directory for authorization policies. You want Paradigm to treat them as gates. How do you configure this?
|
|
49
|
+
choices:
|
|
50
|
+
A: Rename the directory to middleware/
|
|
51
|
+
B: Change the discipline to 'web' since it handles auth differently
|
|
52
|
+
C: 'Add a custom-mappings entry in config.yaml: "policies/": "^"'
|
|
53
|
+
D: Create a .purpose file with only gate definitions
|
|
54
|
+
E: It is not possible — gates can only live in middleware/
|
|
55
|
+
correct: C
|
|
56
|
+
explanation: 'Custom mappings in config.yaml extend the discipline defaults. Adding "policies/": "^" tells Paradigm to treat files in the policies/ directory as gates, without changing the overall discipline or renaming directories.'
|
|
57
|
+
- id: q5
|
|
58
|
+
question: 'A Next.js project runs `paradigm init`. The output shows `discipline: fullstack` and `stack: nextjs`. What does the stack preset add that the discipline alone does not provide?'
|
|
59
|
+
choices:
|
|
60
|
+
A: A completely different set of symbol mappings that replaces the discipline
|
|
61
|
+
B: Framework-specific scan hints, refined symbol mappings for Next.js patterns like app/ routes, and purpose-required paths
|
|
62
|
+
C: Automatic code generation for Next.js boilerplate
|
|
63
|
+
D: A Next.js-specific version of portal.yaml with pre-defined gates
|
|
64
|
+
E: Nothing — stack presets and disciplines are the same thing
|
|
65
|
+
correct: B
|
|
66
|
+
explanation: Stack presets layer framework-specific configuration on top of disciplines. For Next.js, the preset adds knowledge about app/ directory routing, server components, API route handlers, and other Next.js-specific patterns. It refines the generic fullstack discipline with framework-aware scan hints and purpose-required paths. Presets extend disciplines — they do not replace them.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
id: Q-para-201-flows-deep-dive
|
|
2
|
+
title: 'PARA 201: Architecture — Flows in Depth'
|
|
3
|
+
description: 'Quiz for lesson: Flows in Depth'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: A controller calls a service, which queries a database and returns a result. Should this be a $flow?
|
|
19
|
+
choices:
|
|
20
|
+
A: Yes — any multi-step process should be a flow
|
|
21
|
+
B: Yes — database queries always require flow documentation
|
|
22
|
+
C: No — this is a two-component interaction with no sequence ambiguity
|
|
23
|
+
D: No — flows can only be used for user-facing features
|
|
24
|
+
E: It depends on whether the service emits a signal
|
|
25
|
+
correct: C
|
|
26
|
+
explanation: A flow is warranted when logic spans three or more components in a specific order. A controller calling a service (with its database query) is a straightforward two-component interaction that can be documented on the component itself.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: Where should a $checkout-flow be defined if the checkout process starts in the cart module?
|
|
29
|
+
choices:
|
|
30
|
+
A: In .paradigm/flows/checkout.yaml
|
|
31
|
+
B: In portal.yaml under a flows section
|
|
32
|
+
C: In src/cart/.purpose, since the cart module initiates the flow
|
|
33
|
+
D: In every .purpose file of every component involved in the flow
|
|
34
|
+
E: In a standalone checkout-flow.purpose file at the project root
|
|
35
|
+
correct: C
|
|
36
|
+
explanation: Flows are defined in the .purpose file of the initiating component's directory. Since the checkout flow starts in the cart module, it belongs in src/cart/.purpose. The flow will reference components from other directories.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: 'What does `paradigm_flow_check` with `checkImplementation: true` verify?'
|
|
39
|
+
choices:
|
|
40
|
+
A: That the flow executes correctly at runtime
|
|
41
|
+
B: That referenced components exist in .purpose files, actions are implemented, and signals are emitted
|
|
42
|
+
C: That the flow has fewer than 10 steps
|
|
43
|
+
D: That all flows use the same naming convention
|
|
44
|
+
E: That the flow is referenced in portal.yaml
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: 'With checkImplementation: true, the validator performs deep checks: it verifies that referenced #components exist in .purpose files, that the named actions are implemented in the actual codebase, and that listed signals are actually emitted. This catches documentation-code drift.'
|
|
47
|
+
- id: q4
|
|
48
|
+
question: What is the fundamental nature of a Paradigm flow?
|
|
49
|
+
choices:
|
|
50
|
+
A: A workflow engine that orchestrates service calls at runtime
|
|
51
|
+
B: A saga implementation with rollback support
|
|
52
|
+
C: Documentation metadata describing what happens in a sequence, not how to execute it
|
|
53
|
+
D: A state machine that transitions between components
|
|
54
|
+
E: An event bus configuration defining message routing
|
|
55
|
+
correct: C
|
|
56
|
+
explanation: Flows are documentation, not orchestration. They describe the sequence of operations for humans and AI agents to understand. Your code still handles the actual service calls, error handling, and state management however you choose to implement it.
|
|
57
|
+
- id: q5
|
|
58
|
+
question: '`$checkout-flow` lists `relatedFlows: [$payment-flow]` and `$payment-flow` lists `relatedFlows: [$checkout-flow]`. What does `paradigm_flow_check` report?'
|
|
59
|
+
choices:
|
|
60
|
+
A: No issues — bidirectional references are valid
|
|
61
|
+
B: 'A circular dependency: $checkout-flow → $payment-flow → $checkout-flow'
|
|
62
|
+
C: A missing step error — related flows must appear as steps
|
|
63
|
+
D: A naming violation — flows cannot reference each other
|
|
64
|
+
E: A warning about duplicate flow definitions
|
|
65
|
+
correct: B
|
|
66
|
+
explanation: When flows reference each other in a cycle via relatedFlows, Paradigm detects it as a circular dependency using depth-first search. The resolution is to extract shared logic into a third flow, remove one direction of the dependency, or replace direct flow references with signal-based communication.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
id: Q-para-201-gates-deep-dive
|
|
2
|
+
title: 'PARA 201: Architecture — Gates in Depth'
|
|
3
|
+
description: 'Quiz for lesson: Gates in Depth'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: A gate checks whether a user's subscription is active before allowing access to premium content. What type should this gate be?
|
|
19
|
+
choices:
|
|
20
|
+
A: auth — it verifies the user's identity
|
|
21
|
+
B: role — it checks the user's permission level
|
|
22
|
+
C: ownership — it verifies resource ownership
|
|
23
|
+
D: state-precondition — it verifies the system is in the right condition
|
|
24
|
+
E: integration — it checks a third-party service
|
|
25
|
+
correct: D
|
|
26
|
+
explanation: This gate verifies system state — whether the subscription is active — rather than identity (auth), permission level (role), or resource ownership. State-precondition gates check conditions about the current state of data.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: 'What is wrong with this gate check expression: `check: user is admin`?'
|
|
29
|
+
choices:
|
|
30
|
+
A: Nothing — it is clear and concise
|
|
31
|
+
B: It should use JavaScript syntax, not English
|
|
32
|
+
C: It is too vague — a developer cannot implement it without more information
|
|
33
|
+
D: It is missing the req. prefix
|
|
34
|
+
E: Gate checks must be written in YAML, not pseudo-code
|
|
35
|
+
correct: C
|
|
36
|
+
explanation: 'Check expressions should be precise enough to implement from reading the expression. ''user is admin'' does not specify how admin status is determined — is it a boolean field? A role in an array? A separate table? A better expression: project.admins.includes(req.user.id).'
|
|
37
|
+
- id: q3
|
|
38
|
+
question: 'A route requires `[^authenticated, ^org-admin, ^billing-enabled]`. The `^org-admin` gate has `requires: [^authenticated]`. What happens at runtime?'
|
|
39
|
+
choices:
|
|
40
|
+
A: ^authenticated runs twice — once from the route, once from ^org-admin's requires
|
|
41
|
+
B: ^authenticated runs once, ^org-admin runs once, ^billing-enabled runs once — in that order
|
|
42
|
+
C: An error is thrown because ^authenticated is listed both in the route and in requires
|
|
43
|
+
D: All three gates run in parallel for performance
|
|
44
|
+
E: Only ^billing-enabled runs because the other two are implicit from requires
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: 'Gate chains prevent redundant checks. ^authenticated is required by ^org-admin, but since the route lists ^authenticated first, it runs once and subsequent gates know it already passed. The three gates execute in order: authenticated, org-admin, billing-enabled.'
|
|
47
|
+
- id: q4
|
|
48
|
+
question: When should the `effects` field be an empty array `[]`?
|
|
49
|
+
choices:
|
|
50
|
+
A: Never — every gate must have at least one prize
|
|
51
|
+
B: When the gate has no side effects to trigger on pass
|
|
52
|
+
C: When the gate is of type 'auth'
|
|
53
|
+
D: When the gate is used on GET routes only
|
|
54
|
+
E: When the gate has been deprecated
|
|
55
|
+
correct: B
|
|
56
|
+
explanation: 'Use effects: [] when the gate has no side effects. Most gates simply allow or deny access without triggering additional actions. Effects are for special cases like gamification badges, onboarding rewards, or analytics events.'
|
|
57
|
+
- id: q5
|
|
58
|
+
question: 'portal.yaml says `"DELETE /api/posts/:id": [^authenticated, ^post-author]`, but the route handler only checks authentication, not authorship. What is the consequence?'
|
|
59
|
+
choices:
|
|
60
|
+
A: No consequence — portal.yaml is just documentation
|
|
61
|
+
B: The route will return 403 automatically based on portal.yaml
|
|
62
|
+
C: Any authenticated user can delete any post — a security vulnerability caused by the implementation not matching the specification
|
|
63
|
+
D: The paradigm scan command will fix the discrepancy automatically
|
|
64
|
+
E: The delete will fail silently
|
|
65
|
+
correct: C
|
|
66
|
+
explanation: portal.yaml defines what SHOULD happen, but your code must implement it. If the middleware only checks authentication without verifying post authorship, any logged-in user can delete any post. This is a security vulnerability caused by specification-implementation drift.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
id: Q-para-201-portal-protocol
|
|
2
|
+
title: 'PARA 201: Architecture — The Portal Protocol'
|
|
3
|
+
description: 'Quiz for lesson: The Portal Protocol'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: You need to add `DELETE /api/teams/:id`. What is the FIRST step in the Portal Protocol?
|
|
19
|
+
choices:
|
|
20
|
+
A: Write the delete handler and add authentication middleware
|
|
21
|
+
B: Add the route to portal.yaml with [^authenticated]
|
|
22
|
+
C: Call paradigm_gates_for_route to get gate suggestions
|
|
23
|
+
D: Write a test for the 403 response
|
|
24
|
+
E: Create a ^team-admin gate in middleware
|
|
25
|
+
correct: C
|
|
26
|
+
explanation: The Portal Protocol starts with asking Paradigm. Call paradigm_gates_for_route with the route and method to get suggestions based on existing patterns. This ensures you consider all necessary gates before implementation.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: 'Your portal.yaml specifies `"PUT /api/posts/:id": [^authenticated, ^post-author]`. Your middleware only checks ^authenticated. What is the security impact?'
|
|
29
|
+
choices:
|
|
30
|
+
A: None — portal.yaml automatically enforces all listed gates
|
|
31
|
+
B: Any authenticated user can edit any post, because the ^post-author check is missing from the implementation
|
|
32
|
+
C: The route will return 500 because of the missing gate
|
|
33
|
+
D: Paradigm will block the request at the framework level
|
|
34
|
+
E: The post-author gate runs automatically via the requires field
|
|
35
|
+
correct: B
|
|
36
|
+
explanation: portal.yaml is a specification, not enforcement. If the middleware does not implement the ^post-author check, any authenticated user can edit any post. This is a security vulnerability caused by the implementation not matching the specification.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: In a web API, which HTTP status code should a failed authentication gate return, versus a failed authorization gate?
|
|
39
|
+
choices:
|
|
40
|
+
A: Both return 403 Forbidden
|
|
41
|
+
B: Authentication returns 401 Unauthorized; authorization returns 403 Forbidden
|
|
42
|
+
C: Authentication returns 403 Forbidden; authorization returns 401 Unauthorized
|
|
43
|
+
D: Both return 401 Unauthorized
|
|
44
|
+
E: Authentication returns 400 Bad Request; authorization returns 403 Forbidden
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: In the HTTP discipline, the standard distinguishes between authentication (who are you?) and authorization (are you allowed?). A failed auth gate (^authenticated) returns 401 Unauthorized. A failed role/ownership gate (^project-admin) returns 403 Forbidden. Note that this is the web API implementation — other disciplines express gate failure differently (a mobile app might show a login screen or disable a button; a CLI might exit with an error code).
|
|
47
|
+
- id: q4
|
|
48
|
+
question: Why does the Portal Protocol require defining gates BEFORE writing handler code?
|
|
49
|
+
choices:
|
|
50
|
+
A: Because Paradigm cannot parse handler code that already exists
|
|
51
|
+
B: Because it creates an auditable specification separate from implementation, preventing conditions as an afterthought
|
|
52
|
+
C: Because TypeScript requires gate types to be defined before use
|
|
53
|
+
D: Because AI agents refuse to write code without portal.yaml
|
|
54
|
+
E: Because gate middleware must be loaded before route handlers in the server stack
|
|
55
|
+
correct: B
|
|
56
|
+
explanation: The Portal Protocol's core principle is specification before implementation. By specifying gates in portal.yaml first, you create an auditable specification that is separate from (and checkable against) the implementation. This prevents the common pattern of building features first and bolting on checks later.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
id: Q-para-201-signal-patterns
|
|
2
|
+
title: 'PARA 201: Architecture — Signal Patterns'
|
|
3
|
+
description: 'Quiz for lesson: Signal Patterns'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: The order service needs to send a confirmation email after an order is placed. What is the correct architecture?
|
|
19
|
+
choices:
|
|
20
|
+
A: The order service directly calls the email service's sendEmail method
|
|
21
|
+
B: The order service emits !order-placed; the email service listens to that signal
|
|
22
|
+
C: The email service polls the order service every 5 seconds for new orders
|
|
23
|
+
D: A $send-email-flow orchestrates the interaction
|
|
24
|
+
E: The order service includes email logic internally
|
|
25
|
+
correct: B
|
|
26
|
+
explanation: Signal-based communication decouples the order service from the email service. The order service emits !order-placed and does not know who listens. The email service independently listens for that signal. This means you can add more listeners (analytics, loyalty points) without touching the order service.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: Where are signal listeners documented in Paradigm?
|
|
29
|
+
choices:
|
|
30
|
+
A: On the signal definition in the 'listeners' field
|
|
31
|
+
B: On the listening component in a 'listens' field
|
|
32
|
+
C: In portal.yaml under a 'listeners' section
|
|
33
|
+
D: In .paradigm/config.yaml
|
|
34
|
+
E: They are not documented — only emitters are tracked
|
|
35
|
+
correct: B
|
|
36
|
+
explanation: Listeners are documented on the component that listens, using a 'listens' field. This asymmetry is intentional — the emitter declares what it emits (on the signal), and each listener independently declares what it consumes (on the component). This maintains true decoupling.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: A failed login attempt from an unknown IP should emit what category of signal?
|
|
39
|
+
choices:
|
|
40
|
+
A: business — it affects the user's experience
|
|
41
|
+
B: system — it is an infrastructure event
|
|
42
|
+
C: security — it is an authentication event relevant to audit trails
|
|
43
|
+
D: error — it indicates a system failure
|
|
44
|
+
E: It should not emit a signal — failed logins are expected
|
|
45
|
+
correct: C
|
|
46
|
+
explanation: Failed login attempts are security events. They are critical for audit trails, intrusion detection, and monitoring suspicious activity. The signal (!login-failed) should include data like email, reason, and IP address to support security analysis.
|
|
47
|
+
- id: q4
|
|
48
|
+
question: A system currently has !order-placed consumed by 3 listeners. A developer needs to add a Slack notification when orders are placed. What must change?
|
|
49
|
+
choices:
|
|
50
|
+
A: The !order-placed signal definition must be updated to list the Slack notifier as an emitter
|
|
51
|
+
B: The $order-flow must add a Slack notification step
|
|
52
|
+
C: 'Only the new #slack-notifier component needs a ''listens: ["!order-placed"]'' declaration — nothing else changes'
|
|
53
|
+
D: 'The #order-service must be modified to call the Slack API'
|
|
54
|
+
E: portal.yaml must add a ^slack-authorized gate
|
|
55
|
+
correct: C
|
|
56
|
+
explanation: This is the power of signal-based decoupling. Adding a new listener requires only defining the new component with its 'listens' field. The signal definition, the emitting component, and all existing listeners remain untouched.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
id: Q-para-201-symbol-naming
|
|
2
|
+
title: 'PARA 201: Architecture — Symbol Naming Conventions'
|
|
3
|
+
description: 'Quiz for lesson: Symbol Naming Conventions'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-201
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-201.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: Which of these signal names follows Paradigm naming conventions?
|
|
19
|
+
choices:
|
|
20
|
+
A: '!processPayment'
|
|
21
|
+
B: '!payment-completed'
|
|
22
|
+
C: '!PaymentSignal'
|
|
23
|
+
D: '!creating-user'
|
|
24
|
+
E: '!payment_done'
|
|
25
|
+
correct: B
|
|
26
|
+
explanation: 'Signals use kebab-case and past-tense naming: !payment-completed. Option A uses camelCase and imperative mood. C uses PascalCase. D uses progressive tense. E uses underscores instead of hyphens.'
|
|
27
|
+
- id: q2
|
|
28
|
+
question: 'A flow that handles user registration from form submission to welcome email should be named:'
|
|
29
|
+
choices:
|
|
30
|
+
A: $doRegistration
|
|
31
|
+
B: $registerUser
|
|
32
|
+
C: $user-registration-flow
|
|
33
|
+
D: $REGISTRATION
|
|
34
|
+
E: $flow_register
|
|
35
|
+
correct: C
|
|
36
|
+
explanation: Flows use kebab-case with a noun-flow pattern. $user-registration-flow is descriptive and follows the convention. Imperative names (doRegistration, registerUser), ALL CAPS, and underscores all violate the naming rules.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: What is wrong with the gate name `^check1`?
|
|
39
|
+
choices:
|
|
40
|
+
A: Nothing — it is valid kebab-case
|
|
41
|
+
B: Gates must start with a verb
|
|
42
|
+
C: The number 1 is not allowed in symbol names
|
|
43
|
+
D: It is non-descriptive — the name should describe what the gate verifies
|
|
44
|
+
E: Gates must end with '-gate'
|
|
45
|
+
correct: D
|
|
46
|
+
explanation: 'Gate names should describe what they verify: ^project-admin, ^email-verified, ^subscription-active. The name ^check1 tells you nothing about what condition is being checked. A developer or AI agent cannot infer the gate''s purpose from its name.'
|
|
47
|
+
- id: q4
|
|
48
|
+
question: A component wraps the Stripe API for payment processing. Its class is `StripePaymentClient`. What should its .purpose ID be?
|
|
49
|
+
choices:
|
|
50
|
+
A: '#StripePaymentClient'
|
|
51
|
+
B: '#stripe-payment-client'
|
|
52
|
+
C: '#stripe_payment_client'
|
|
53
|
+
D: '#stripePaymentClient'
|
|
54
|
+
E: '#STRIPE-CLIENT'
|
|
55
|
+
correct: B
|
|
56
|
+
explanation: 'All symbol IDs in .purpose files use kebab-case: #stripe-payment-client. The PascalCase class name (StripePaymentClient) is fine in code and descriptions, but the ID must be kebab-case.'
|
|
57
|
+
- id: q5
|
|
58
|
+
question: 'Which aspect name reads most naturally in the sentence: ''All financial services are ___''?'
|
|
59
|
+
choices:
|
|
60
|
+
A: ~doAudit
|
|
61
|
+
B: ~auditStuff
|
|
62
|
+
C: ~audit-required
|
|
63
|
+
D: ~auditService
|
|
64
|
+
E: ~the-audit-aspect
|
|
65
|
+
correct: C
|
|
66
|
+
explanation: 'Aspect names should read as adjectives or past-participles: ''All financial services are ~audit-required.'' Options A and B are informal/imperative, D sounds like a component name, and E is unnecessarily verbose.'
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
id: Q-para-301-context-management
|
|
2
|
+
title: 'PARA 301: Operations — Context Management'
|
|
3
|
+
description: 'Quiz for lesson: Context Management'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-301
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-301.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: How often should you call paradigm_session_health during a long session?
|
|
19
|
+
choices:
|
|
20
|
+
A: Only at the start of the session
|
|
21
|
+
B: Every 10-15 tool calls
|
|
22
|
+
C: Only when the AI starts forgetting things
|
|
23
|
+
D: Once per hour
|
|
24
|
+
E: Only before handoff
|
|
25
|
+
correct: B
|
|
26
|
+
explanation: The recommended cadence for context checks is every 10-15 tool calls. This proactive monitoring lets you prepare for handoff before context is exhausted, rather than discovering the limit when it is too late.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: paradigm_session_health returns 'handoff-soon'. What should you do?
|
|
29
|
+
choices:
|
|
30
|
+
A: Ignore it and keep working
|
|
31
|
+
B: Immediately stop all work
|
|
32
|
+
C: Finish the current task, then call paradigm_handoff_prepare with summary and next steps
|
|
33
|
+
D: Delete old messages to free up context
|
|
34
|
+
E: Switch to a model with a larger context window
|
|
35
|
+
correct: C
|
|
36
|
+
explanation: When handoff is recommended, prioritize completing the current task (if close to done), then prepare a handoff summary. paradigm_handoff_prepare captures what was done, files modified, next steps, and open questions so the next session can continue seamlessly.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: What is the first thing a new AI agent session should do to continue work from a previous session?
|
|
39
|
+
choices:
|
|
40
|
+
A: Read every file that was modified
|
|
41
|
+
B: Call paradigm_session_recover to load breadcrumbs from the previous session
|
|
42
|
+
C: Start the task from scratch
|
|
43
|
+
D: Call paradigm_doctor to validate the project
|
|
44
|
+
E: Run paradigm scan to rebuild the index
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: paradigm_session_recover loads the breadcrumbs and handoff summary from the previous session. This tells the new agent what was done, what files were modified, what remains, and any open questions -- enabling seamless continuity.
|
|
47
|
+
- id: q4
|
|
48
|
+
question: At what context usage threshold does Paradigm recommend preparing a handoff?
|
|
49
|
+
choices:
|
|
50
|
+
A: 50%
|
|
51
|
+
B: 65%
|
|
52
|
+
C: 75%
|
|
53
|
+
D: 85%
|
|
54
|
+
E: 95%
|
|
55
|
+
correct: D
|
|
56
|
+
explanation: When context usage exceeds 85%, Paradigm recommends preparing a handoff. This leaves enough room to complete the current task and create a proper handoff summary without running out of context.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
id: Q-para-301-decisions
|
|
2
|
+
title: 'PARA 301: Operations — The Decision Store'
|
|
3
|
+
description: 'Quiz for lesson: The Decision Store'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-18'
|
|
6
|
+
updated: '2026-04-18'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-301
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: authored
|
|
15
|
+
source: v6.0-content-fix
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: In Paradigm v6.0, where do architectural decisions live?
|
|
19
|
+
choices:
|
|
20
|
+
A: '`.paradigm/wisdom/decisions.yaml` — written via `paradigm_wisdom_record({ type: ''decision'', ... })`'
|
|
21
|
+
B: '`.paradigm/lore/entries/{date}/L-*.yaml` — written via `paradigm_lore_record({ type: ''decision'', ... })`'
|
|
22
|
+
C: '`.paradigm/decisions/TD-*.yaml` — written via `paradigm_decision_record`, with a companion lore `insight` auto-written for timeline coverage'
|
|
23
|
+
D: '`.paradigm/history/decisions.jsonl` — written via `paradigm_history_record({ type: ''decision'', ... })`'
|
|
24
|
+
E: They live in commit messages with the `decision:` trailer
|
|
25
|
+
correct: C
|
|
26
|
+
explanation: 'In v6.0 decisions moved to a dedicated topic-addressable store at `.paradigm/decisions/`. Each decision is one `TD-*.yaml` file recorded via `paradigm_decision_record`. A companion lore entry of `type: ''insight''` is auto-written so the timeline still surfaces when the decision was made. Both `paradigm_wisdom_record({type:''decision''})` (A) and `paradigm_lore_record({type:''decision''})` (B) reject with a structured envelope pointing at the new tool.'
|
|
27
|
+
- id: q2
|
|
28
|
+
question: You call `paradigm_decision_record` and it succeeds. What gets written to disk?
|
|
29
|
+
choices:
|
|
30
|
+
A: Only the `TD-*.yaml` decision file
|
|
31
|
+
B: The `TD-*.yaml` decision file AND a companion lore `insight` entry with `references.decision_id` back-pointing to the TD- id
|
|
32
|
+
C: Only the companion lore entry — decisions are stored as a special lore type
|
|
33
|
+
D: Three files — one in decisions, one in wisdom, one in lore (for backward compat)
|
|
34
|
+
E: Nothing on disk — decisions are kept in memory only
|
|
35
|
+
correct: B
|
|
36
|
+
explanation: 'Two artifacts are written. (1) The canonical decision goes to `.paradigm/decisions/TD-*.yaml` — topic-addressable, with full ADR shape. (2) A companion lore entry of `type: ''insight''` goes to `.paradigm/lore/entries/{date}/L-*.yaml` with `references.decision_id` pointing back at the TD- id and the `companion-lore` + `decision-reference` tags. The lore entry keeps the project timeline complete; the TD- entry stays the source of truth. The companion write is best-effort — a failure to write the lore entry never blocks the decision record.'
|
|
37
|
+
- id: q3
|
|
38
|
+
question: 'A teammate has a v5 project with old `type: decision` lore entries in `.paradigm/lore/entries/`. They upgrade to v6.0 and run `paradigm_lore_search`. What happens to those old entries?'
|
|
39
|
+
choices:
|
|
40
|
+
A: They disappear — decisions are no longer a valid lore type
|
|
41
|
+
B: 'They are auto-deleted on the first read after upgrade'
|
|
42
|
+
C: 'They are remapped to `type: insight` on read and tagged `v6-migrated:from-decision`, so they remain searchable via the tag'
|
|
43
|
+
D: 'They throw errors and block lore-search until the user manually edits each one'
|
|
44
|
+
E: 'They are auto-converted into `paradigm_decision_record` entries in `.paradigm/decisions/`'
|
|
45
|
+
correct: C
|
|
46
|
+
explanation: 'v1/v2 entries with `type: decision` are remapped to `type: insight` on read with the `v6-migrated:from-decision` tag applied for forensic recovery. The old entries remain searchable (`paradigm_lore_search({ tag: ''v6-migrated:from-decision'' })`). There is no automatic conversion to canonical TD- records (E) — the v1/v2 entries lack the structured participant/alternative data the new shape requires, so promotion to the new store is deliberate, one-by-one.'
|
|
47
|
+
- id: q4
|
|
48
|
+
question: 'In v6.0, you call `paradigm_lore_record({ type: ''decision'', title: ''Use Redis'', ... })`. What is the response?'
|
|
49
|
+
choices:
|
|
50
|
+
A: 'The entry is recorded successfully — `decision` is still a valid lore type'
|
|
51
|
+
B: 'A structured rejection envelope (code: ''lore_type_decision_removed'', successor_tool: ''paradigm_decision_record'') so a calling agent can auto-retry against the right tool without human intervention'
|
|
52
|
+
C: A silent no-op — the call returns success but nothing is written
|
|
53
|
+
D: The entry is written but flagged as deprecated and hidden from search
|
|
54
|
+
E: The CLI prompts the user interactively to choose a different type
|
|
55
|
+
correct: B
|
|
56
|
+
explanation: 'The storage layer (in `packages/paradigm/src/core/lore/storage.ts`) hard-rejects `type: ''decision''` with a structured rejection envelope. The envelope includes `code: ''lore_type_decision_removed''`, `successor_tool: ''paradigm_decision_record''`, `removed_in: ''6.0.0''`, and `doc: ''docs/private/plans/v6.0-decisions-locked.md''`. Same shape applies if you call `paradigm_wisdom_record({type:''decision''})`. The structured shape lets a calling agent (LLM or script) auto-retry against the right tool — no human in the loop required.'
|
|
57
|
+
- id: q5
|
|
58
|
+
question: 'You finish a 40-minute work session that modified 5 files and decided to switch from PostgreSQL to CockroachDB. How should you record this in v6.0?'
|
|
59
|
+
choices:
|
|
60
|
+
A: 'Just `paradigm_decision_record` — it covers the choice; no lore needed'
|
|
61
|
+
B: 'Just `paradigm_lore_record({ type: ''agent-session'' })` with the choice in the `decisions` field'
|
|
62
|
+
C: 'Both: an `agent-session` lore entry covers the work session; if the DB choice also deserves canonical status (search by symbol, status lifecycle), call `paradigm_decision_record` separately. They are not mutually exclusive.'
|
|
63
|
+
D: 'Use `paradigm_wisdom_record({ type: ''decision'' })` — wisdom captures team choices'
|
|
64
|
+
E: 'Use `paradigm_history_record` — DB switches are implementation events'
|
|
65
|
+
correct: C
|
|
66
|
+
explanation: 'Lore and decisions are not mutually exclusive. The `agent-session` entry captures the work session (5 files modified, what was learned) — and its `decisions` field can hold a brief reference to the DB switch. If the DB choice also deserves canonical status (you want to search "what did we decide about the user-service database?" later), call `paradigm_decision_record` separately. The TD- entry is the canonical source; the agent-session lore covers "what happened that day." D is invalid in v6 (`paradigm_wisdom_record` rejects `type: ''decision''`).'
|
|
67
|
+
- id: q6
|
|
68
|
+
question: What does `paradigm_decision_record` give you that `paradigm_wisdom_record({type:''decision''})` (v5 style) did not?
|
|
69
|
+
choices:
|
|
70
|
+
A: Nothing — it is just a rename
|
|
71
|
+
B: Structured participants with stance enum (proposed/supported/dissented/abstained), structured alternatives_considered with rejected_because, status lifecycle (active/superseded/deprecated/rejected), bidirectional supersede tracking, and an automatic companion lore insight for timeline coverage
|
|
72
|
+
C: Faster writes — TD- files are smaller than wisdom entries
|
|
73
|
+
D: Encryption — decisions are encrypted at rest, wisdom was not
|
|
74
|
+
E: Public-key signing — every decision is cryptographically signed
|
|
75
|
+
correct: B
|
|
76
|
+
explanation: 'The new tool brings ADR-shape structure that the wisdom path never had: structured participants with a stance enum, structured alternatives_considered with `rejected_because`, a status lifecycle, bidirectional supersede tracking (`superseded_by` + `supersedes`), and the companion-lore pattern for automatic timeline coverage. None of A/C/D/E are real differences — the win is structured-data discipline plus the companion timeline write.'
|