@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-101-first-steps
|
|
2
|
+
title: 'PARA 101: Foundations — Your First Steps'
|
|
3
|
+
description: 'Quiz for lesson: Your First Steps'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-101
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-101.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: What is the correct order for the AI agent orientation protocol?
|
|
19
|
+
choices:
|
|
20
|
+
A: Read source code, write tests, check coverage, deploy
|
|
21
|
+
B: Call paradigm_status, read config.yaml, check portal.yaml, use paradigm_navigate
|
|
22
|
+
C: Run paradigm scan, edit navigator.yaml, read .purpose files, commit changes
|
|
23
|
+
D: Read package.json, install dependencies, run build, check logs
|
|
24
|
+
E: Create .purpose files, define gates, emit signals, validate flows
|
|
25
|
+
correct: B
|
|
26
|
+
explanation: 'The orientation protocol is: (1) paradigm_status for project overview, (2) read config.yaml for conventions, (3) check portal.yaml for security gates, (4) paradigm_navigate to find the relevant code area. This takes ~500 tokens and gives the agent full context.'
|
|
27
|
+
- id: q2
|
|
28
|
+
question: After creating new .purpose files, what command should you run?
|
|
29
|
+
choices:
|
|
30
|
+
A: paradigm shift
|
|
31
|
+
B: paradigm validate
|
|
32
|
+
C: paradigm scan
|
|
33
|
+
D: paradigm deploy
|
|
34
|
+
E: paradigm build
|
|
35
|
+
correct: C
|
|
36
|
+
explanation: paradigm scan reads all .purpose files and portal.yaml, builds the symbol index, and regenerates navigator.yaml. Without rescanning, AI agents will not find the newly defined symbols through navigation tools.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: In portal.yaml, what does an empty gate array on a route mean?
|
|
39
|
+
choices:
|
|
40
|
+
A: The route is disabled and will return 404
|
|
41
|
+
B: The route requires all gates to pass
|
|
42
|
+
C: The route is intentionally unprotected — documented as public
|
|
43
|
+
D: The route has not been configured yet and will return 500
|
|
44
|
+
E: The route inherits gates from its parent path
|
|
45
|
+
correct: C
|
|
46
|
+
explanation: An empty gate array [] means the route is intentionally public. Listing it in portal.yaml with no gates documents the decision that this route should be accessible without authentication — it is not an oversight.
|
|
47
|
+
- id: q4
|
|
48
|
+
question: Which of these is a common pitfall when starting with Paradigm?
|
|
49
|
+
choices:
|
|
50
|
+
A: Creating too many .purpose files on day one instead of starting small
|
|
51
|
+
B: Using the Paradigm logger instead of console.log
|
|
52
|
+
C: Running paradigm scan after adding new purpose files
|
|
53
|
+
D: Putting portal.yaml at the project root
|
|
54
|
+
E: Using tags to classify components
|
|
55
|
+
correct: A
|
|
56
|
+
explanation: A common pitfall is trying to document everything on day one. The recommended approach is to start with the most critical module, create one .purpose file, and expand incrementally as the project grows.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
id: Q-para-101-five-symbols
|
|
2
|
+
title: 'PARA 101: Foundations — The Five Symbols'
|
|
3
|
+
description: 'Quiz for lesson: The Five Symbols'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-101
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-101.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: A middleware function that checks whether the current user has admin privileges should be classified as which symbol?
|
|
19
|
+
choices:
|
|
20
|
+
A: '# Component'
|
|
21
|
+
B: $ Flow
|
|
22
|
+
C: ^ Gate
|
|
23
|
+
D: '! Signal'
|
|
24
|
+
E: ~ Aspect
|
|
25
|
+
correct: C
|
|
26
|
+
explanation: A middleware function that checks a condition and either allows or blocks access is a gate (^). Gates verify that a required condition is met before proceeding — in this case, admin privileges.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: After a refactor, you run paradigm doctor and it reports "3 broken anchors detected." Which symbol type was affected?
|
|
29
|
+
choices:
|
|
30
|
+
A: '# Component — components have code anchors that broke during refactoring'
|
|
31
|
+
B: $ Flow — flow steps reference line numbers that shifted
|
|
32
|
+
C: ^ Gate — gate definitions include file paths that changed
|
|
33
|
+
D: '! Signal — signal emitters moved to different files'
|
|
34
|
+
E: ~ Aspect — aspects are the only symbol with code anchors, and the refactor moved the anchored lines
|
|
35
|
+
correct: E
|
|
36
|
+
explanation: Aspects (~) are the only symbol type that requires code anchors — specific file:line references pointing to where the rule is enforced. When code is refactored and lines move, those anchors break. paradigm doctor detects this via SHA-256 hash comparison, and paradigm_aspect_drift can show exactly which anchors drifted.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: A payment processing module contains a Stripe API wrapper, a billing calculator, and an in-memory cart. How should these be classified?
|
|
39
|
+
choices:
|
|
40
|
+
A: 'Each gets a different symbol type: $ for Stripe, # for calculator, ! for cart'
|
|
41
|
+
B: 'They are all # components, differentiated by tags like [integration, stripe], [feature], and [state]'
|
|
42
|
+
C: 'They should all be a single # component since they are in the same module'
|
|
43
|
+
D: The Stripe wrapper is a ~ aspect since it is a cross-cutting concern
|
|
44
|
+
E: They should be modeled as steps in a $ flow
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: 'All three are documented code units, so they are all # components. The differences are captured by tags: #stripe-service with tags: [integration, stripe], #billing-calculator with tags: [feature], #cart-store with tags: [state]. Tags add nuance without requiring different symbol types.'
|
|
47
|
+
- id: q4
|
|
48
|
+
question: When should you create a $flow?
|
|
49
|
+
choices:
|
|
50
|
+
A: For every function that takes more than 10 lines of code
|
|
51
|
+
B: Only for authentication sequences
|
|
52
|
+
C: When logic spans three or more components in a specific order
|
|
53
|
+
D: Whenever you emit a signal
|
|
54
|
+
E: For all API endpoints regardless of complexity
|
|
55
|
+
correct: C
|
|
56
|
+
explanation: Flows document multi-step processes that involve three or more components in a defined sequence. A single-component operation or a two-component call does not warrant a flow — it adds documentation overhead without providing navigational value.
|
|
57
|
+
- id: q5
|
|
58
|
+
question: Your payment module emits !payment-completed after charging a card. Later, the marketing team adds a "send receipt email" listener, and the analytics team adds a "record conversion" listener. Neither team modified the payment module. How is this possible?
|
|
59
|
+
choices:
|
|
60
|
+
A: The payment module was refactored to call both services directly
|
|
61
|
+
B: Signals promote loose coupling — the emitter fires the event without knowing who listens, so new listeners can be added independently
|
|
62
|
+
C: The listeners were added to the payment module's .purpose file
|
|
63
|
+
D: Both teams used the same $flow as the payment module
|
|
64
|
+
E: The ^payment gate routes events to registered handlers
|
|
65
|
+
correct: B
|
|
66
|
+
explanation: 'This is the core value of signals: loose coupling. The payment module emits !payment-completed and has zero knowledge of who listens. The marketing team and analytics team independently subscribe to the signal. No code in the payment module was modified. This is why Paradigm separates signals (!) from flows ($) — flows define explicit steps, while signals enable independent, decoupled reactions.'
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
id: Q-para-101-paradigm-logger
|
|
2
|
+
title: 'PARA 101: Foundations — The Paradigm Logger'
|
|
3
|
+
description: 'Quiz for lesson: The Paradigm Logger'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-101
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-101.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: What is the correct way to log a successful payment in `#payment-service`?
|
|
19
|
+
choices:
|
|
20
|
+
A: 'console.log(''Payment processed'', { amount: 4999 })'
|
|
21
|
+
B: log.info('#payment-service', 'Payment processed')
|
|
22
|
+
C: 'log.component(''#payment-service'').info(''Payment processed'', { amount: 4999 })'
|
|
23
|
+
D: log.signal('!payment-completed').info('Payment processed')
|
|
24
|
+
E: log.gate('#payment-service').info('Payment processed')
|
|
25
|
+
correct: C
|
|
26
|
+
explanation: 'Paradigm''s logging philosophy is that every log entry should be tagged with the symbol it relates to. For a component like #payment-service, the log should identify it as a component-level entry at the info level.'
|
|
27
|
+
- id: q2
|
|
28
|
+
question: Code in the `middleware/` directory should typically use which logger method?
|
|
29
|
+
choices:
|
|
30
|
+
A: log.component()
|
|
31
|
+
B: log.flow()
|
|
32
|
+
C: log.signal()
|
|
33
|
+
D: log.gate()
|
|
34
|
+
E: log.aspect()
|
|
35
|
+
correct: D
|
|
36
|
+
explanation: By Paradigm's directory-to-symbol convention, middleware/ maps to gates (^). Code in middleware directories typically performs condition checks, which are gate operations — so logs from these files should be tagged as gate-related.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: An authentication gate denies access to an unauthenticated user. What log level should be used?
|
|
39
|
+
choices:
|
|
40
|
+
A: debug — it is a routine check
|
|
41
|
+
B: info — the gate worked correctly
|
|
42
|
+
C: warn — access was denied, which is unexpected but not a failure
|
|
43
|
+
D: error — someone tried to access a protected resource
|
|
44
|
+
E: No logging — gate denials should be silent
|
|
45
|
+
correct: C
|
|
46
|
+
explanation: A gate denial is unexpected from the user's perspective (they tried to access something they should not) but it is recoverable and the system handled it correctly. This makes it a warn — not an error (the system did not fail) and not info (something unusual happened).
|
|
47
|
+
- id: q4
|
|
48
|
+
question: Which of these is a valid reason to use the Paradigm logger instead of console.log?
|
|
49
|
+
choices:
|
|
50
|
+
A: console.log is slower in production environments
|
|
51
|
+
B: The Paradigm logger automatically fixes bugs in the logged code
|
|
52
|
+
C: Structured symbol-tagged logs enable filtering, tracing, and incident correlation
|
|
53
|
+
D: console.log does not work in TypeScript projects
|
|
54
|
+
E: The Paradigm logger compresses log output to save disk space
|
|
55
|
+
correct: C
|
|
56
|
+
explanation: The primary advantage of the Paradigm logger is structure. Every log line is tagged with a symbol type and name, enabling you to filter by component, trace entries back to .purpose definitions, and correlate incidents with specific symbols.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
id: Q-para-101-portal-yaml
|
|
2
|
+
title: 'PARA 101: Foundations — Portal.yaml'
|
|
3
|
+
description: 'Quiz for lesson: Portal.yaml'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-101
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-101.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: You are adding a new action that requires preconditions — only authenticated team admins should be able to invite users. What is the correct gate workflow?
|
|
19
|
+
choices:
|
|
20
|
+
A: Write the handler code first, then add authorization if there is time
|
|
21
|
+
B: Identify the required gates, add them to portal.yaml, implement the checks, test that failing a gate blocks the action
|
|
22
|
+
C: Add a console.log that prints the user's role for manual verification
|
|
23
|
+
D: Create a new .purpose file with a ^gate definition — portal.yaml is optional
|
|
24
|
+
E: Add the route to navigator.yaml so AI agents know about it
|
|
25
|
+
correct: B
|
|
26
|
+
explanation: 'The Paradigm gate-first workflow is: (1) identify the required gates (paradigm_gates_for_route can suggest them for web routes), (2) define the gates in portal.yaml, (3) implement the gate checks in code, (4) test that failing a gate blocks the action. Conditions are defined before implementation.'
|
|
27
|
+
- id: q2
|
|
28
|
+
question: What does the `requires` field on a gate definition do?
|
|
29
|
+
choices:
|
|
30
|
+
A: Lists npm packages the gate depends on
|
|
31
|
+
B: Specifies other gates that must pass before this gate is checked
|
|
32
|
+
C: Defines the HTTP status code returned on failure
|
|
33
|
+
D: Lists the source files that implement the gate
|
|
34
|
+
E: Specifies environment variables needed for the check
|
|
35
|
+
correct: B
|
|
36
|
+
explanation: The requires field creates a gate chain. For example, ^project-admin requires [^authenticated] — the authentication check must pass before the admin role check is evaluated.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: When is portal.yaml NOT needed?
|
|
39
|
+
choices:
|
|
40
|
+
A: When the project has condition checks that must pass before actions proceed
|
|
41
|
+
B: When the project has role-based access control
|
|
42
|
+
C: When the application has no gates — no conditions need to be checked before any action
|
|
43
|
+
D: When the project only has GET endpoints
|
|
44
|
+
E: When the project uses a third-party auth service
|
|
45
|
+
correct: C
|
|
46
|
+
explanation: portal.yaml is needed whenever your application has gates — conditions that must be checked before actions proceed. If no action in the system requires a precondition check (authentication, feature flags, data readiness, etc.), then portal.yaml is not needed.
|
|
47
|
+
- id: q4
|
|
48
|
+
question: What is the `effects` field on a gate definition?
|
|
49
|
+
choices:
|
|
50
|
+
A: The HTTP response body returned when the gate passes
|
|
51
|
+
B: Side effects triggered when the gate is successfully passed
|
|
52
|
+
C: The list of routes protected by this gate
|
|
53
|
+
D: The reward given to the developer who implemented the gate
|
|
54
|
+
E: A list of test cases for the gate
|
|
55
|
+
correct: B
|
|
56
|
+
explanation: 'Effects are side effects that trigger when a gate passes. For example, passing ^first-login might award an onboarding badge. If there are no side effects, use an empty array: effects: [].'
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
id: Q-para-101-project-structure
|
|
2
|
+
title: 'PARA 101: Foundations — Project Structure'
|
|
3
|
+
description: 'Quiz for lesson: Project Structure'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-101
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-101.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: Where does portal.yaml live in a Paradigm project?
|
|
19
|
+
choices:
|
|
20
|
+
A: Inside .paradigm/specs/
|
|
21
|
+
B: Inside .paradigm/ at the top level
|
|
22
|
+
C: At the project root, alongside .paradigm/
|
|
23
|
+
D: Inside each source directory that has protected routes
|
|
24
|
+
E: It does not exist as a file — it is generated at runtime
|
|
25
|
+
correct: C
|
|
26
|
+
explanation: portal.yaml lives at the project root, not inside .paradigm/. This is intentional — as a security-critical file defining gates and protected routes, it should be visible and easy to audit.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: What is navigator.yaml and how is it created?
|
|
29
|
+
choices:
|
|
30
|
+
A: A manually written guide to project conventions
|
|
31
|
+
B: A machine-generated codebase map created by 'paradigm scan'
|
|
32
|
+
C: A configuration file for IDE navigation shortcuts
|
|
33
|
+
D: A list of all npm dependencies and their versions
|
|
34
|
+
E: An auto-generated test coverage report
|
|
35
|
+
correct: B
|
|
36
|
+
explanation: navigator.yaml is generated by running 'paradigm scan'. It maps symbols to file paths and directories to categories, giving AI agents a fast way to locate code without traversing the file system.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: An AI agent wants to check if there are known antipatterns before modifying the payment module. Where should it look?
|
|
39
|
+
choices:
|
|
40
|
+
A: src/payments/.purpose
|
|
41
|
+
B: .paradigm/wisdom/ (via paradigm_wisdom_context)
|
|
42
|
+
C: .paradigm/specs/payments.md
|
|
43
|
+
D: portal.yaml
|
|
44
|
+
E: package.json
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: Team knowledge — including antipatterns, decisions, and preferences — lives in .paradigm/wisdom/. AI agents access it by calling paradigm_wisdom_context with the symbols they plan to modify.
|
|
47
|
+
- id: q4
|
|
48
|
+
question: What does the 'discipline' field in config.yaml control?
|
|
49
|
+
choices:
|
|
50
|
+
A: Which programming language the project uses
|
|
51
|
+
B: How directory patterns map to symbol types (web vs backend vs fullstack)
|
|
52
|
+
C: The maximum number of components allowed per directory
|
|
53
|
+
D: Whether the project uses TypeScript or JavaScript
|
|
54
|
+
E: The deployment target (cloud, on-premise, serverless)
|
|
55
|
+
correct: B
|
|
56
|
+
explanation: The discipline field tells Paradigm how to interpret directory patterns. A 'web' discipline maps routes/ to components, while a 'backend' discipline maps services/ to components. This affects the navigator, logger suggestions, and gate recommendations.
|
|
57
|
+
- id: q5
|
|
58
|
+
question: Which of these files should be written by hand, NOT generated by a tool?
|
|
59
|
+
choices:
|
|
60
|
+
A: navigator.yaml
|
|
61
|
+
B: config.yaml
|
|
62
|
+
C: history/ entries
|
|
63
|
+
D: All of the above are generated
|
|
64
|
+
E: None of the above — all are written by hand
|
|
65
|
+
correct: B
|
|
66
|
+
explanation: config.yaml is a project configuration file written by the team (or initialized by 'paradigm shift' and then customized). navigator.yaml is generated by 'paradigm scan', and history entries are recorded by tools and post-commit hooks.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
id: Q-para-101-purpose-files
|
|
2
|
+
title: 'PARA 101: Foundations — Purpose Files'
|
|
3
|
+
description: 'Quiz for lesson: Purpose Files'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-101
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-101.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: Where should a .purpose file be placed?
|
|
19
|
+
choices:
|
|
20
|
+
A: In the .paradigm/ directory at the project root
|
|
21
|
+
B: In the source directory it describes, alongside the code files
|
|
22
|
+
C: In a dedicated /docs directory
|
|
23
|
+
D: In the project root, one file for the entire project
|
|
24
|
+
E: In the node_modules directory for package documentation
|
|
25
|
+
correct: B
|
|
26
|
+
explanation: Purpose files live in the source directory they describe — right next to the code. The .paradigm/ directory holds project-wide configuration, not directory-level documentation.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: What is the `context` field in a .purpose file used for?
|
|
29
|
+
choices:
|
|
30
|
+
A: Defining application context providers
|
|
31
|
+
B: Specifying environment variables required by the module
|
|
32
|
+
C: Free-text notes aimed at AI agents — conventions, gotchas, assumptions
|
|
33
|
+
D: Listing the test files associated with the directory
|
|
34
|
+
E: Declaring the programming language used in the directory
|
|
35
|
+
correct: C
|
|
36
|
+
explanation: The context field is an array of free-text strings written specifically for AI agents. It conveys things like 'all amounts are in cents', 'this module is deprecated', or 'uses Stripe signatures for webhook verification'.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: How many .purpose files should a single directory contain?
|
|
39
|
+
choices:
|
|
40
|
+
A: Exactly one for every file in the directory
|
|
41
|
+
B: At most one per directory
|
|
42
|
+
C: One per component defined in the directory
|
|
43
|
+
D: At least three — one for components, one for flows, one for gates
|
|
44
|
+
E: None — purpose files are generated automatically
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: Each directory should have at most one .purpose file. All symbols in that directory (components, flows, gates, signals, aspects) are defined within that single file.
|
|
47
|
+
- id: q4
|
|
48
|
+
question: Which field is REQUIRED on every symbol defined in a .purpose file?
|
|
49
|
+
choices:
|
|
50
|
+
A: file
|
|
51
|
+
B: tags
|
|
52
|
+
C: description
|
|
53
|
+
D: version
|
|
54
|
+
E: anchors
|
|
55
|
+
correct: C
|
|
56
|
+
explanation: Every symbol must have a description. Without it, AI agents cannot understand what the symbol represents. The file, tags, and version fields are useful but optional. Anchors are required only for aspects (~).
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
id: Q-para-101-tags-and-classification
|
|
2
|
+
title: 'PARA 101: Foundations — Tags & Classification'
|
|
3
|
+
description: 'Quiz for lesson: Tags & Classification'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-101
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-101.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: How should a Stripe API wrapper be documented in Paradigm?
|
|
19
|
+
choices:
|
|
20
|
+
A: $stripe-service as a flow with Stripe steps
|
|
21
|
+
B: '#stripe-service with tags: [integration, stripe]'
|
|
22
|
+
C: ^stripe-service as a gate that checks Stripe credentials
|
|
23
|
+
D: '!stripe-service as a signal emitted on payment'
|
|
24
|
+
E: ~stripe-service as an aspect that applies Stripe logic across components
|
|
25
|
+
correct: B
|
|
26
|
+
explanation: 'A Stripe API wrapper is a documented code unit, so it is a # component. The integration role is captured by tags: #stripe-service with tags: [integration, stripe]. Tags provide searchable classification without requiring different symbol types.'
|
|
27
|
+
- id: q2
|
|
28
|
+
question: Where are project-specific tags defined?
|
|
29
|
+
choices:
|
|
30
|
+
A: In each .purpose file's tags section
|
|
31
|
+
B: In portal.yaml alongside gate definitions
|
|
32
|
+
C: In .paradigm/tags.yaml under the 'project' section
|
|
33
|
+
D: In package.json under the 'paradigm' key
|
|
34
|
+
E: They are not defined anywhere — any string can be a tag
|
|
35
|
+
correct: C
|
|
36
|
+
explanation: 'Tags are defined in .paradigm/tags.yaml. The file has three sections: core (universal), project (team-specific), and suggested (AI-proposed). Project-specific tags go in the ''project'' section.'
|
|
37
|
+
- id: q3
|
|
38
|
+
question: An AI agent notices that seven components in the codebase handle webhook processing. What should it do?
|
|
39
|
+
choices:
|
|
40
|
+
A: Create a new ~webhook aspect with anchors
|
|
41
|
+
B: Rename all seven components to start with 'webhook-'
|
|
42
|
+
C: Use paradigm_tags_suggest to propose a 'webhook-handler' tag for human review
|
|
43
|
+
D: Add a $webhook-flow connecting all seven components
|
|
44
|
+
E: Ignore the pattern — tags should only be created by humans
|
|
45
|
+
correct: C
|
|
46
|
+
explanation: AI agents can propose new tags using paradigm_tags_suggest. The proposed tag goes into the 'suggested' section of tags.yaml, where a human reviews it and decides whether to promote it to the 'project' section.
|
|
47
|
+
- id: q4
|
|
48
|
+
question: How many tags should a typical symbol have?
|
|
49
|
+
choices:
|
|
50
|
+
A: Exactly one
|
|
51
|
+
B: Two to four
|
|
52
|
+
C: At least five for maximum discoverability
|
|
53
|
+
D: None — tags are optional and rarely used
|
|
54
|
+
E: As many as possible to cover all search terms
|
|
55
|
+
correct: B
|
|
56
|
+
explanation: The guideline is 2-4 tags per symbol. One tag is often too vague to be useful, while five or more creates noise and dilutes searchability. Tags should be chosen for discoverability — the terms you would search for to find the component.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
id: Q-para-101-welcome
|
|
2
|
+
title: 'PARA 101: Foundations — Welcome to Paradigm'
|
|
3
|
+
description: 'Quiz for lesson: Welcome to Paradigm'
|
|
4
|
+
author: paradigm
|
|
5
|
+
created: '2026-04-22'
|
|
6
|
+
updated: '2026-04-22'
|
|
7
|
+
tags:
|
|
8
|
+
- course
|
|
9
|
+
- para-101
|
|
10
|
+
symbols: []
|
|
11
|
+
difficulty: beginner
|
|
12
|
+
passThreshold: 0.7
|
|
13
|
+
category: paradigm-core
|
|
14
|
+
origin: imported
|
|
15
|
+
source: courses/para-101.json
|
|
16
|
+
questions:
|
|
17
|
+
- id: q1
|
|
18
|
+
question: What is Paradigm best described as?
|
|
19
|
+
choices:
|
|
20
|
+
A: A JavaScript component library for building UIs
|
|
21
|
+
B: A code generation tool that scaffolds project boilerplate
|
|
22
|
+
C: A meta-framework that organizes how AI agents understand your codebase
|
|
23
|
+
D: A testing framework with built-in assertion helpers
|
|
24
|
+
E: A deployment pipeline tool for CI/CD
|
|
25
|
+
correct: C
|
|
26
|
+
explanation: Paradigm is a meta-framework — it does not ship runtime code or components. Its purpose is to give AI agents structured context (symbols, purpose files, specifications) so they can navigate and modify codebases efficiently.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: Which of the following is NOT one of Paradigm's three pillars?
|
|
29
|
+
choices:
|
|
30
|
+
A: Symbols
|
|
31
|
+
B: Purpose Files
|
|
32
|
+
C: Specifications
|
|
33
|
+
D: Runtime Middleware
|
|
34
|
+
E: All of the above are pillars
|
|
35
|
+
correct: D
|
|
36
|
+
explanation: Paradigm's three pillars are Symbols (the vocabulary), Purpose Files (the directory maps), and Specifications (the project rulebook). Runtime Middleware is not a Paradigm concept — Paradigm is metadata, not runtime code.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: What problem does Paradigm primarily solve for AI agents?
|
|
39
|
+
choices:
|
|
40
|
+
A: Slow compilation times in large TypeScript projects
|
|
41
|
+
B: Excessive token usage and missed context when navigating undocumented codebases
|
|
42
|
+
C: Lack of type safety in JavaScript applications
|
|
43
|
+
D: Difficulty deploying applications to cloud providers
|
|
44
|
+
E: Missing test coverage in legacy codebases
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: AI agents waste tokens exploring directories, guessing relationships, and re-reading files when a codebase has no structured context. Paradigm provides that structure so agents can find what they need in ~100 tokens instead of 2,000+.
|
|
47
|
+
- id: q4
|
|
48
|
+
question: 'You open a .purpose file and see symbols prefixed with #, $, ^, !, and ~. A new team member asks what the ~ symbol means. What do you tell them?'
|
|
49
|
+
choices:
|
|
50
|
+
A: ~ marks a component — a documented code unit
|
|
51
|
+
B: ~ marks a flow — a multi-step process
|
|
52
|
+
C: ~ marks a gate — a security checkpoint
|
|
53
|
+
D: ~ marks a signal — an event notification
|
|
54
|
+
E: ~ marks an aspect — a cross-cutting rule, constraint, or configuration anchored to specific code
|
|
55
|
+
correct: E
|
|
56
|
+
explanation: 'The five symbols are: # (Component), $ (Flow), ^ (Gate), ! (Signal), and ~ (Aspect). Aspects represent cross-cutting concerns — rules, constraints, and configuration values that are anchored to specific lines of code. They are the only symbol type that requires code anchors.'
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
id: Q-para-201-architecture-review
|
|
2
|
+
title: 'PARA 201: Architecture — Putting It All Together'
|
|
3
|
+
description: 'Quiz for lesson: Putting It All Together'
|
|
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 team invitation feature uses a token to accept invitations. The token was created by an admin. Should the accept action require the ^team-admin gate?
|
|
19
|
+
choices:
|
|
20
|
+
A: Yes — only admins should be able to modify team membership
|
|
21
|
+
B: No — the invitation token itself serves as proof of authorization, so any authenticated user with a valid token should be able to accept
|
|
22
|
+
C: Yes — ^team-admin is always required for team-related operations
|
|
23
|
+
D: No — acceptance actions should be completely public with no gates at all
|
|
24
|
+
E: It depends on whether the token has expired
|
|
25
|
+
correct: B
|
|
26
|
+
explanation: The invitation token itself is the authorization. The admin already approved the invitation by creating it. Any authenticated user who possesses the valid token (received via email) should be able to accept. Requiring ^team-admin would make the feature useless — the invitee is not yet a team member, let alone an admin. The token acts as a delegated authorization from the admin.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: The walkthrough creates four components. Put them in the correct order of the $team-invitation-flow steps.
|
|
29
|
+
choices:
|
|
30
|
+
A: '#invitation-email → #invitation-token → #invitation-store → #invitation-service'
|
|
31
|
+
B: '#invitation-service → #invitation-token → #invitation-store → #invitation-email'
|
|
32
|
+
C: '#invitation-store → #invitation-service → #invitation-email → #invitation-token'
|
|
33
|
+
D: '#invitation-token → #invitation-email → #invitation-service → #invitation-store'
|
|
34
|
+
E: '#invitation-service → #invitation-email → #invitation-token → #invitation-store'
|
|
35
|
+
correct: B
|
|
36
|
+
explanation: 'The flow is: (1) #invitation-service validates and creates, (2) #invitation-token generates the secure token, (3) #invitation-store persists the invitation, (4) #invitation-email sends the email. The service orchestrates, the token is needed before storage, and the email is sent last.'
|
|
37
|
+
- id: q3
|
|
38
|
+
question: The feature building pattern ends with 'validate → implement'. Why does implementation come last?
|
|
39
|
+
choices:
|
|
40
|
+
A: Because Paradigm generates the implementation code automatically
|
|
41
|
+
B: Because implementation is the least important step
|
|
42
|
+
C: Because documenting architecture first ensures security is defined before code, AI agents can navigate immediately, and the team has a clear map
|
|
43
|
+
D: Because .purpose files must be committed before any source files
|
|
44
|
+
E: Because the validator rejects implementations that do not match definitions
|
|
45
|
+
correct: C
|
|
46
|
+
explanation: 'Front-loading documentation has three benefits: (1) security gates are defined in portal.yaml before handler code exists, preventing auth as an afterthought, (2) AI agents can navigate the feature structure immediately, and (3) the team has a validated architectural map before writing any implementation.'
|
|
47
|
+
- id: q4
|
|
48
|
+
question: 'After defining all components for the invitation feature, you run paradigm_ripple on #invitation-service. What is this checking?'
|
|
49
|
+
choices:
|
|
50
|
+
A: Whether the invitation service's code compiles
|
|
51
|
+
B: Whether the service name follows naming conventions
|
|
52
|
+
C: 'What existing code and symbols would be affected by changes to #invitation-service'
|
|
53
|
+
D: Whether the service has enough test coverage
|
|
54
|
+
E: Whether the service's dependencies are installed
|
|
55
|
+
correct: C
|
|
56
|
+
explanation: 'paradigm_ripple analyzes the dependency graph to show what would be impacted if #invitation-service changes. This reveals connections to flows, signals, gates, and other components — helping you understand the blast radius before implementation.'
|
|
57
|
+
- id: q5
|
|
58
|
+
question: 'You notice that ~audit-required applies-to ["#*Service"] and your new #invitation-service matches this pattern. What should you do?'
|
|
59
|
+
choices:
|
|
60
|
+
A: 'Rename #invitation-service to #invitation-handler to avoid the aspect'
|
|
61
|
+
B: Delete the ~audit-required aspect since it is too broad
|
|
62
|
+
C: 'Ensure the audit middleware is applied to #invitation-service and add aspects: ["~audit-required"] to its definition'
|
|
63
|
+
D: Nothing — aspects are enforced automatically by Paradigm
|
|
64
|
+
E: Create a new aspect ~invitation-audit specific to this service
|
|
65
|
+
correct: C
|
|
66
|
+
explanation: 'When a new component matches an existing aspect''s applies-to pattern, you should apply that aspect. This means ensuring the enforcement code (audit middleware) is used by the new service and documenting the relationship by adding aspects: ["~audit-required"] to the component''s .purpose definition.'
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
id: Q-para-201-aspect-graph
|
|
2
|
+
title: 'PARA 201: Architecture — The Aspect Graph'
|
|
3
|
+
description: 'Quiz for lesson: The Aspect Graph'
|
|
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: Your team's rate limiter was recently changed from 100 req/min to 500 req/min, but no one updated the aspect definition. Which tool would catch this?
|
|
19
|
+
choices:
|
|
20
|
+
A: paradigm_aspect_search — it would find the stale value in search results
|
|
21
|
+
B: paradigm_aspect_drift — it compares code hashes at anchor line ranges and detects the change
|
|
22
|
+
C: paradigm_aspect_heatmap — it shows the aspect is no longer being accessed
|
|
23
|
+
D: paradigm_aspect_graph — it reveals the broken edge to the rate limiter component
|
|
24
|
+
E: paradigm_reindex — it automatically updates the aspect value during reindexing
|
|
25
|
+
correct: B
|
|
26
|
+
explanation: paradigm_aspect_drift compares SHA-256 hashes of code at anchored line ranges against the hashes from the last scan. When the rate limiter code changed, the hash changed, flagging the anchor as drifted. The other tools don't detect code changes — reindex rebuilds the graph from YAML, which still has the old value.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: Which aspect category best fits "JWT access tokens expire after 24 hours"?
|
|
29
|
+
choices:
|
|
30
|
+
A: rule — it defines a behavioral pattern that code must follow
|
|
31
|
+
B: decision — it captures an architectural choice
|
|
32
|
+
C: constraint — it is a hard limit that cannot be violated
|
|
33
|
+
D: configuration — it is a value that may differ across environments
|
|
34
|
+
E: invariant — it is a condition that must always hold true
|
|
35
|
+
correct: D
|
|
36
|
+
explanation: A JWT expiry duration is a configuration value — it could reasonably differ between environments (shorter in dev, longer in production). A constraint is a hard limitation (like "maximum 100 items per page"). A rule is a behavioral pattern. Configuration captures what specific value was set and where.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: 'An aspect has edges: [{symbol: "^authenticated", relation: "enforced-by"}]. What does this tell you?'
|
|
39
|
+
choices:
|
|
40
|
+
A: The aspect enforces the ^authenticated gate
|
|
41
|
+
B: The ^authenticated gate depends on the aspect existing
|
|
42
|
+
C: The ^authenticated gate is the mechanism that ensures the aspect holds true
|
|
43
|
+
D: The aspect and the gate are in conflict
|
|
44
|
+
E: The aspect will be removed if the gate is deleted
|
|
45
|
+
correct: C
|
|
46
|
+
explanation: The enforced-by relation means the target symbol is what ensures the aspect's rule holds. Here, the ^authenticated gate is the checkpoint that enforces whatever the aspect defines. Aspects declare what must be true; gates enforce those truths. The edge makes this relationship explicit and queryable.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
id: Q-para-201-aspects-and-anchors
|
|
2
|
+
title: 'PARA 201: Architecture — Aspects & Code Anchors'
|
|
3
|
+
description: 'Quiz for lesson: Aspects & Code Anchors'
|
|
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: Why do aspects require anchors while other symbols do not?
|
|
19
|
+
choices:
|
|
20
|
+
A: Because aspects are more important than other symbols
|
|
21
|
+
B: Because without anchors, an aspect is an unenforced rule — a wish, not a constraint
|
|
22
|
+
C: Because YAML requires at least one nested field under aspects
|
|
23
|
+
D: Because AI agents cannot understand aspects without seeing the code
|
|
24
|
+
E: Because aspects are always defined in middleware files
|
|
25
|
+
correct: B
|
|
26
|
+
explanation: An aspect without anchors is just a statement of intent with no proof of enforcement. Anchors point to the actual code that enforces the rule, making the aspect verifiable by tools, reviewable by developers, and auditable by compliance.
|
|
27
|
+
- id: q2
|
|
28
|
+
question: The anchor `src/middleware/auth.ts:42-78` points to what?
|
|
29
|
+
choices:
|
|
30
|
+
A: Lines 42 and 78 only (two specific lines)
|
|
31
|
+
B: The 42nd through 78th characters on line 1
|
|
32
|
+
C: A range of lines from line 42 to line 78 inclusive
|
|
33
|
+
D: Column 42 through column 78 on every line in the file
|
|
34
|
+
E: The 42nd and 78th functions defined in the file
|
|
35
|
+
correct: C
|
|
36
|
+
explanation: The range format (file:start-end) points to a block of consecutive lines. src/middleware/auth.ts:42-78 covers lines 42 through 78 inclusive — typically a complete function or middleware definition.
|
|
37
|
+
- id: q3
|
|
38
|
+
question: 'You define `~cached` with `applies-to: ["#*-query"]`. You then create `#user-query` without applying the cache aspect. What should happen?'
|
|
39
|
+
choices:
|
|
40
|
+
A: Nothing — applies-to is just a suggestion
|
|
41
|
+
B: 'paradigm_aspect_check reports a coverage gap: #user-query matches the pattern but is not covered'
|
|
42
|
+
C: The build fails because the aspect is not applied
|
|
43
|
+
D: The component is automatically cached by Paradigm
|
|
44
|
+
E: '#user-query is renamed to #user-query-cached'
|
|
45
|
+
correct: B
|
|
46
|
+
explanation: 'The applies-to field is declarative — it says ''this aspect should cover all components matching this pattern.'' When paradigm_aspect_check runs, it identifies #user-query as matching #*-query but not having the caching aspect applied, reporting a coverage gap.'
|
|
47
|
+
- id: q4
|
|
48
|
+
question: After a major refactor, several source files were renamed and moved. What is the risk to aspects?
|
|
49
|
+
choices:
|
|
50
|
+
A: No risk — aspects are tied to symbol names, not file paths
|
|
51
|
+
B: Anchor references break because they point to file paths and line numbers that may no longer exist
|
|
52
|
+
C: The aspect definitions are automatically updated by git
|
|
53
|
+
D: Aspects are deleted when their files move
|
|
54
|
+
E: The refactor cannot proceed if aspects exist
|
|
55
|
+
correct: B
|
|
56
|
+
explanation: Anchors contain file paths and line numbers (e.g., src/middleware/audit.ts:15-35). When files are renamed, moved, or heavily edited, these references break. Running paradigm_aspect_check after refactoring catches this drift.
|