@a-company/paradigm 3.46.0 → 5.4.0
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-ZUWQUHSK.js → accept-orchestration-GX2YRWM4.js} +5 -5
- package/dist/{add-VSPZ6FM4.js → add-FZRKEGH4.js} +1 -1
- package/dist/agent-WERIO2XV.js +523 -0
- package/dist/agent-loader-SJPJJS33.js +36 -0
- package/dist/{agents-suggest-65SER5IS.js → agents-suggest-DNSYJ6IA.js} +1 -1
- package/dist/{aggregate-SV3VGEIL.js → aggregate-H57K7PNV.js} +1 -1
- package/dist/{assess-UHBDYIK7.js → assess-4WVXZLZQ.js} +2 -2
- package/dist/{auto-24ICVUH4.js → auto-QFS5NHQU.js} +1 -1
- package/dist/{beacon-3SJV4DAP.js → beacon-KXZXYQHX.js} +1 -1
- package/dist/{calibration-WWHK73WU.js → calibration-V46G7JTY.js} +2 -2
- package/dist/{check-OLI6AUS6.js → check-OWAIWV23.js} +1 -1
- package/dist/{chunk-RP6TZYGE.js → chunk-2IO7JAG2.js} +1 -1
- package/dist/chunk-2T6BTYBN.js +712 -0
- package/dist/{chunk-CDMAMDSG.js → chunk-5VKJBNJL.js} +13 -5
- package/dist/{chunk-KB4XJWE3.js → chunk-6N3JTACN.js} +98 -437
- package/dist/{chunk-ZMQA6SCO.js → chunk-7HRBT23N.js} +631 -231
- package/dist/chunk-7N7GSU6K.js +34 -0
- package/dist/chunk-A2L4TSLZ.js +526 -0
- package/dist/{chunk-P7XSBJE3.js → chunk-ABVQGRF7.js} +1 -1
- package/dist/{chunk-HIKKOCXY.js → chunk-EI32ZBE6.js} +1 -1
- package/dist/{chunk-QIOCFXDQ.js → chunk-EKGMAM62.js} +1 -1
- package/dist/chunk-EZ3GOCYC.js +132 -0
- package/dist/{chunk-DS5QY37M.js → chunk-GTR2TBIJ.js} +247 -15
- package/dist/chunk-ICSLIPUS.js +1128 -0
- package/dist/{chunk-QDXI2DHR.js → chunk-J2JEQRT3.js} +1 -1
- package/dist/{chunk-AKIMFN6I.js → chunk-JASGXLK3.js} +2 -2
- package/dist/{chunk-J4E6K5MG.js → chunk-LSRABQIY.js} +25 -1
- package/dist/chunk-MCMOGQMU.js +145 -0
- package/dist/{chunk-ZXMDA7VB.js → chunk-PDX44BCA.js} +1 -6
- package/dist/{chunk-2SKXFXIT.js → chunk-S3ORKP3V.js} +10 -15
- package/dist/chunk-TAIJOFOE.js +124 -0
- package/dist/{chunk-FS3WTUHY.js → chunk-TXESEO7Y.js} +6 -6
- package/dist/{chunk-7COU5S2Z.js → chunk-VL67H5IC.js} +1 -1
- package/dist/{chunk-QWA26UNO.js → chunk-WQITYKHM.js} +7 -7
- package/dist/{chunk-MW5DMGBB.js → chunk-YMDLDELF.js} +114 -55
- package/dist/{claude-63ISJAZK.js → claude-FRRWJSTJ.js} +1 -1
- package/dist/{claude-cli-ABML5RHX.js → claude-cli-XJLK2X4L.js} +1 -1
- package/dist/{claude-code-JRLMRPTO.js → claude-code-HTBA4XRB.js} +1 -1
- package/dist/{claude-code-teams-CAJBEFIZ.js → claude-code-teams-T4SP24MD.js} +1 -1
- package/dist/{conductor-HLWYWUVH.js → conductor-PGPDVIVE.js} +1 -1
- package/dist/{config-schema-3YNIFJCJ.js → config-schema-EA4XALGG.js} +4 -2
- package/dist/{constellation-FAGT45TU.js → constellation-A26CCGQS.js} +1 -1
- package/dist/{context-audit-557EO6PK.js → context-audit-RLO3ETRP.js} +8 -5
- package/dist/{cost-XEBADYFT.js → cost-BGM32XJU.js} +1 -1
- package/dist/{cost-UD3WPEKZ.js → cost-VI46A4XL.js} +1 -1
- package/dist/{cursor-cli-QUOOF2N4.js → cursor-cli-JVEZGHWQ.js} +1 -1
- package/dist/{cursorrules-3TKZ4E4R.js → cursorrules-HLIKJJZT.js} +1 -1
- package/dist/decision-loader-WWCLIQPJ.js +20 -0
- package/dist/{delete-RRK4RL6Y.js → delete-KBRPQLPC.js} +2 -2
- package/dist/{diff-IP5CIARP.js → diff-RQLLNAFI.js} +5 -5
- package/dist/{discipline-5F5OVTXB.js → discipline-FA4OZXIS.js} +1 -1
- package/dist/{dist-UXWV4OKX.js → dist-34NA5RS5.js} +1 -1
- package/dist/{dist-5QE2BB2B-X6DYVSUL.js → dist-5QE2BB2B-5S3T6Y3T.js} +1 -1
- package/dist/{dist-CM3MVWWW.js → dist-77JDTVAY.js} +1 -0
- package/dist/{dist-POMVY6WP.js → dist-QK4SQAK7.js} +1 -1
- package/dist/{dist-3RVKEJRT.js → dist-TA6LSC2Q.js} +1 -1
- package/dist/docs-J2BTKRVU.js +155 -0
- package/dist/docs-PBZB7LYP.js +89 -0
- package/dist/{doctor-GKZJU7QG.js → doctor-ULBOHEIC.js} +3 -3
- package/dist/{drift-YGT4LJ7Q.js → drift-R5NRKFHI.js} +1 -1
- package/dist/{echo-A6HD5UP7.js → echo-O2LY7CC2.js} +1 -1
- package/dist/{edit-4CLNN5JG.js → edit-R2HNLMOG.js} +2 -2
- package/dist/event-25OJKDCE.js +31 -0
- package/dist/{export-T7CMMJIB.js → export-IWVL7XLF.js} +1 -1
- package/dist/{flow-UFMPVOEM.js → flow-CRRVV3O3.js} +2 -2
- package/dist/{global-HHUJSBG5.js → global-3NG5JXUB.js} +1 -1
- package/dist/graduate-USAWGBJM.js +160 -0
- package/dist/{graph-YYUXI3F7.js → graph-VHUMAAS6.js} +2 -2
- package/dist/{graph-server-ZPXRSGCW.js → graph-server-YL22VBBN.js} +1 -1
- package/dist/{habits-RG5SVKXP.js → habits-OL5NGPXO.js} +3 -3
- package/dist/{history-CETCSUCP.js → history-WOWC573W.js} +1 -1
- package/dist/{hooks-TCUHQMPF.js → hooks-HFWSCGPV.js} +2 -2
- package/dist/index.js +302 -188
- package/dist/{integrity-MK2OP5TA.js → integrity-IHO4FZTS.js} +1 -1
- package/dist/{integrity-checker-J7YXRTBT.js → integrity-checker-PSKJA5SB.js} +1 -0
- package/dist/journal-loader-5EYSBFFY.js +18 -0
- package/dist/{lint-HYWGS3JJ.js → lint-K6CJGGPH.js} +1 -1
- package/dist/{list-IUCYPGMK.js → list-4YK7QKFF.js} +1 -1
- package/dist/{list-BTLFHSRC.js → list-ENR7Q4CR.js} +2 -2
- package/dist/{lore-loader-VTEEZDX3.js → lore-loader-7NO6N6FT.js} +4 -1
- package/dist/{lore-server-NOOAHKJX.js → lore-server-UNJY5KC3.js} +1 -1
- package/dist/{manual-AFJ2J2V3.js → manual-G6FISID5.js} +1 -1
- package/dist/mcp.js +3917 -356
- package/dist/{migrate-FQVGQNXZ.js → migrate-LS45DNEV.js} +2 -2
- package/dist/{migrate-assessments-JP6Q5KME.js → migrate-assessments-RGH4O6IX.js} +2 -2
- package/dist/nomination-engine-HDWMN4IO.js +42 -0
- package/dist/notebook-YWIYGEHV.js +155 -0
- package/dist/{orchestrate-A226N6FC.js → orchestrate-XZA33TJC.js} +5 -5
- package/dist/{peers-RFQCWVLV.js → peers-DEOUIZM6.js} +1 -1
- package/dist/persona-UHAHIVST.js +390 -0
- package/dist/{pipeline-3G2FRAKM.js → pipeline-L4HCSBGN.js} +1 -1
- package/dist/{platform-server-H7Y6Q7O4.js → platform-server-2D6S6YTK.js} +412 -18
- package/dist/{plugin-update-checker-HMRPGY5Z.js → plugin-update-checker-ELOEEQYS.js} +1 -0
- package/dist/{portal-check-FF5EKZE5.js → portal-check-NPYGII2D.js} +2 -2
- package/dist/{portal-compliance-VU4NIFEN.js → portal-compliance-J7DGAPFX.js} +2 -2
- package/dist/{probe-7JK7IDNI.js → probe-MHL5HQZ2.js} +3 -3
- package/dist/{promote-XO63XMAN.js → promote-F6ZYZZAL.js} +2 -2
- package/dist/{providers-YNFSL6HK.js → providers-GK7PB2OL.js} +2 -2
- package/dist/{quiz-I75NU2QQ.js → quiz-M66SC7F7.js} +1 -1
- package/dist/{record-46CLR4OG.js → record-RA4WR2BO.js} +2 -2
- package/dist/{reindex-WIJMCJ4A.js → reindex-65H4WULU.js} +3 -2
- package/dist/{remember-4EUZKIIB.js → remember-HBWJ655S.js} +1 -1
- package/dist/{retag-KC4JVRLE.js → retag-3OLCVDEQ.js} +2 -2
- package/dist/{review-Q7M4CRB5.js → review-27ATYTD2.js} +2 -2
- package/dist/review-57QMURZV.js +334 -0
- package/dist/{ripple-RI3LOT6R.js → ripple-JPBXP5I3.js} +1 -1
- package/dist/{sentinel-UOIGJWHH.js → sentinel-4XIG4STA.js} +2 -2
- package/dist/{sentinel-bridge-APDXYAZS.js → sentinel-bridge-MDUXTQRL.js} +2 -2
- package/dist/{serve-KKEHE44G.js → serve-EFVRS4GA.js} +2 -2
- package/dist/{serve-22A4XOIG.js → serve-INL7SNBK.js} +2 -2
- package/dist/{serve-2YJ6D2Y6.js → serve-KBSE36PL.js} +4 -4
- package/dist/{server-JV6UFGWZ.js → server-54SKYFFY.js} +2 -2
- package/dist/{server-RDLQ3DK7.js → server-XUOIO7E6.js} +1 -1
- package/dist/{setup-YNZJQLW7.js → setup-EDS27WUR.js} +1 -1
- package/dist/{setup-M2ZKLKNN.js → setup-KO5AFC4K.js} +2 -2
- package/dist/{shift-LNMKFYLR.js → shift-VFG23DLA.js} +16 -16
- package/dist/{show-P7GYO43X.js → show-5PV5KFJE.js} +2 -2
- package/dist/{show-PKZMYKRN.js → show-NQKYX6WQ.js} +1 -1
- package/dist/{snapshot-Y3COXK4T.js → snapshot-BK4RBPCG.js} +1 -1
- package/dist/{spawn-SSXZX45U.js → spawn-AW6GDECS.js} +3 -3
- package/dist/{status-KLHALGW4.js → status-WGIAQODY.js} +1 -1
- package/dist/{summary-5NQNOD3F.js → summary-NIRABMF5.js} +2 -2
- package/dist/{sweep-EZU3GU6S.js → sweep-QMHNSIY5.js} +2 -2
- package/dist/{switch-WYUMVNA5.js → switch-6EJPZDIA.js} +1 -1
- package/dist/{symphony-6K3HD7AW.js → symphony-4OCY36AI.js} +5 -5
- package/dist/{symphony-YCHBYN3E.js → symphony-B75X2MME.js} +2 -2
- package/dist/{symphony-peers-HSY3RI3S.js → symphony-peers-2ZQYLRNI.js} +1 -1
- package/dist/{symphony-peers-APOGJPF4.js → symphony-peers-OL7F6M5S.js} +1 -0
- package/dist/{symphony-relay-GTAJRCVF.js → symphony-relay-UJYUXN65.js} +28 -1
- package/dist/{sync-ZM4Q3R4U.js → sync-VEHUH4OA.js} +3 -3
- package/dist/{sync-llms-JIPP3XX4.js → sync-llms-YHCFIE6X.js} +2 -2
- package/dist/{task-loader-7M2FCBX6.js → task-loader-LDYWQSLM.js} +1 -0
- package/dist/{team-HGLJXWQG.js → team-7HG7XK5C.js} +6 -6
- package/dist/{test-WTR5Q33E.js → test-566CP5KC.js} +1 -1
- package/dist/{thread-3WM7KKID.js → thread-N754I4D5.js} +1 -1
- package/dist/{timeline-ANC7LVDL.js → timeline-M3CICQFE.js} +2 -2
- package/dist/{triage-IZ4MDYNB.js → triage-HHYGT3HY.js} +1 -1
- package/dist/{tutorial-GC6QL4US.js → tutorial-KD22SUNO.js} +1 -1
- package/dist/university-content/courses/.purpose +66 -0
- package/dist/university-content/courses/para-401.json +146 -0
- package/dist/university-content/courses/para-501.json +67 -0
- package/dist/university-content/courses/para-601.json +690 -0
- package/dist/university-content/plsat/.purpose +6 -0
- package/dist/university-content/plsat/v2.0.json +2 -2
- package/dist/university-content/plsat/v3.0.json +563 -3
- package/dist/university-content/reference.json +91 -0
- package/dist/university-ui/assets/{index-tfi5xN4Q.js → index-C6bH_6xu.js} +2 -2
- package/dist/university-ui/assets/{index-tfi5xN4Q.js.map → index-C6bH_6xu.js.map} +1 -1
- package/dist/university-ui/index.html +1 -1
- package/dist/{upgrade-ANX3LVSA.js → upgrade-H5PF32BW.js} +2 -2
- package/dist/{validate-GD5XWILV.js → validate-CNKEKO6A.js} +1 -1
- package/dist/{validate-ITC5D6QG.js → validate-MB5ULIHS.js} +1 -1
- package/dist/{validate-ZVPNN4FL.js → validate-QH3LADM6.js} +1 -1
- package/dist/{watch-X64UK7K4.js → watch-2TKP5PVL.js} +3 -3
- package/dist/{watch-ERBEJUJW.js → watch-ZF4ML6CD.js} +2 -2
- package/dist/{wisdom-L2WC7J62.js → wisdom-AATMGNFA.js} +1 -1
- package/dist/work-log-loader-5L45XNYZ.js +14 -0
- package/dist/{workspace-UIUTHZTD.js → workspace-6E6OSRNU.js} +4 -4
- package/package.json +1 -1
- package/platform-ui/dist/assets/DocsSection-ByAgPzWV.js +1 -0
- package/platform-ui/dist/assets/DocsSection-CjdO6R-u.css +1 -0
- package/platform-ui/dist/assets/{GitSection-BD3Ze06e.js → GitSection-BLovj9yT.js} +1 -1
- package/platform-ui/dist/assets/{GraphSection-SglITfSs.js → GraphSection-C5PCPUFl.js} +1 -1
- package/platform-ui/dist/assets/{LoreSection-bR5Km4Fd.js → LoreSection-BftejTla.js} +1 -1
- package/platform-ui/dist/assets/{SentinelSection-QSpAZArG.js → SentinelSection-CnYcasN7.js} +1 -1
- package/platform-ui/dist/assets/{SymphonySection-CobYJgvg.js → SymphonySection-BpmqCHeK.js} +1 -1
- package/platform-ui/dist/assets/{index-DbxeSMkV.js → index-G9JnWEs_.js} +10 -10
- package/platform-ui/dist/index.html +1 -1
- package/dist/dist-PSF5CP4I.js +0 -7294
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": "3.0",
|
|
3
3
|
"frameworkVersion": "2.0",
|
|
4
4
|
"timeLimit": 5400,
|
|
5
|
-
"totalSlots":
|
|
6
|
-
"passThreshold": 0.
|
|
5
|
+
"totalSlots": 128,
|
|
6
|
+
"passThreshold": 0.9,
|
|
7
7
|
"title": "The PLSAT \u2014 Paradigm Licensure Standardized Assessment Test",
|
|
8
|
-
"description": "99 questions. 90 minutes.
|
|
8
|
+
"description": "99 questions. 90 minutes. 90% to pass. Good luck, scholar.",
|
|
9
9
|
"items": [
|
|
10
10
|
{
|
|
11
11
|
"type": "standalone",
|
|
@@ -2888,6 +2888,566 @@
|
|
|
2888
2888
|
"explanation": "useAgentEffects is the WebSocket→store bridge. It establishes a WebSocket connection to ws://localhost:{port}/ws, listens for messages whose type starts with 'agent:', and dispatches them to agentStore.handleAgentMessage. It also handles auto-reconnect (3s delay on close). useActivityReporter (B) handles the opposite direction — reporting user actions TO the server. AgentToast (D) only renders; it reads from the store but doesn't handle WebSocket."
|
|
2889
2889
|
}
|
|
2890
2890
|
]
|
|
2891
|
+
},
|
|
2892
|
+
{
|
|
2893
|
+
"type": "standalone",
|
|
2894
|
+
"slot": "slot-113",
|
|
2895
|
+
"course": "para-601",
|
|
2896
|
+
"variants": [
|
|
2897
|
+
{
|
|
2898
|
+
"id": "plsat-113",
|
|
2899
|
+
"scenario": "A builder agent finishes implementing a new REST endpoint. It modified 4 files, resolved 1 blocker, and the tests pass. The agent needs to record this somewhere in the knowledge streams.",
|
|
2900
|
+
"question": "Which knowledge stream is the correct destination for this entry?",
|
|
2901
|
+
"choices": {
|
|
2902
|
+
"A": "Learning Journal — the agent learned how to build the endpoint",
|
|
2903
|
+
"B": "Team Decision — the team decided to add an endpoint",
|
|
2904
|
+
"C": "Work Log — it records what got done, files modified, outcome, and next steps",
|
|
2905
|
+
"D": "Event Stream — it is an event that happened during work",
|
|
2906
|
+
"E": "Lore — all project history goes into lore entries"
|
|
2907
|
+
},
|
|
2908
|
+
"correct": "C",
|
|
2909
|
+
"explanation": "The Work Log stream answers 'what got done.' It captures the agent, summary, files_modified, symbols_touched, outcome (pass/fail/partial/blocked), and next_steps. It is project-scoped and ephemeral — designed for sprint boards and standup summaries. The Learning Journal is for personal insights the agent gains, not task completion. Team Decisions record rationale and alternatives for institutional choices."
|
|
2910
|
+
},
|
|
2911
|
+
{
|
|
2912
|
+
"id": "plsat-113b",
|
|
2913
|
+
"scenario": "An agent spent 45 minutes debugging a flaky test in the CI pipeline. It turned out to be a race condition in the database setup. The agent fixed it, and the test suite passes now. The agent wants to log this work.",
|
|
2914
|
+
"question": "Which knowledge stream should this entry go into?",
|
|
2915
|
+
"choices": {
|
|
2916
|
+
"A": "Team Decision — the team needs to know about flaky tests",
|
|
2917
|
+
"B": "Work Log — it captures what was done, duration, outcome, and what was fixed",
|
|
2918
|
+
"C": "Learning Journal — the agent discovered a race condition pattern",
|
|
2919
|
+
"D": "Event Stream — file-modified events are emitted automatically",
|
|
2920
|
+
"E": "Both Work Log and Learning Journal equally — there is no distinction"
|
|
2921
|
+
},
|
|
2922
|
+
"correct": "B",
|
|
2923
|
+
"explanation": "The Work Log is the correct primary destination — it records what got done (fixed flaky test), the outcome (pass), duration (45 min), and files modified. The agent might also record a Learning Journal entry about the race condition pattern it discovered, but the work itself belongs in the Work Log. These are separate entries in separate streams — the journal entry would link back to the work log via linked_work_log."
|
|
2924
|
+
}
|
|
2925
|
+
]
|
|
2926
|
+
},
|
|
2927
|
+
{
|
|
2928
|
+
"type": "standalone",
|
|
2929
|
+
"slot": "slot-114",
|
|
2930
|
+
"course": "para-601",
|
|
2931
|
+
"variants": [
|
|
2932
|
+
{
|
|
2933
|
+
"id": "plsat-114",
|
|
2934
|
+
"scenario": "During a code review, the architect agent points out that the builder's approach to token refresh will cause a race condition under concurrent requests. The builder realizes its mental model of the refresh flow was wrong and adjusts its confidence from 0.8 to 0.5 on `#token-refresh`.",
|
|
2935
|
+
"question": "Which knowledge stream captures this learning moment?",
|
|
2936
|
+
"choices": {
|
|
2937
|
+
"A": "Work Log — the builder did work (reviewed code)",
|
|
2938
|
+
"B": "Team Decision — the team decided to change the approach",
|
|
2939
|
+
"C": "Learning Journal — the builder received a correction and adjusted its confidence, which is a personal learning event",
|
|
2940
|
+
"D": "Event Stream — the correction is a 'compliance-violation' event",
|
|
2941
|
+
"E": "Work Log with outcome 'fail' — the original approach failed review"
|
|
2942
|
+
},
|
|
2943
|
+
"correct": "C",
|
|
2944
|
+
"explanation": "The Learning Journal captures 'what I learned.' The trigger is 'correction_received', the insight is the corrected mental model, confidence_before is 0.8, confidence_after is 0.5, and the entry is agent-private (stored in ~/.paradigm/agents/{id}/journal/). It may or may not be transferable to other projects. The Work Log would separately record the review activity, but the learning itself belongs in the journal."
|
|
2945
|
+
},
|
|
2946
|
+
{
|
|
2947
|
+
"id": "plsat-114b",
|
|
2948
|
+
"scenario": "A security agent reviewed an authentication module and predicted with 0.9 confidence that the session handling was secure. A penetration test later revealed a session fixation vulnerability. The security agent needs to record this calibration miss.",
|
|
2949
|
+
"question": "Which knowledge stream is appropriate for this entry?",
|
|
2950
|
+
"choices": {
|
|
2951
|
+
"A": "Team Decision — the team needs to decide how to fix the vulnerability",
|
|
2952
|
+
"B": "Work Log — the penetration test results are work output",
|
|
2953
|
+
"C": "Event Stream — emit an 'error-encountered' event",
|
|
2954
|
+
"D": "Learning Journal — the agent had a confidence miss and needs to record the corrected understanding",
|
|
2955
|
+
"E": "Both Work Log and Team Decision — the journal is only for minor insights"
|
|
2956
|
+
},
|
|
2957
|
+
"correct": "D",
|
|
2958
|
+
"explanation": "The Learning Journal is the right stream for calibration misses. The trigger is 'confidence_miss', with confidence_before: 0.9 and confidence_after adjusted downward. The journal is agent-private, stored in ~/.paradigm/agents/{id}/journal/, and travels with the agent across projects if marked transferable. A separate Team Decision might record the fix approach, but the personal calibration adjustment belongs in the journal."
|
|
2959
|
+
}
|
|
2960
|
+
]
|
|
2961
|
+
},
|
|
2962
|
+
{
|
|
2963
|
+
"type": "standalone",
|
|
2964
|
+
"slot": "slot-115",
|
|
2965
|
+
"course": "para-601",
|
|
2966
|
+
"variants": [
|
|
2967
|
+
{
|
|
2968
|
+
"id": "plsat-115",
|
|
2969
|
+
"scenario": "The team holds a design discussion about whether to use WebSockets or Server-Sent Events for real-time updates. The architect proposes WebSockets, the builder supports it, and the reviewer dissents (preferring SSE for simplicity). They go with WebSockets. The rationale and alternatives need to be preserved.",
|
|
2970
|
+
"question": "Which knowledge stream captures this?",
|
|
2971
|
+
"choices": {
|
|
2972
|
+
"A": "Work Log — a design discussion is work",
|
|
2973
|
+
"B": "Learning Journal — everyone learned something from the debate",
|
|
2974
|
+
"C": "Team Decision — it records the choice, rationale, participants with stances, and alternatives considered",
|
|
2975
|
+
"D": "Event Stream — emit a 'decision-made' event and the stream captures it",
|
|
2976
|
+
"E": "Lore entry with type 'decision' — the legacy system handles decisions"
|
|
2977
|
+
},
|
|
2978
|
+
"correct": "C",
|
|
2979
|
+
"explanation": "Team Decisions capture institutional memory: the title, decision text, rationale, participants (with stances like 'proposed', 'supported', 'dissented'), alternatives_considered (with rejected_because), and affected symbols. They are project-scoped and long-lived (status: active/superseded/deprecated). The event stream might emit a 'decision-made' event, but that is a notification — the decision record itself lives in the Team Decisions stream at .paradigm/decisions/."
|
|
2980
|
+
},
|
|
2981
|
+
{
|
|
2982
|
+
"id": "plsat-115b",
|
|
2983
|
+
"scenario": "After a production incident, the team decides to add rate limiting to all public API endpoints. The security agent proposed it, the architect supported it, and the builder abstained. They considered IP-based limiting vs token-bucket and chose token-bucket. This needs to be recorded for future reference.",
|
|
2984
|
+
"question": "Which knowledge stream should hold this record?",
|
|
2985
|
+
"choices": {
|
|
2986
|
+
"A": "Work Log — an incident response is work that was done",
|
|
2987
|
+
"B": "Team Decision — it preserves the choice, who participated, their stances, and why token-bucket was chosen over IP-based",
|
|
2988
|
+
"C": "Learning Journal — the team learned from the incident",
|
|
2989
|
+
"D": "All three streams equally — incidents generate entries everywhere",
|
|
2990
|
+
"E": "Event Stream — the decision is an event type 'decision-made'"
|
|
2991
|
+
},
|
|
2992
|
+
"correct": "B",
|
|
2993
|
+
"explanation": "Team Decisions are the institutional record for choices like this. The entry includes participants (security: proposed, architect: supported, builder: abstained), alternatives_considered (IP-based: rejected because it fails behind proxies), symbols_affected (#rate-limiter, #api-gateway), and status: active. The incident itself might generate work log entries and journal entries, but the decision about the approach belongs in the Team Decisions stream."
|
|
2994
|
+
}
|
|
2995
|
+
]
|
|
2996
|
+
},
|
|
2997
|
+
{
|
|
2998
|
+
"type": "standalone",
|
|
2999
|
+
"slot": "slot-116",
|
|
3000
|
+
"course": "para-601",
|
|
3001
|
+
"variants": [
|
|
3002
|
+
{
|
|
3003
|
+
"id": "plsat-116",
|
|
3004
|
+
"scenario": "A security agent has attention patterns configured as: symbols: ['^*', '#*-auth', '#*-middleware'], paths: ['auth/**', 'middleware/**'], concepts: ['permission', 'JWT', 'RBAC'], signals: [{ type: 'gate-added' }, { type: 'route-created' }], threshold: 0.4. A new event arrives: type: 'file-modified', path: 'src/utils/date-formatter.ts', symbols: ['#date-formatter'], keywords: ['formatting', 'locale'].",
|
|
3005
|
+
"question": "Will the security agent self-nominate for this event?",
|
|
3006
|
+
"choices": {
|
|
3007
|
+
"A": "Yes — the agent's threshold is low (0.4), so it nominates for most events",
|
|
3008
|
+
"B": "No — the symbol '#date-formatter' does not match '^*', '#*-auth', or '#*-middleware'; the path 'src/utils/' does not match 'auth/**' or 'middleware/**'; the keywords have no concept overlap; and no signal matches. All four scores are 0, which is below 0.4",
|
|
3009
|
+
"C": "Yes — '#date-formatter' matches '#*' because * is a wildcard for any suffix",
|
|
3010
|
+
"D": "No — the agent only responds to signals, not file modifications",
|
|
3011
|
+
"E": "Yes — every agent nominates for every event to ensure nothing is missed"
|
|
3012
|
+
},
|
|
3013
|
+
"correct": "B",
|
|
3014
|
+
"explanation": "Attention scoring evaluates four dimensions: symbolMatch (does '#date-formatter' match '^*', '#*-auth', or '#*-middleware'? No — it would need to end with '-auth' or '-middleware'), pathMatch ('src/utils/date-formatter.ts' doesn't match 'auth/**' or 'middleware/**'), conceptMatch (no overlap between ['formatting', 'locale'] and ['permission', 'JWT', 'RBAC']), and signalMatch (event type 'file-modified' is not 'gate-added' or 'route-created'). The final score is max(0, 0, 0, 0) = 0, which is below the 0.4 threshold."
|
|
3015
|
+
},
|
|
3016
|
+
{
|
|
3017
|
+
"id": "plsat-116b",
|
|
3018
|
+
"scenario": "A tester agent has attention patterns: paths: ['**/*.test.*', '**/*.spec.*'], concepts: ['test', 'coverage', 'assertion'], signals: [{ type: 'error-encountered' }], threshold: 0.5. An event arrives: type: 'file-modified', path: 'src/services/payment.ts', symbols: ['#payment-service'], keywords: ['refactor', 'extract method'].",
|
|
3019
|
+
"question": "Will the tester agent self-nominate?",
|
|
3020
|
+
"choices": {
|
|
3021
|
+
"A": "Yes — any file modification could break tests, so the tester is always relevant",
|
|
3022
|
+
"B": "Yes — the threshold of 0.5 is met because 'refactor' is similar to 'test'",
|
|
3023
|
+
"C": "No — the path does not match '**/*.test.*' or '**/*.spec.*', no concept overlap ('refactor' and 'extract method' do not match 'test', 'coverage', or 'assertion'), and the event type 'file-modified' is not 'error-encountered'. Score is 0",
|
|
3024
|
+
"D": "No — tester agents can only observe test files, not source files",
|
|
3025
|
+
"E": "Yes — '#payment-service' triggers the tester because payments need testing"
|
|
3026
|
+
},
|
|
3027
|
+
"correct": "C",
|
|
3028
|
+
"explanation": "The tester's attention has no symbol patterns, so symbolMatch is 0. The path 'src/services/payment.ts' doesn't match '**/*.test.*' or '**/*.spec.*', so pathMatch is 0. The keywords ['refactor', 'extract method'] have no overlap with ['test', 'coverage', 'assertion'], so conceptMatch is 0. The event type 'file-modified' is not 'error-encountered', so signalMatch is 0. Final score: max(0, 0, 0, 0) = 0, below the 0.5 threshold."
|
|
3029
|
+
}
|
|
3030
|
+
]
|
|
3031
|
+
},
|
|
3032
|
+
{
|
|
3033
|
+
"type": "standalone",
|
|
3034
|
+
"slot": "slot-117",
|
|
3035
|
+
"course": "para-601",
|
|
3036
|
+
"variants": [
|
|
3037
|
+
{
|
|
3038
|
+
"id": "plsat-117",
|
|
3039
|
+
"scenario": "An architect agent has attention: symbols: ['$*', '#*'], concepts: ['architecture', 'design', 'pattern'], threshold: 0.5. An event arrives: type: 'flow-modified', symbols: ['$checkout-flow', '#cart-service'], keywords: ['added step', 'validation'], context: 'New payment validation step added to checkout flow'.",
|
|
3040
|
+
"question": "Will the architect self-nominate, and what is the approximate attention score?",
|
|
3041
|
+
"choices": {
|
|
3042
|
+
"A": "No — the architect only cares about design documents, not flow changes",
|
|
3043
|
+
"B": "Yes — '$checkout-flow' matches '$*' giving symbolMatch=1.0, and the score exceeds the 0.5 threshold",
|
|
3044
|
+
"C": "Yes — but only because the keyword 'validation' triggers a concept match",
|
|
3045
|
+
"D": "No — the threshold of 0.5 requires at least two dimensions to match",
|
|
3046
|
+
"E": "Yes — every event with symbols triggers every agent that has symbol patterns"
|
|
3047
|
+
},
|
|
3048
|
+
"correct": "B",
|
|
3049
|
+
"explanation": "The architect's symbol pattern '$*' matches '$checkout-flow' (any symbol starting with $), giving symbolMatch=1.0. Additionally '#*' matches '#cart-service' (already capped at 1.0). The final score is max(symbolMatch, pathMatch, conceptMatch, signalMatch) = max(1.0, 0, partial, 0) = 1.0, well above the 0.5 threshold. The agent will self-nominate. Note that conceptMatch might also contribute ('pattern' could partial-match against context), but symbolMatch alone is sufficient."
|
|
3050
|
+
},
|
|
3051
|
+
{
|
|
3052
|
+
"id": "plsat-117b",
|
|
3053
|
+
"scenario": "A reviewer agent has attention: concepts: ['code quality', 'bug', 'smell', 'convention'], threshold: 0.6. An event arrives: type: 'error-encountered', keywords: ['null pointer', 'uncaught exception', 'bug'], context: 'TypeError: Cannot read properties of undefined in auth middleware', severity: 'error'.",
|
|
3054
|
+
"question": "Will the reviewer self-nominate?",
|
|
3055
|
+
"choices": {
|
|
3056
|
+
"A": "No — the reviewer has no symbol or path patterns, so it cannot score above 0",
|
|
3057
|
+
"B": "No — 'error-encountered' events are only for tester agents",
|
|
3058
|
+
"C": "Yes — the keyword 'bug' matches the concept 'bug', giving conceptMatch of at least 0.25 (1 of 4 concepts). Since max score uses the highest dimension, this gives 0.25 which is below 0.6, so actually no",
|
|
3059
|
+
"D": "Yes — 'bug' matches concept 'bug' (1/4 = 0.25 conceptMatch), but the score is max(0, 0, 0.25, 0) = 0.25, which is below the 0.6 threshold, so the agent stays quiet",
|
|
3060
|
+
"E": "Yes — the severity 'error' automatically forces all agents to nominate"
|
|
3061
|
+
},
|
|
3062
|
+
"correct": "D",
|
|
3063
|
+
"explanation": "The reviewer has no symbol patterns (symbolMatch=0), no path patterns (pathMatch=0), and no signal patterns (signalMatch=0). For concepts, 'bug' matches 1 of 4 concepts, giving conceptMatch = 1/4 = 0.25. The final score is max(0, 0, 0.25, 0) = 0.25, which is below the 0.6 threshold. The agent's quietReason would be 'below-threshold'. Severity does not override the attention threshold — agents only speak when their specific attention patterns fire strongly enough."
|
|
3064
|
+
}
|
|
3065
|
+
]
|
|
3066
|
+
},
|
|
3067
|
+
{
|
|
3068
|
+
"type": "standalone",
|
|
3069
|
+
"slot": "slot-118",
|
|
3070
|
+
"course": "para-601",
|
|
3071
|
+
"variants": [
|
|
3072
|
+
{
|
|
3073
|
+
"id": "plsat-118",
|
|
3074
|
+
"scenario": "A learning journal entry contains: insight: 'When JWT tokens use RS256 with the PAYMENTS_SIGNING_KEY, rotation requires coordinating across 3 services.' The data policy has learning_journal ring: 'user-scoped' with redaction patterns: [{ pattern: '\\\\b[A-Z_]{2,}_KEY\\\\b' }, { pattern: 'password|secret|token' }].",
|
|
3075
|
+
"question": "Which trust ring does the learning journal belong to, and what happens to the content?",
|
|
3076
|
+
"choices": {
|
|
3077
|
+
"A": "Ring 1 (project-locked) — journals never leave the project",
|
|
3078
|
+
"B": "Ring 2 (user-scoped) — the journal travels across the user's projects, but 'PAYMENTS_SIGNING_KEY' is redacted by the [A-Z_]{2,}_KEY pattern and 'token' is redacted by the password|secret|token pattern",
|
|
3079
|
+
"C": "Ring 3 (creator-upstream) — journal insights flow to agent creators anonymized",
|
|
3080
|
+
"D": "Ring 2 (user-scoped) — but no redaction occurs because journals are already private",
|
|
3081
|
+
"E": "Ring 4 (network-public) — aggregated learning patterns are shared publicly"
|
|
3082
|
+
},
|
|
3083
|
+
"correct": "B",
|
|
3084
|
+
"explanation": "The learning journal's ring is 'user-scoped' (Ring 2), meaning it travels across the user's own projects but never beyond. The data policy's redaction patterns are applied at the 'journal-recording' enforcement boundary. The regex '\\b[A-Z_]{2,}_KEY\\b' matches 'PAYMENTS_SIGNING_KEY', and 'password|secret|token' matches 'token' in 'JWT tokens'. Both are redacted before storage. Trust rings are concentric — data classified as Ring 2 can be read in Ring 1 (project) and Ring 2 (user) contexts, but never reaches Ring 3 (upstream) or Ring 4 (network)."
|
|
3085
|
+
},
|
|
3086
|
+
{
|
|
3087
|
+
"id": "plsat-118b",
|
|
3088
|
+
"scenario": "A work log entry records: summary: 'Fixed database connection pooling for the POSTGRES_SECRET_URL endpoint, updated #db-pool configuration.' The data policy has work_log ring: 'project-locked' with deny_content: ['code_snippets', 'file_contents', 'diff_content'] and no redaction patterns.",
|
|
3089
|
+
"question": "What trust ring contains this work log, and is the content filtered?",
|
|
3090
|
+
"choices": {
|
|
3091
|
+
"A": "Ring 1 (project-locked) — the content stays in the project; deny_content blocks code snippets but the summary text is allowed because 'file_paths' and 'symbol_names' are in allow_content",
|
|
3092
|
+
"B": "Ring 2 (user-scoped) — work logs travel with the user across projects",
|
|
3093
|
+
"C": "Ring 1 (project-locked) — but 'POSTGRES_SECRET_URL' should be redacted",
|
|
3094
|
+
"D": "Ring 1 (project-locked) — the entire entry is blocked because it mentions a secret URL",
|
|
3095
|
+
"E": "Ring 3 (creator-upstream) — work logs are feedback for agent creators"
|
|
3096
|
+
},
|
|
3097
|
+
"correct": "A",
|
|
3098
|
+
"explanation": "Work logs default to Ring 1 (project-locked) — they never leave the project. The allow_content list includes 'file_paths', 'symbol_names', and 'outcome', so the summary mentioning '#db-pool' and describing the fix is fine. The deny_content blocks 'code_snippets', 'file_contents', and 'diff_content', but a summary paragraph is not a code snippet. Note that 'POSTGRES_SECRET_URL' is not redacted because the work_log stream has no redaction patterns in the default policy — it relies on project-locked ring containment instead."
|
|
3099
|
+
}
|
|
3100
|
+
]
|
|
3101
|
+
},
|
|
3102
|
+
{
|
|
3103
|
+
"type": "standalone",
|
|
3104
|
+
"slot": "slot-119",
|
|
3105
|
+
"course": "para-601",
|
|
3106
|
+
"variants": [
|
|
3107
|
+
{
|
|
3108
|
+
"id": "plsat-119",
|
|
3109
|
+
"scenario": "A project's CLAUDE.md has grown to 850 lines. It includes: the symbol table (5 symbols), commit conventions, agent onboarding steps, a 200-line logging guide with directory mapping tables, a 150-line portal protocol specification, and 100 lines of MCP workflow details. The team wants to reduce base context cost.",
|
|
3110
|
+
"question": "Using Paradigm's guidance resource model, what should stay inline in CLAUDE.md and what should move?",
|
|
3111
|
+
"choices": {
|
|
3112
|
+
"A": "Everything stays in CLAUDE.md — agents need all context upfront to avoid errors",
|
|
3113
|
+
"B": "Move everything to guidance resources — CLAUDE.md should only have the project name",
|
|
3114
|
+
"C": "The symbol table, commit conventions, and agent onboarding steps stay inline (~150 lines). The logging guide, portal protocol, and MCP workflow move to on-demand guidance resources (paradigm://guidance/logging, paradigm://guidance/portal, paradigm://guidance/mcp-workflow)",
|
|
3115
|
+
"D": "Only the symbol table stays inline. Everything else, including commit conventions, moves to guidance resources",
|
|
3116
|
+
"E": "Keep the logging guide inline (agents need it every session) and move everything else to guidance"
|
|
3117
|
+
},
|
|
3118
|
+
"correct": "C",
|
|
3119
|
+
"explanation": "Paradigm's guidance resource model splits CLAUDE.md into two tiers: (1) always-loaded base context (~150 lines) containing the symbol system, conventions, and onboarding steps that every session needs, and (2) on-demand guidance resources loaded via MCP resource URIs only when relevant. The logging guide, portal protocol, and MCP workflow are reference material — an agent building a React component doesn't need the portal spec. Moving them to paradigm://guidance/* reduces base context from ~850 to ~150 lines while keeping all guidance one tool call away."
|
|
3120
|
+
},
|
|
3121
|
+
{
|
|
3122
|
+
"id": "plsat-119b",
|
|
3123
|
+
"scenario": "A developer notices that their CLAUDE.md includes a detailed multi-agent orchestration section (120 lines), a flow-first development guide (80 lines), a workspace configuration reference (60 lines), and the core symbol system with conventions (100 lines). They want to follow Paradigm's context efficiency pattern.",
|
|
3124
|
+
"question": "What is the correct split between inline CLAUDE.md and on-demand guidance?",
|
|
3125
|
+
"choices": {
|
|
3126
|
+
"A": "Keep everything — 360 lines is acceptable for CLAUDE.md",
|
|
3127
|
+
"B": "The core symbol system and conventions stay inline. Orchestration, flow-first, and workspace references become guidance resources loaded via paradigm://guidance/orchestration, paradigm://guidance/flows, and paradigm://guidance/workspaces",
|
|
3128
|
+
"C": "Move everything to guidance resources and leave CLAUDE.md empty",
|
|
3129
|
+
"D": "Keep orchestration inline because multi-agent work is common; move only workspaces",
|
|
3130
|
+
"E": "Split each section in half — keep summaries inline, details in guidance"
|
|
3131
|
+
},
|
|
3132
|
+
"correct": "B",
|
|
3133
|
+
"explanation": "The core symbol system (# $ ^ ! ~) and project conventions are needed in every session — they stay inline. Orchestration, flow-first development, and workspace configuration are situational: you only need orchestration when running multi-agent tasks, flows when documenting a complex process, and workspaces when working across projects. These become on-demand resources. The CLAUDE.md even includes a resource table mapping topics to URIs so agents know what is available without loading the full content."
|
|
3134
|
+
}
|
|
3135
|
+
]
|
|
3136
|
+
},
|
|
3137
|
+
{
|
|
3138
|
+
"type": "standalone",
|
|
3139
|
+
"slot": "slot-120",
|
|
3140
|
+
"course": "para-601",
|
|
3141
|
+
"variants": [
|
|
3142
|
+
{
|
|
3143
|
+
"id": "plsat-120",
|
|
3144
|
+
"scenario": "A builder agent modifies `src/auth/jwt-verify.ts` and adds a new gate `^token-valid`. The event stream emits: type: 'gate-added', source: 'post-write-hook', symbols: ['^token-valid', '#jwt-verify'], path: 'src/auth/jwt-verify.ts', keywords: ['JWT', 'validation', 'gate', 'authentication']. A security agent has attention: symbols: ['^*', '#*-auth', '#*-middleware'], concepts: ['permission', 'JWT', 'RBAC'], signals: [{ type: 'gate-added' }], threshold: 0.4.",
|
|
3145
|
+
"question": "What urgency level should the security agent's nomination use?",
|
|
3146
|
+
"choices": {
|
|
3147
|
+
"A": "Low — gate additions are routine maintenance",
|
|
3148
|
+
"B": "Medium — any security-related change warrants moderate urgency",
|
|
3149
|
+
"C": "High or Critical — a new gate in the auth layer is a security-sensitive change; the agent's nomination.speak_when.urgency likely includes 'gate_missing' and 'security_risk', and the signal match on 'gate-added' directly triggers the security review pattern",
|
|
3150
|
+
"D": "The urgency is always 'medium' unless the event severity is 'critical'",
|
|
3151
|
+
"E": "No nomination — the security agent only reviews when asked directly"
|
|
3152
|
+
},
|
|
3153
|
+
"correct": "C",
|
|
3154
|
+
"explanation": "The security agent's attention fires on three dimensions simultaneously: symbolMatch ('^token-valid' matches '^*'), conceptMatch ('JWT' and 'authentication' match concepts), and signalMatch ('gate-added' matches a signal). With a threshold of 0.4 and a score of 1.0, the agent clearly self-nominates. For urgency, gate additions in authentication code are security-sensitive changes — the nomination.speak_when.urgency array typically includes 'gate_missing' and 'security_risk'. A new gate needs review to verify it is correctly implemented and not bypassed."
|
|
3155
|
+
},
|
|
3156
|
+
{
|
|
3157
|
+
"id": "plsat-120b",
|
|
3158
|
+
"scenario": "A builder agent updates a CSS file: type: 'file-modified', path: 'src/styles/button.css', symbols: ['#button-styles'], keywords: ['padding', 'border-radius', 'color']. A security agent has attention: symbols: ['^*', '#*-auth'], paths: ['auth/**', 'middleware/**'], concepts: ['permission', 'JWT'], signals: [{ type: 'gate-added' }], threshold: 0.4.",
|
|
3159
|
+
"question": "What happens with the security agent's nomination for this event?",
|
|
3160
|
+
"choices": {
|
|
3161
|
+
"A": "The security agent nominates with urgency 'low' — all changes get reviewed",
|
|
3162
|
+
"B": "The security agent does not nominate — score is 0 across all dimensions (no symbol match, path is not auth/middleware, no concept overlap, no signal match), and quietReason is 'below-threshold'",
|
|
3163
|
+
"C": "The security agent nominates because the low threshold (0.4) catches most events",
|
|
3164
|
+
"D": "The security agent nominates with urgency 'medium' — CSS could affect security UI",
|
|
3165
|
+
"E": "The security agent defers — it waits to see if other agents nominate first"
|
|
3166
|
+
},
|
|
3167
|
+
"correct": "B",
|
|
3168
|
+
"explanation": "The security agent's attention patterns produce zero matches: '#button-styles' does not match '^*' or '#*-auth'; 'src/styles/button.css' does not match 'auth/**' or 'middleware/**'; ['padding', 'border-radius', 'color'] have no overlap with ['permission', 'JWT']; and event type 'file-modified' is not 'gate-added'. The score is max(0, 0, 0, 0) = 0, far below the 0.4 threshold. The agent stays quiet with quietReason: 'below-threshold'. A low threshold does not mean the agent nominates for everything — it means the agent is more sensitive to weak matches in its attention domain."
|
|
3169
|
+
}
|
|
3170
|
+
]
|
|
3171
|
+
},
|
|
3172
|
+
{
|
|
3173
|
+
"type": "standalone",
|
|
3174
|
+
"slot": "slot-121",
|
|
3175
|
+
"course": "para-601",
|
|
3176
|
+
"variants": [
|
|
3177
|
+
{
|
|
3178
|
+
"id": "plsat-121",
|
|
3179
|
+
"scenario": "A security agent nominates with urgency 'critical' after detecting a missing gate on a payment endpoint. At the same time, a reviewer agent nominates with urgency 'low' about a variable naming convention issue in the same file. Both nominations target overlapping symbols.",
|
|
3180
|
+
"question": "How should the urgency levels affect surfacing to the human?",
|
|
3181
|
+
"choices": {
|
|
3182
|
+
"A": "Both are shown equally — urgency is just metadata with no behavioral effect",
|
|
3183
|
+
"B": "Only the critical nomination is shown — low urgency nominations are always suppressed",
|
|
3184
|
+
"C": "The critical nomination is surfaced immediately; the low urgency nomination may be batched or deferred based on the SurfacingConfig's min_urgency setting for the reviewer agent",
|
|
3185
|
+
"D": "They are merged into a single nomination with urgency 'high' (the average)",
|
|
3186
|
+
"E": "The reviewer's nomination is upgraded to 'critical' because it touches the same symbols"
|
|
3187
|
+
},
|
|
3188
|
+
"correct": "C",
|
|
3189
|
+
"explanation": "SurfacingConfig controls how nominations reach the human. Each agent can have a min_urgency setting — if the reviewer's SurfacingPreference has min_urgency: 'medium', the 'low' urgency naming convention issue would be batched or suppressed until the human is less busy. The security agent's 'critical' nomination exceeds any reasonable min_urgency threshold and is surfaced immediately. Nominations are not merged or averaged — they are independent contributions that may be grouped as a 'complementary' Debate if they touch overlapping symbols."
|
|
3190
|
+
},
|
|
3191
|
+
{
|
|
3192
|
+
"id": "plsat-121b",
|
|
3193
|
+
"scenario": "An event fires: type: 'route-created' for a new `/api/admin/users` endpoint. The security agent nominates with urgency 'high' (missing gate review). The architect agent nominates with urgency 'medium' (suggesting a different URL structure). The builder agent scores below threshold and stays quiet.",
|
|
3194
|
+
"question": "What nomination urgency behavior is correct here?",
|
|
3195
|
+
"choices": {
|
|
3196
|
+
"A": "The architect's nomination is suppressed because the security agent already nominated",
|
|
3197
|
+
"B": "Both nominations surface: security at 'high' urgency (shows first) and architect at 'medium' urgency. They may be grouped into a Debate because they target the same route symbol. The builder's quietReason is 'below-threshold'",
|
|
3198
|
+
"C": "All three agents must nominate — staying quiet is not an option",
|
|
3199
|
+
"D": "The urgency levels are recalculated based on the number of agents that nominate",
|
|
3200
|
+
"E": "Only the highest urgency nomination surfaces; others are queued for later"
|
|
3201
|
+
},
|
|
3202
|
+
"correct": "B",
|
|
3203
|
+
"explanation": "Each agent independently scores the event and decides whether to nominate. The security and architect agents exceeded their thresholds and nominated with different urgency levels. Both are surfaced (high shows before medium in priority order). Because they target the same route/symbols, the system may group them as a Debate (type: 'complementary' since they address different concerns). The builder agent scored below its threshold and stays quiet with quietReason: 'below-threshold' — this is correct behavior, not a failure."
|
|
3204
|
+
}
|
|
3205
|
+
]
|
|
3206
|
+
},
|
|
3207
|
+
{
|
|
3208
|
+
"type": "standalone",
|
|
3209
|
+
"slot": "slot-122",
|
|
3210
|
+
"course": "para-601",
|
|
3211
|
+
"variants": [
|
|
3212
|
+
{
|
|
3213
|
+
"id": "plsat-122",
|
|
3214
|
+
"scenario": "A project's data policy has: upstream ring: 'creator-upstream', allowed: ['task_type', 'outcome', 'helpfulness', 'duration_bucket', 'error_category'], denied: ['code_of_any_kind', 'file_paths', 'symbol_names', 'conversation_content', 'user_identity']. An agent creator's analytics dashboard requests feedback data.",
|
|
3215
|
+
"question": "Which data reaches the agent creator?",
|
|
3216
|
+
"choices": {
|
|
3217
|
+
"A": "Everything the agent produced — the creator needs full visibility to improve the agent",
|
|
3218
|
+
"B": "Only the allowed fields: task_type ('feature implementation'), outcome ('pass'), helpfulness ('high'), duration_bucket ('30-60min'), error_category (null). No code, file paths, symbol names, conversation content, or user identity is transmitted",
|
|
3219
|
+
"C": "A summary of the agent's work log entries",
|
|
3220
|
+
"D": "Nothing — the 'denied' list overrides the 'allowed' list entirely",
|
|
3221
|
+
"E": "Only 'outcome' and 'helpfulness' — those are the minimum required fields"
|
|
3222
|
+
},
|
|
3223
|
+
"correct": "B",
|
|
3224
|
+
"explanation": "The upstream rules at Ring 3 (creator-upstream) define exactly what flows to agent creators. The 'allowed' list enumerates the specific fields that can be transmitted: task_type, outcome, helpfulness, duration_bucket, and error_category. The 'denied' list explicitly blocks code_of_any_kind, file_paths, symbol_names, conversation_content, and user_identity. These two lists work together — only allowed fields pass, and denied fields are hard-blocked even if they would otherwise be inferred. The creator sees anonymized quality metrics, never the user's actual code or identity."
|
|
3225
|
+
},
|
|
3226
|
+
{
|
|
3227
|
+
"id": "plsat-122b",
|
|
3228
|
+
"scenario": "A team decision entry contains: decision: 'Use PostgreSQL with pgvector for embeddings', rationale: 'Lower latency than Pinecone for our dataset size', symbols_affected: ['#embedding-store', '#search-service']. The data policy has team_decisions ring: 'project-locked', deny_content: ['implementation_details']. An agent from another user project requests this data.",
|
|
3229
|
+
"question": "What happens when the cross-project request arrives?",
|
|
3230
|
+
"choices": {
|
|
3231
|
+
"A": "The decision is shared — team decisions are public knowledge",
|
|
3232
|
+
"B": "Only the rationale is shared — the decision text contains implementation details",
|
|
3233
|
+
"C": "The request is blocked entirely — team decisions are in Ring 1 (project-locked), which means they never leave the project regardless of what the requesting agent needs",
|
|
3234
|
+
"D": "The decision title is shared but the rationale is redacted",
|
|
3235
|
+
"E": "The data is shared if the other project is in the same workspace"
|
|
3236
|
+
},
|
|
3237
|
+
"correct": "C",
|
|
3238
|
+
"explanation": "Team decisions default to Ring 1 (project-locked). The trust ring system is the primary enforcement boundary — data classified in Ring 1 never leaves the project, period. The 'cross-project-transfer' enforcement boundary checks the ring before any content filtering. Even though the deny_content only blocks 'implementation_details', the ring restriction prevents the entire entry from being transmitted. Workspaces do not override ring restrictions — they enable symbol awareness across projects, not data sharing."
|
|
3239
|
+
}
|
|
3240
|
+
]
|
|
3241
|
+
},
|
|
3242
|
+
{
|
|
3243
|
+
"type": "standalone",
|
|
3244
|
+
"slot": "slot-123",
|
|
3245
|
+
"course": "para-601",
|
|
3246
|
+
"variants": [
|
|
3247
|
+
{
|
|
3248
|
+
"id": "plsat-123",
|
|
3249
|
+
"scenario": "The data policy's default ring is 'project-locked'. The observation rules are: allow: ['src/**', '.paradigm/**', 'portal.yaml'], deny: ['.env*', '**/*.key', '**/*.pem', '**/secrets/**']. A builder agent tries to read '.env.production' to check a database URL.",
|
|
3250
|
+
"question": "What happens at the observation enforcement boundary?",
|
|
3251
|
+
"choices": {
|
|
3252
|
+
"A": "The read succeeds — '.env.production' matches 'src/**' because it starts with a dot",
|
|
3253
|
+
"B": "The read is blocked — '.env.production' matches the deny pattern '.env*', and deny overrides allow. The agent is prevented from observing the file contents",
|
|
3254
|
+
"C": "The read succeeds but the content is redacted — only the file name is returned",
|
|
3255
|
+
"D": "The read is blocked only if the file contains actual secrets; the policy checks content",
|
|
3256
|
+
"E": "The read succeeds because the default ring is 'project-locked', which means all project files are accessible"
|
|
3257
|
+
},
|
|
3258
|
+
"correct": "B",
|
|
3259
|
+
"explanation": "The observation rules control what agents can see. The deny list takes precedence over the allow list — '.env.production' matches the deny glob '.env*', so the read is blocked at the 'event-emission' enforcement boundary. This is a hard deny, not a content-aware filter. The default ring being 'project-locked' means data stays within the project, but observation deny patterns prevent agents from accessing sensitive files regardless of ring level. The agent would need the deny pattern removed from the data policy to read this file."
|
|
3260
|
+
},
|
|
3261
|
+
{
|
|
3262
|
+
"id": "plsat-123b",
|
|
3263
|
+
"scenario": "The observation rules allow: ['src/**', '.paradigm/**'], deny: ['**/*.key', '**/*.pem', '**/secrets/**']. A security agent wants to audit the file 'src/config/secrets/api-keys.json' to check for hardcoded credentials.",
|
|
3264
|
+
"question": "What does the data policy enforce?",
|
|
3265
|
+
"choices": {
|
|
3266
|
+
"A": "The read is allowed — 'src/**' matches and the security agent has special override privileges",
|
|
3267
|
+
"B": "The read is allowed — 'src/config/secrets/api-keys.json' matches 'src/**' in allow",
|
|
3268
|
+
"C": "The read is blocked — 'src/config/secrets/api-keys.json' matches '**/secrets/**' in deny, which overrides the 'src/**' allow pattern",
|
|
3269
|
+
"D": "The read is partially allowed — the file name is visible but contents are redacted",
|
|
3270
|
+
"E": "The read depends on the agent's permissions.paths.read setting, not the data policy"
|
|
3271
|
+
},
|
|
3272
|
+
"correct": "C",
|
|
3273
|
+
"explanation": "Deny patterns override allow patterns in observation rules. While 'src/config/secrets/api-keys.json' does match 'src/**' in the allow list, it also matches '**/secrets/**' in the deny list. The deny takes precedence. This is a deliberate security design — even well-intentioned audit access to secrets directories is blocked. If the security agent needs to verify no hardcoded secrets exist, it would need a different approach (e.g., a human-run audit) or a per-agent override in agent_overrides that explicitly allows that path."
|
|
3274
|
+
}
|
|
3275
|
+
]
|
|
3276
|
+
},
|
|
3277
|
+
{
|
|
3278
|
+
"type": "standalone",
|
|
3279
|
+
"slot": "slot-124",
|
|
3280
|
+
"course": "para-601",
|
|
3281
|
+
"variants": [
|
|
3282
|
+
{
|
|
3283
|
+
"id": "plsat-124",
|
|
3284
|
+
"scenario": "An event is emitted by the post-write hook after a file save. You need to understand the anatomy of the StreamEvent object.",
|
|
3285
|
+
"question": "Which fields are ALWAYS present on every StreamEvent, regardless of the event type or source?",
|
|
3286
|
+
"choices": {
|
|
3287
|
+
"A": "id, type, source, timestamp, path, symbols, agent",
|
|
3288
|
+
"B": "id, type, source, timestamp — these four are required. Fields like path, symbols, keywords, context, agent, tool, severity, and data are all optional and depend on the event type",
|
|
3289
|
+
"C": "id, timestamp, and agent — the agent is always set because events come from agents",
|
|
3290
|
+
"D": "All fields are always present — optional fields default to empty arrays or null",
|
|
3291
|
+
"E": "type and timestamp only — the id is generated lazily when the event is queried"
|
|
3292
|
+
},
|
|
3293
|
+
"correct": "B",
|
|
3294
|
+
"explanation": "A StreamEvent has four required fields: id (auto-generated like 'ev-1711000000000-0042'), type (an EventType like 'file-modified', 'gate-added', 'error-encountered'), source (an EventSource like 'post-write-hook', 'mcp-tool-call', 'conversation'), and timestamp (ISO 8601). All other fields are optional: path is present for file events, symbols for Paradigm-aware events, agent for agent-originated events, tool for MCP tool calls, severity for compliance/error events, and data for arbitrary structured metadata."
|
|
3295
|
+
},
|
|
3296
|
+
{
|
|
3297
|
+
"id": "plsat-124b",
|
|
3298
|
+
"scenario": "You are debugging an event that arrived in the stream: { id: 'ev-1711036800000-0317', type: 'gate-checked', source: 'mcp-tool-call', timestamp: '2026-03-21T12:00:00Z', symbols: ['^admin-only'], tool: 'paradigm_gates_for_route', context: 'Checking gates for /api/admin/config' }.",
|
|
3299
|
+
"question": "Which fields on this event are the optional ones (not present on every event)?",
|
|
3300
|
+
"choices": {
|
|
3301
|
+
"A": "All fields shown are required — this is the minimum event structure",
|
|
3302
|
+
"B": "Only 'context' is optional — everything else is always present",
|
|
3303
|
+
"C": "symbols, tool, and context are the optional fields. id, type, source, and timestamp are the four required fields present on every event",
|
|
3304
|
+
"D": "id is optional — some events are anonymous",
|
|
3305
|
+
"E": "source and tool are both optional — they are redundant"
|
|
3306
|
+
},
|
|
3307
|
+
"correct": "C",
|
|
3308
|
+
"explanation": "The four required fields are id, type, source, and timestamp. In this event, symbols (['^admin-only']), tool ('paradigm_gates_for_route'), and context ('Checking gates for /api/admin/config') are all optional fields that happen to be populated. Other events might lack these — for example, a 'file-modified' event from 'post-write-hook' would have path instead of tool, and might not have symbols at all if the file is not covered by a .purpose file."
|
|
3309
|
+
}
|
|
3310
|
+
]
|
|
3311
|
+
},
|
|
3312
|
+
{
|
|
3313
|
+
"type": "standalone",
|
|
3314
|
+
"slot": "slot-125",
|
|
3315
|
+
"course": "para-601",
|
|
3316
|
+
"variants": [
|
|
3317
|
+
{
|
|
3318
|
+
"id": "plsat-125",
|
|
3319
|
+
"scenario": "A builder agent starts a new session on project 'acme-api'. You call `paradigm_context_compose` with agent: 'builder', symbols: ['#api-gateway', '#rate-limiter'], include_nominations: true, include_decisions: true, include_journal: true.",
|
|
3320
|
+
"question": "What sections does the composed context include?",
|
|
3321
|
+
"choices": {
|
|
3322
|
+
"A": "Only the agent's profile — context compose just returns the .agent file",
|
|
3323
|
+
"B": "The full CLAUDE.md, all .purpose files, and the complete event stream",
|
|
3324
|
+
"C": "Profile enrichment (personality, relevant expertise for the given symbols, transferable patterns), recent active team decisions, transferable journal entries for this agent, and pending nominations — four distinct sections composed into a markdown block",
|
|
3325
|
+
"D": "Only nominations and decisions — the profile is loaded separately",
|
|
3326
|
+
"E": "The agent's attention patterns and learning configuration — context compose is about ambient setup"
|
|
3327
|
+
},
|
|
3328
|
+
"correct": "C",
|
|
3329
|
+
"explanation": "paradigm_context_compose builds a session context from four sources: (1) Profile enrichment — the agent's personality, expertise entries matching the given symbols, and transferable patterns; (2) Recent team decisions with status 'active' (up to max_decisions, default 5); (3) Transferable journal entries for this agent (insights that apply across projects, up to max_journal, default 5); (4) Pending nominations that haven't been surfaced yet. Each section can be toggled via include_* flags. The result is a markdown string for prompt injection, not raw data."
|
|
3330
|
+
},
|
|
3331
|
+
{
|
|
3332
|
+
"id": "plsat-125b",
|
|
3333
|
+
"scenario": "A security agent calls `paradigm_context_compose` with agent: 'security', include_decisions: true, include_journal: true, include_nominations: false, max_decisions: 3, max_journal: 10.",
|
|
3334
|
+
"question": "What does the composed context contain?",
|
|
3335
|
+
"choices": {
|
|
3336
|
+
"A": "All 4 sections are always included — the include_* flags are just suggestions",
|
|
3337
|
+
"B": "Profile enrichment for the security agent, up to 3 recent active team decisions, up to 10 transferable journal entries, and NO nominations section (because include_nominations is false)",
|
|
3338
|
+
"C": "Only the journal entries — security agents do not get profile enrichment",
|
|
3339
|
+
"D": "The full event stream filtered to security-relevant events",
|
|
3340
|
+
"E": "Profile, decisions, and journal — but max_journal caps at 5 regardless of the parameter"
|
|
3341
|
+
},
|
|
3342
|
+
"correct": "B",
|
|
3343
|
+
"explanation": "The include_* flags control which sections appear in the composed context. With include_nominations: false, that section is skipped entirely. Profile enrichment is always included (it is the base). max_decisions: 3 limits team decisions to the 3 most recent active ones (instead of the default 5). max_journal: 10 allows up to 10 transferable journal entries (overriding the default 5). The result is a markdown context block with three sections: profile enrichment, decisions, and journal — ready for prompt injection."
|
|
3344
|
+
}
|
|
3345
|
+
]
|
|
3346
|
+
},
|
|
3347
|
+
{
|
|
3348
|
+
"type": "standalone",
|
|
3349
|
+
"slot": "slot-126",
|
|
3350
|
+
"course": "para-601",
|
|
3351
|
+
"variants": [
|
|
3352
|
+
{
|
|
3353
|
+
"id": "plsat-126",
|
|
3354
|
+
"scenario": "The data policy network rules are: ring: 'network-public', opt_in: false, if_opted_in: ['aggregated_task_success_rates', 'anonymized_pattern_frequency']. A network aggregation service requests data from this project.",
|
|
3355
|
+
"question": "What data flows to the network?",
|
|
3356
|
+
"choices": {
|
|
3357
|
+
"A": "aggregated_task_success_rates and anonymized_pattern_frequency — the if_opted_in list defines what is shared",
|
|
3358
|
+
"B": "Nothing — opt_in is false, so no data reaches Ring 4 (network-public) regardless of the if_opted_in list. The user must explicitly set opt_in: true before any data flows",
|
|
3359
|
+
"C": "Only anonymized_pattern_frequency — success rates could identify the project",
|
|
3360
|
+
"D": "Aggregated statistics are always shared — opt_in only controls detailed data",
|
|
3361
|
+
"E": "The data is shared but with a 30-day delay for privacy"
|
|
3362
|
+
},
|
|
3363
|
+
"correct": "B",
|
|
3364
|
+
"explanation": "The network rules require explicit opt-in. With opt_in: false, the 'network-aggregation' enforcement boundary blocks ALL data from reaching Ring 4 (network-public). The if_opted_in list only takes effect when opt_in is true — it defines which specific metrics would be shared if the user chooses to participate. This is a deliberate design: no data flows to the network by default. The user must consciously enable it, and even then, only the listed metric types (aggregated task success rates and anonymized pattern frequency) are transmitted."
|
|
3365
|
+
},
|
|
3366
|
+
{
|
|
3367
|
+
"id": "plsat-126b",
|
|
3368
|
+
"scenario": "An upstream rule has: ring: 'creator-upstream', allowed: ['task_type', 'outcome'], denied: ['code_of_any_kind', 'file_paths', 'symbol_names', 'conversation_content', 'user_identity']. The agent generates a work log entry that mentions file paths and symbol names in the summary. This entry is allowed at Ring 1. Now the upstream boundary is checked.",
|
|
3369
|
+
"question": "What reaches the agent creator?",
|
|
3370
|
+
"choices": {
|
|
3371
|
+
"A": "The full work log entry — it was allowed at Ring 1 so it passes all rings",
|
|
3372
|
+
"B": "Only the task_type and outcome fields. Even though the summary mentions file paths and symbols, the upstream boundary enforces the denied list. File paths, symbol names, and any code are stripped. Only the enumerated allowed fields pass through to Ring 3",
|
|
3373
|
+
"C": "The summary with file paths and symbol names redacted inline",
|
|
3374
|
+
"D": "Nothing — the denied list cancels out the allowed list",
|
|
3375
|
+
"E": "The work log ID and timestamp only — those are always transmitted"
|
|
3376
|
+
},
|
|
3377
|
+
"correct": "B",
|
|
3378
|
+
"explanation": "The upstream enforcement boundary operates on specific fields, not on the text content of entries. The 'allowed' list names exactly which fields pass: task_type and outcome. The 'denied' list provides an additional hard block on categories like file_paths, symbol_names, and code_of_any_kind. Data that was allowed at Ring 1 (project-locked) does not automatically flow to Ring 3 (creator-upstream) — each ring's enforcement boundary re-evaluates what passes. The creator receives structured, enumerated fields only — never free-text summaries that might leak sensitive information."
|
|
3379
|
+
}
|
|
3380
|
+
]
|
|
3381
|
+
},
|
|
3382
|
+
{
|
|
3383
|
+
"type": "standalone",
|
|
3384
|
+
"slot": "slot-127",
|
|
3385
|
+
"course": "para-601",
|
|
3386
|
+
"variants": [
|
|
3387
|
+
{
|
|
3388
|
+
"id": "plsat-127",
|
|
3389
|
+
"scenario": "A new project is set up with Paradigm Ambient. The CLAUDE.md mentions a 'learning loop' where agents improve over time. A junior developer asks about the sequence of steps in the ambient learning loop.",
|
|
3390
|
+
"question": "What is the correct order of the ambient learning loop?",
|
|
3391
|
+
"choices": {
|
|
3392
|
+
"A": "Observe → Learn → Act → Record",
|
|
3393
|
+
"B": "Act → Record → Learn → Apply",
|
|
3394
|
+
"C": "Event emitted → Attention scoring → Self-nomination → Surfacing → Human engagement → Feedback → Journal recording → Confidence adjustment → Pattern extraction → Context enrichment (next session)",
|
|
3395
|
+
"D": "Record everything → Filter later → Show on demand",
|
|
3396
|
+
"E": "Human assigns → Agent acts → Agent reports → Human reviews"
|
|
3397
|
+
},
|
|
3398
|
+
"correct": "C",
|
|
3399
|
+
"explanation": "The ambient learning loop is a 10-step cycle: (1) An event is emitted (file save, tool call, error). (2) Each agent scores it against their attention patterns. (3) Agents that exceed their threshold self-nominate with a type and urgency. (4) Nominations are surfaced to the human based on SurfacingConfig. (5) The human engages (accepts, dismisses, defers). (6) The response becomes feedback. (7) The agent records insights in its Learning Journal. (8) Confidence scores are adjusted via exponential moving average. (9) Transferable patterns are extracted for cross-project use. (10) Next session, paradigm_context_compose injects the updated patterns and insights."
|
|
3400
|
+
},
|
|
3401
|
+
{
|
|
3402
|
+
"id": "plsat-127b",
|
|
3403
|
+
"scenario": "A team is evaluating whether Paradigm Ambient's learning loop actually improves agent performance over time. They want to understand the mechanism.",
|
|
3404
|
+
"question": "Which sequence correctly describes how an agent's future behavior improves from a single learning event?",
|
|
3405
|
+
"choices": {
|
|
3406
|
+
"A": "The agent's code is retrained on the new data point",
|
|
3407
|
+
"B": "The correction is stored but only used if the exact same scenario recurs",
|
|
3408
|
+
"C": "Feedback → Journal entry (trigger + insight + confidence adjustment) → Pattern extraction (if transferable) → Notebook promotion (if auto-promote enabled) → Context compose injects the pattern in future sessions → Agent's expertise scores are updated",
|
|
3409
|
+
"D": "The human writes a rule in the data policy and the agent follows it",
|
|
3410
|
+
"E": "The agent's threshold is lowered so it speaks up more often"
|
|
3411
|
+
},
|
|
3412
|
+
"correct": "C",
|
|
3413
|
+
"explanation": "Agent improvement follows a structured path: (1) Feedback from human engagement triggers a journal entry with the specific trigger type (correction_received, confidence_miss, etc.), the insight, and confidence adjustment (before/after). (2) If the learning is transferable, a pattern is extracted with applies_when and correct_approach. (3) If notebook_auto_promote is enabled in the agent's learning config, the pattern promotes to the agent's notebook. (4) In future sessions, paradigm_context_compose loads transferable journal entries and patterns into the agent's context. (5) The agent's expertise scores (EMA) are updated, shifting future attention scoring. The agent is not retrained — it improves through richer context injection."
|
|
3414
|
+
}
|
|
3415
|
+
]
|
|
3416
|
+
},
|
|
3417
|
+
{
|
|
3418
|
+
"type": "standalone",
|
|
3419
|
+
"slot": "slot-128",
|
|
3420
|
+
"course": "para-601",
|
|
3421
|
+
"variants": [
|
|
3422
|
+
{
|
|
3423
|
+
"id": "plsat-128",
|
|
3424
|
+
"scenario": "An architect agent has attention: symbols: ['$*', '#*'], concepts: ['architecture', 'design', 'pattern', 'refactor'], threshold: 0.5. An event arrives: type: 'concept-mentioned', source: 'conversation', keywords: ['refactor', 'extract', 'design pattern', 'strategy pattern'], context: 'Discussing whether to refactor the notification system using the strategy pattern.'",
|
|
3425
|
+
"question": "What is the architect's conceptMatch score, and does it self-nominate?",
|
|
3426
|
+
"choices": {
|
|
3427
|
+
"A": "conceptMatch = 0.25 (1 of 4 concepts), score = 0.25, does not nominate (below 0.5)",
|
|
3428
|
+
"B": "conceptMatch = 1.0 — any concept match gives full score",
|
|
3429
|
+
"C": "conceptMatch = 0.75 — 'architecture' does not appear but 'design', 'pattern', and 'refactor' all match, giving 3 of 4 concepts matched. Score = max(0, 0, 0.75, 0) = 0.75, which exceeds 0.5, so the agent self-nominates",
|
|
3430
|
+
"D": "conceptMatch = 0.5 — only exact keyword matches count, and only 'refactor' and 'pattern' are exact matches (2 of 4)",
|
|
3431
|
+
"E": "The architect does not nominate because 'concept-mentioned' is not in its signals list"
|
|
3432
|
+
},
|
|
3433
|
+
"correct": "C",
|
|
3434
|
+
"explanation": "Concept matching joins the event's context, keywords, and type into a single lowercase string, then checks how many of the agent's concepts appear. The combined text includes 'refactor', 'extract', 'design pattern', 'strategy pattern', 'concept-mentioned'. Against the agent's concepts ['architecture', 'design', 'pattern', 'refactor']: 'design' matches, 'pattern' matches, 'refactor' matches. 'architecture' does not appear. That is 3 out of 4 = 0.75. The final score is max(symbolMatch, pathMatch, conceptMatch, signalMatch). With no symbols or path on this event, symbolMatch and pathMatch are 0. signalMatch is 0 (no signal patterns configured). Score = 0.75, above the 0.5 threshold. The architect self-nominates."
|
|
3435
|
+
},
|
|
3436
|
+
{
|
|
3437
|
+
"id": "plsat-128b",
|
|
3438
|
+
"scenario": "A security agent has attention: symbols: ['^*', '#*-auth', '#*-middleware'], paths: ['auth/**', 'middleware/**'], concepts: ['permission', 'JWT', 'RBAC', 'XSS', 'injection'], signals: [{ type: 'gate-added' }, { type: 'route-created' }], threshold: 0.4. An event arrives: type: 'route-created', source: 'post-write-hook', path: 'src/routes/admin.ts', symbols: ['#admin-routes'], keywords: ['new endpoint', 'admin panel', 'user management'].",
|
|
3439
|
+
"question": "What is the security agent's overall score and should it nominate?",
|
|
3440
|
+
"choices": {
|
|
3441
|
+
"A": "Score = 0 — '#admin-routes' does not match any symbol pattern",
|
|
3442
|
+
"B": "Score = 0.4 — only the path partially matches, barely meeting threshold",
|
|
3443
|
+
"C": "Score = 1.0 — signalMatch is 1.0 because 'route-created' matches signals. symbolMatch is 0 ('#admin-routes' does not match '^*', '#*-auth', or '#*-middleware'). pathMatch is 0 ('src/routes/admin.ts' does not match 'auth/**' or 'middleware/**'). The final score is max(0, 0, 0, 1.0) = 1.0, well above the 0.4 threshold",
|
|
3444
|
+
"D": "Score = 0.2 — partial matches across dimensions are averaged",
|
|
3445
|
+
"E": "Score = 1.0 — all four dimensions fire because admin is security-related"
|
|
3446
|
+
},
|
|
3447
|
+
"correct": "C",
|
|
3448
|
+
"explanation": "The scoring uses max() across four dimensions, not an average. symbolMatch: '#admin-routes' does not end with '-auth' or '-middleware' and does not start with '^', so 0. pathMatch: 'src/routes/admin.ts' does not match 'auth/**' or 'middleware/**', so 0. conceptMatch: keywords ['new endpoint', 'admin panel', 'user management'] do not contain 'permission', 'JWT', 'RBAC', 'XSS', or 'injection', so 0. signalMatch: the event type 'route-created' matches the signal { type: 'route-created' }, so 1.0. Final score: max(0, 0, 0, 1.0) = 1.0. The security agent self-nominates — new route creation is exactly the kind of event that warrants security review."
|
|
3449
|
+
}
|
|
3450
|
+
]
|
|
2891
3451
|
}
|
|
2892
3452
|
]
|
|
2893
3453
|
}
|