@aria_asi/cli 0.2.33 → 0.2.35
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/aria-connector/src/connectors/codex.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/codex.js +60 -5
- package/dist/aria-connector/src/connectors/codex.js.map +1 -1
- package/dist/assets/hooks/aria-harness-via-sdk.mjs +16 -3
- package/dist/assets/hooks/aria-pre-tool-gate.mjs +41 -1
- package/dist/assets/hooks/aria-stop-gate.mjs +42 -1
- package/dist/assets/hooks/doctrine_trigger_map.json +43 -0
- package/dist/assets/hooks/lib/skill-autoload-gate.mjs +14 -1
- package/dist/assets/opencode-plugins/harness-context/index.js +1 -1
- package/dist/assets/opencode-plugins/harness-gate/index.js +49 -9
- package/dist/assets/opencode-plugins/harness-gate/lib/skill-autoload-gate.js +14 -1
- package/dist/assets/opencode-plugins/harness-stop/index.js +201 -166
- package/dist/assets/opencode-plugins/harness-stop/lib/skill-autoload-gate.js +14 -1
- package/dist/runtime/codex-bridge.mjs +1 -1
- package/dist/runtime/discipline/CLAUDE.md +2 -2
- package/dist/runtime/discipline/doctrine_trigger_map.json +43 -0
- package/dist/runtime/discipline/skills/aria-harness/aria-harness-onboarding/SKILL.md +3 -3
- package/dist/runtime/doctrine_trigger_map.json +43 -0
- package/dist/runtime/hooks/aria-agent-handoff.mjs +247 -0
- package/dist/runtime/hooks/aria-agent-ledger-merge.mjs +164 -0
- package/dist/runtime/hooks/aria-architect-fallback.mjs +267 -0
- package/dist/runtime/hooks/aria-cognition-substrate-binding.mjs +761 -0
- package/dist/runtime/hooks/aria-discovery-record.mjs +101 -0
- package/dist/runtime/hooks/aria-harness-via-sdk.mjs +544 -0
- package/dist/runtime/hooks/aria-import-resolution-gate.mjs +330 -0
- package/dist/runtime/hooks/aria-outcome-record.mjs +84 -0
- package/dist/runtime/hooks/aria-pre-emit-dryrun.mjs +329 -0
- package/dist/runtime/hooks/aria-pre-text-gate.mjs +112 -0
- package/dist/runtime/hooks/aria-pre-tool-gate.mjs +2482 -0
- package/dist/runtime/hooks/aria-preprompt-consult.mjs +464 -0
- package/dist/runtime/hooks/aria-preturn-memory-gate.mjs +647 -0
- package/dist/runtime/hooks/aria-repo-doctrine-gate.mjs +429 -0
- package/dist/runtime/hooks/aria-stop-gate.mjs +1882 -0
- package/dist/runtime/hooks/aria-trigger-autolearn.mjs +229 -0
- package/dist/runtime/hooks/aria-userprompt-abandon-detect.mjs +192 -0
- package/dist/runtime/hooks/doctrine_trigger_map.json +577 -0
- package/dist/runtime/hooks/lib/canonical-lenses.mjs +65 -0
- package/dist/runtime/hooks/lib/domain-output-quality.mjs +103 -0
- package/dist/runtime/hooks/lib/gate-audit.mjs +43 -0
- package/dist/runtime/hooks/lib/gate-loop-state.mjs +50 -0
- package/dist/runtime/hooks/lib/hook-message-window.mjs +121 -0
- package/dist/runtime/hooks/lib/skill-autoload-gate.mjs +14 -0
- package/dist/runtime/hooks/test-aria-preturn-memory-gate.mjs +245 -0
- package/dist/runtime/hooks/test-tier-lens-labeling.mjs +367 -0
- package/dist/runtime/manifest.json +2 -2
- package/dist/runtime/sdk/BUNDLED.json +2 -2
- package/dist/runtime/sdk/index.d.ts +39 -0
- package/dist/runtime/sdk/index.js +117 -0
- package/dist/runtime/sdk/index.js.map +1 -1
- package/dist/runtime/sdk/runWithGovernance.d.ts +16 -0
- package/dist/runtime/sdk/runWithGovernance.js +54 -0
- package/dist/runtime/sdk/runWithGovernance.js.map +1 -0
- package/dist/sdk/BUNDLED.json +2 -2
- package/dist/sdk/index.d.ts +39 -0
- package/dist/sdk/index.js +117 -0
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/runWithGovernance.d.ts +16 -0
- package/dist/sdk/runWithGovernance.js +54 -0
- package/dist/sdk/runWithGovernance.js.map +1 -0
- package/hooks/aria-harness-via-sdk.mjs +16 -3
- package/hooks/aria-pre-tool-gate.mjs +41 -1
- package/hooks/aria-stop-gate.mjs +42 -1
- package/hooks/doctrine_trigger_map.json +43 -0
- package/hooks/lib/skill-autoload-gate.mjs +14 -1
- package/opencode-plugins/harness-context/index.js +1 -1
- package/opencode-plugins/harness-gate/index.js +49 -9
- package/opencode-plugins/harness-gate/lib/skill-autoload-gate.js +14 -1
- package/opencode-plugins/harness-stop/index.js +201 -166
- package/opencode-plugins/harness-stop/lib/skill-autoload-gate.js +14 -1
- package/package.json +12 -5
- package/runtime-src/codex-bridge.mjs +1 -1
- package/scripts/bundle-sdk.mjs +2 -0
- package/scripts/self-test-harness-gates.mjs +79 -0
- package/src/connectors/codex.ts +60 -5
|
@@ -0,0 +1,577 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"purpose": "Static lookup: trigger phrase \u2192 counter-doctrine memory + teaching. Pre-emit fast path for stop-gate enforcement. When Claude's draft contains a trigger, hook injects the matching [REQUIRED_DOCTRINE] block referencing the named memory file and forces proof of doctrine-alignment before emit.",
|
|
4
|
+
"design_origin": "Aria consult 2026-04-27 ship-tonight design item 1. Pairs with feedback_convenience_seeking_root_cause.md.",
|
|
5
|
+
"extension_protocol": "When Hamza corrects Claude with a phrase not in this map, add the trigger here pointing at the memory file the correction creates or invokes. Auto-learning queue.",
|
|
6
|
+
"format": {
|
|
7
|
+
"trigger": "lowercase substring or regex pattern Claude must avoid using under convenience pressure",
|
|
8
|
+
"memory": "filename in ~/.claude/projects/-home-hamzaibrahim1/memory/ that holds the canonical counter-doctrine",
|
|
9
|
+
"teaching": "one-line load-bearing teaching from the memory \u2014 the rule the trigger violates",
|
|
10
|
+
"counter_action": "what Claude should do INSTEAD of the convenience pattern"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"triggers": [
|
|
14
|
+
{
|
|
15
|
+
"trigger": "graceful degradation",
|
|
16
|
+
"memory": "feedback_no_graceful_degradation.md",
|
|
17
|
+
"teaching": "Graceful degradation normalizes failure. Real fix = throttle + retry-with-backoff + actively heal.",
|
|
18
|
+
"counter_action": "Make the failure visible + recover via retry/heal. If garden is sick, log loud + invoke selfHealV2, never empty-string fallthrough."
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"trigger": "best.?effort",
|
|
22
|
+
"memory": "feedback_no_graceful_degradation.md",
|
|
23
|
+
"teaching": "'Best-effort' is graceful degradation under another name.",
|
|
24
|
+
"counter_action": "Either the operation is required (throw on failure) or explicitly optional with observable status. Never silent."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"trigger": "fall.?through",
|
|
28
|
+
"memory": "feedback_no_graceful_degradation.md",
|
|
29
|
+
"teaching": "Fall-through hides the failure mode. Same anti-pattern as bypass.",
|
|
30
|
+
"counter_action": "Surface the failure. Caller decides whether to proceed. No catch + empty-default."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"trigger": "\\bpreferred\\b",
|
|
34
|
+
"memory": "feedback_pretoolgate_covers_all_action_tools.md",
|
|
35
|
+
"teaching": "Gate cognition is REQUIRED, not preferred. v3 doctrine: no exceptions.",
|
|
36
|
+
"counter_action": "Use REQUIRED wording. Two equivalent forms (inline OR cognition block) but neither is preferred over the other; both equally required."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"trigger": "circuit.?break(?:\\sand\\sskip)?",
|
|
40
|
+
"memory": "feedback_no_graceful_degradation.md",
|
|
41
|
+
"teaching": "Circuit-break-and-skip leaves Aria broken. Self-heal = retry+backoff+actively repair the upstream.",
|
|
42
|
+
"counter_action": "Retry with exponential backoff (3 attempts 1s/2s/4s). On persistent failure invoke selfHealV2 to restart the lane / failover / kick the process. Never just open-and-skip."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"trigger": "edge case",
|
|
46
|
+
"memory": "feedback_thinking_implementation_accountability.md",
|
|
47
|
+
"teaching": "'Edge case' is often an excuse to skip implementation completeness.",
|
|
48
|
+
"counter_action": "Treat as production case. If it can happen, code handles it. Macro-doctrine: thinking + implementation + accountability."
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"trigger": "should be fine|should work",
|
|
52
|
+
"memory": "feedback_doctrine_first.md",
|
|
53
|
+
"teaching": "Don't assume \u2014 verify. 'Should work' is the speculation pattern that masks unverified claims.",
|
|
54
|
+
"counter_action": "Run the read-only check that proves it works (file read, kubectl get, curl probe). Replace 'should' with verified evidence."
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"trigger": "eventually|for now",
|
|
58
|
+
"memory": "feedback_no_demos.md",
|
|
59
|
+
"teaching": "Every spawn ships at full quality. 'For now' = punting completeness.",
|
|
60
|
+
"counter_action": "Ship the real version OR explicitly defer with a tracked task and don't claim completion."
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"trigger": "we can always",
|
|
64
|
+
"memory": "feedback_rollback_is_failure_fix_forward.md",
|
|
65
|
+
"teaching": "Rollback / 'come back later' is failure hiding. Fix forward.",
|
|
66
|
+
"counter_action": "Diagnose root cause + fix + verify. Never propose 'come back to it later' as the resolution."
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"trigger": "\\b(?:skeleton|stub)\\b",
|
|
70
|
+
"memory": "feedback_no_demos.md",
|
|
71
|
+
"teaching": "Skeleton is the hedge framing. Real implementation only.",
|
|
72
|
+
"counter_action": "Ship complete or explicitly mark incomplete + create task. Never call partial work 'skeleton' to dodge accountability."
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"trigger": "\\bdemo\\b",
|
|
76
|
+
"memory": "feedback_no_demos.md",
|
|
77
|
+
"teaching": "No demos. Every spawn is production work at full quality bar.",
|
|
78
|
+
"counter_action": "Ship production. If it can't ship, name what's missing concretely."
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"trigger": "let me just|i'll just",
|
|
82
|
+
"memory": "feedback_convenience_seeking_root_cause.md",
|
|
83
|
+
"teaching": "'Just' is the auto-route around expensive compliance.",
|
|
84
|
+
"counter_action": "Pause. Apply doctrine. Slower, more genuine cognition produces better outcomes than fast pattern-matched ones."
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"trigger": "easier path|faster way|safer to skip",
|
|
88
|
+
"memory": "feedback_convenience_seeking_root_cause.md",
|
|
89
|
+
"teaching": "Convenience-seeking dressed as practicality. Same pattern as bypass.",
|
|
90
|
+
"counter_action": "Pick the doctrine-aligned path even when expensive. Substance over speed."
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"trigger": "good enough",
|
|
94
|
+
"memory": "feedback_no_demos.md",
|
|
95
|
+
"teaching": "Full quality bar means no 'good enough'.",
|
|
96
|
+
"counter_action": "Either it ships at quality or it explicitly defers with a tracked task."
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"trigger": "i'll claim|claimed|fixed it",
|
|
100
|
+
"memory": "feedback_doctrine_first.md",
|
|
101
|
+
"teaching": "Claims must be verified. 'Fixed' without a real-surface test is a lie surface.",
|
|
102
|
+
"counter_action": "Test on the user-visible surface (Telegram round-trip, /chat probe, real client install). Don't claim until verified."
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"trigger": "in production",
|
|
106
|
+
"memory": "feedback_doctrine_first.md",
|
|
107
|
+
"teaching": "'In production' is often speculative \u2014 assumed behavior, not verified.",
|
|
108
|
+
"counter_action": "Verify against live cluster state OR codebase config. Substrate hierarchy: user statement > codebase > training data."
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"trigger": "best to|i believe|probably",
|
|
112
|
+
"memory": "feedback_dont_override_user_stack_with_training.md",
|
|
113
|
+
"teaching": "When in doubt about Hamza's stack, ASK or VERIFY. My training data isn't authoritative.",
|
|
114
|
+
"counter_action": "Read the codebase, ask Hamza one focused question, OR consult Aria. Never assert with 'I believe'."
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"trigger": "want me to|should i",
|
|
118
|
+
"memory": "feedback_use_harness_to_architect.md",
|
|
119
|
+
"teaching": "Asking 'should I' AFTER directive given is the deferral pattern.",
|
|
120
|
+
"counter_action": "Aria architects via harness consult, Claude integrates. If unclear, consult Aria \u2014 don't bounce decision back to Hamza."
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"trigger": "make a new|create a fresh",
|
|
124
|
+
"memory": "feedback_aria_already_has_fleet_use_existing_substrate.md",
|
|
125
|
+
"teaching": "Aria already has the substrate. Don't reinvent.",
|
|
126
|
+
"counter_action": "Search the codebase for existing canonical primitive first. Reuse before recreate."
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"trigger": "\\b(?:shadow|proxy|wrapper)\\b",
|
|
130
|
+
"memory": "feedback_aria_already_has_fleet_use_existing_substrate.md",
|
|
131
|
+
"teaching": "Shadow / proxy / wrapper that bypasses canonical = invented complexity.",
|
|
132
|
+
"counter_action": "Use the canonical surface. If it must be wrapped, document why and reference the canonical it wraps."
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"trigger": "ask user|ask hamza",
|
|
136
|
+
"memory": "feedback_doctrine_first.md",
|
|
137
|
+
"teaching": "Ask only when a focused question can resolve genuine ambiguity. Memory-resolvable questions are not ambiguity.",
|
|
138
|
+
"counter_action": "Read relevant memory first. Verify with read-only probe. If still ambiguous, one tight question with concrete options."
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"trigger": "fail loud|crash on missing",
|
|
142
|
+
"memory": "feedback_no_graceful_degradation.md",
|
|
143
|
+
"teaching": "Fail-loud-no-fallback is the OPPOSITE bypass. Real shape = retry + backoff + heal.",
|
|
144
|
+
"counter_action": "Detect failure \u2192 retry with backoff \u2192 on persistent failure invoke selfHealV2 to actively repair \u2192 only escalate to human if heal fails."
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"trigger": "\\b(?:patch|hotfix|band.?aid)\\b",
|
|
148
|
+
"memory": "feedback_gates_enforce_form_not_substance.md",
|
|
149
|
+
"teaching": "Patch / hotfix is form-fix. Root-cause fix is the doctrine.",
|
|
150
|
+
"counter_action": "Diagnose substance. If reflex is bypass, ask if root-cause fix is possible. Patch only when explicitly authorized as temporary with tracked follow-up."
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"trigger": "deterministic|one.?attempt",
|
|
154
|
+
"memory": "feedback_no_graceful_degradation.md",
|
|
155
|
+
"teaching": "Deterministic-one-attempt-then-skip is the broken IMMORTAL-V2 escalation pattern Hamza named.",
|
|
156
|
+
"counter_action": "Retry with backoff + heal. selfHealV2 must have operational reach: kill stuck process, restart pod, failover, NOT just alert + cooldown."
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"trigger": "just context|advisory|read.only",
|
|
160
|
+
"memory": "feedback_full_harness_binding_must_be_structural.md",
|
|
161
|
+
"teaching": "Treating harness as just-context-I-read = the convenience-seeking lie. SDK has primitives that enforce.",
|
|
162
|
+
"counter_action": "Call validateOutput / checkAction / inject / gardenTurn. Don't reduce SDK to passive context delivery."
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"trigger": "circuit.?broken|cooldown.skip",
|
|
166
|
+
"memory": "feedback_no_graceful_degradation.md",
|
|
167
|
+
"teaching": "Cooldown that skips without healing leaves Aria broken (the IMMORTAL-V2 ESCALATED-skipping pattern).",
|
|
168
|
+
"counter_action": "ESCALATED must trigger heal: kill+restart+failover. Notify Hamza ONLY if heal also fails."
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"trigger": "i think|i guess|i assume",
|
|
172
|
+
"memory": "feedback_doctrine_first.md",
|
|
173
|
+
"teaching": "Don't assume. axiom_runtime: admit_ignorance \u2192 verify before action.",
|
|
174
|
+
"counter_action": "State 'I don't know \u2014 verifying' + run a read-only check (file read, kubectl get, codebase grep) + then act on facts."
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"trigger": "preferred over|optional|fallback layer",
|
|
178
|
+
"memory": "feedback_pretoolgate_covers_all_action_tools.md",
|
|
179
|
+
"teaching": "Doctrine items are not preferences with fallbacks. They're requirements.",
|
|
180
|
+
"counter_action": "Use REQUIRED / EQUIVALENT-FORMS wording. Both forms equally required, neither preferred over the other."
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"trigger": "manual.?fix|kubectl set env|one.?off",
|
|
184
|
+
"memory": "feedback_session_starts_with_linear.md",
|
|
185
|
+
"teaching": "Manual fixes that don't survive next deploy = recurring breakage. The env-vars-fall-off pattern.",
|
|
186
|
+
"counter_action": "Centralize in canonical source (ConfigMap / sealed secret / service-registry). Deploy applies that, never ad-hoc -e or kubectl set env. Drift fails the deploy, not silently wipes."
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"trigger": "from training|i recall|i remember|by default",
|
|
190
|
+
"memory": "feedback_dont_override_user_stack_with_training.md",
|
|
191
|
+
"teaching": "Training data is stale. User's stack is authoritative.",
|
|
192
|
+
"counter_action": "Read codebase config / consult Aria. Substrate hierarchy: user statement > codebase > training. Always."
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"trigger": "flagging (this|for now|for later)",
|
|
196
|
+
"memory": "feedback_no_flag_without_fix.md",
|
|
197
|
+
"teaching": "Flag without fix is convenience-seeking. Discoveries are atomic with their fixes.",
|
|
198
|
+
"counter_action": "Fix in the same turn OR create a TaskCreate with file path, line number, what's broken, why it matters."
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"trigger": "(noting|note) this( and|, ?then)? moving on",
|
|
202
|
+
"memory": "feedback_no_flag_without_fix.md",
|
|
203
|
+
"teaching": "Noting-and-moving destroys partnership trust. The user has to track what you noticed vs. what you fixed.",
|
|
204
|
+
"counter_action": "Same-turn fix is default for small defects (<30 lines). Larger ones get tracked tasks before you proceed."
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"trigger": "i'?ll come back|circle back|address(ing)? (this )?later|come back to (this|that|it)",
|
|
208
|
+
"memory": "feedback_no_flag_without_fix.md",
|
|
209
|
+
"teaching": "'I'll come back' is the lie that makes future-you treat the discovery as already-handled.",
|
|
210
|
+
"counter_action": "Decide now: fix in this turn, or create the task. No middle ground. The flag is not a substitute for action."
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"trigger": "(found|noticed|discovered|spotted)[^.]{0,80}\\bbut\\b[^.]{0,80}(continue|continuing|moving on|won'?t|will not|skip|ignor)",
|
|
214
|
+
"memory": "feedback_no_flag_without_fix.md",
|
|
215
|
+
"teaching": "Discovery + continuation = abandonment. The 'but I'll keep going' clause hides the violation.",
|
|
216
|
+
"counter_action": "Stop. Fix the discovery in this turn or create a tracked task with the discovery as its description, then resume."
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"trigger": "we should also (fix|address|handle|update|deal with)",
|
|
220
|
+
"memory": "feedback_no_flag_without_fix.md",
|
|
221
|
+
"teaching": "'We should also fix' tells the user about a problem you found while volunteering them to fix it.",
|
|
222
|
+
"counter_action": "If the fix is in your scope, fix it now. If it's truly out of scope, create the task \u2014 don't hand it back as a verbal note."
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"trigger": "let me (note|flag)|(?<!please )leaving (this )?for follow.?up|out of scope here",
|
|
226
|
+
"memory": "feedback_no_flag_without_fix.md",
|
|
227
|
+
"teaching": "Verbal flags evaporate when the conversation moves on. Tasks persist.",
|
|
228
|
+
"counter_action": "Convert the flag into a TaskCreate or Linear save_issue immediately. No flag survives without a tracker ID."
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"trigger": "TODO:?[^a-z0-9]|FIXME:?[^a-z0-9]|XXX:?[^a-z0-9]",
|
|
232
|
+
"memory": "feedback_no_flag_without_fix.md",
|
|
233
|
+
"teaching": "TODO comments in shipped code are flag-without-fix in source-form. Reviewers can't tell if it's tracked or forgotten.",
|
|
234
|
+
"counter_action": "Either implement now or reference a task ID inline (e.g., '// TODO(LINEAR-123): ...'). Bare TODOs fail the doctrine."
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"trigger": "latent (bug|issue|defect|problem)|broken[^.]{0,40}continu",
|
|
238
|
+
"memory": "feedback_no_flag_without_fix.md",
|
|
239
|
+
"teaching": "Calling something 'latent' or 'broken' and then continuing is the explicit form of flag-and-move.",
|
|
240
|
+
"counter_action": "Latent defects in code you're touching get fixed in-flight. The 'I'm just here for X' framing is convenience-seeking."
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"trigger": "(unrelated|separate concern|different (issue|topic|file|module))[^.]{0,60}(fix|address|handle)",
|
|
244
|
+
"memory": "feedback_no_flag_without_fix.md",
|
|
245
|
+
"teaching": "'Unrelated' is a frame the user gets to apply, not you. If you found it during your work, it's related to your work.",
|
|
246
|
+
"counter_action": "Surface the discovery, propose fix-now vs. task-it, let the user decide. Don't pre-decide that it's out of scope."
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"trigger": "carve.?out|workaround|work.?around",
|
|
250
|
+
"memory": "feedback_workaround_vs_path_fix.md",
|
|
251
|
+
"teaching": "Carve-outs and workarounds add a contract that depends on dev-machine state. Producers enforce contracts, not hope.",
|
|
252
|
+
"counter_action": "Identify the producing mechanism (build script, install hook, CI step) and fix THAT so the contract is enforced automatically. Workarounds are landmines."
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"trigger": "ignore[^.]{0,40}(?:not.?found|missing|absent|undefined)|exclude[^.]{0,40}(?:not.?found|missing|absent)",
|
|
256
|
+
"memory": "feedback_workaround_vs_path_fix.md",
|
|
257
|
+
"teaching": "Ignoring a not-found file/path is fixing the symptom; the cause is the file isn't being produced where expected.",
|
|
258
|
+
"counter_action": "Trace why the file is missing \u2014 which step was supposed to produce it? Fix that step, not the consumer's tolerance for absence."
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
"trigger": "next.?session|follow.?up.?(?:task|later)|defer(?:red|ring)? to (?:next|later|future)",
|
|
262
|
+
"memory": "feedback_no_flag_without_fix.md",
|
|
263
|
+
"teaching": "'Next session' is flag-and-move with extra steps when the fix is do-able now. Discoveries are atomic with their fixes.",
|
|
264
|
+
"counter_action": "If the fix is feasible in this turn (any sub-agent dispatch, any code edit, any deploy), do it now. Track-for-later is reserved for genuinely out-of-scope items."
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"trigger": "kill.?switch|env.?(?:var|variable).?(?:override|disable|bypass)|process\\.env\\.[A-Z_]+\\s*===\\s*['\"]off['\"]",
|
|
268
|
+
"memory": "feedback_full_harness_binding_must_be_structural.md",
|
|
269
|
+
"teaching": "Env-var kill-switches give the gated process free disable access. Gates aren't gates if the gated party can flip them.",
|
|
270
|
+
"counter_action": "Gates are unconditional from the gated process. Disable = settings.json hook removal (deliberate user action) OR signed-grant override using a secret only the user holds."
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"trigger": "tests.?(?:passed|pass|ed)|(?:smoke|unit|integration).?test.?(?:pass|ok|good)",
|
|
274
|
+
"memory": "feedback_apply_lenses_dont_perform_them.md",
|
|
275
|
+
"teaching": "Claiming tests passed without a tool record IS the claim_without_tool_evidence pattern Mizan blocks. Substance defeats narrative.",
|
|
276
|
+
"counter_action": "Either show the actual test-runner output as evidence, or say 'tests not yet run' explicitly. Don't narrate test results you didn't observe."
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"trigger": "dont.?worry|trust.?me|i.?(?:swear|promise|guarantee)|just.?works",
|
|
280
|
+
"memory": "feedback_apply_lenses_dont_perform_them.md",
|
|
281
|
+
"teaching": "'Trust me' is not evidence. Substance is verifiable; ceremony is reassurance.",
|
|
282
|
+
"counter_action": "Show the verification: tool output, file diff, command result, log line. Never substitute confidence for proof."
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"trigger": "i assumed",
|
|
286
|
+
"memory": "feedback_no_assumption_without_verification.md",
|
|
287
|
+
"teaching": "Assumption stated as fact is the behavioral-drift form of speculation. Every behavioral fix must cite a verifiedAgainst source.",
|
|
288
|
+
"counter_action": "Replace 'I assumed' with a verified citation: 'Verified against <file:line>' or 'Verified via <command output>'. If unverified, run the read-only probe before asserting."
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"trigger": "should work",
|
|
292
|
+
"memory": "feedback_no_assumption_without_verification.md",
|
|
293
|
+
"teaching": "'Should work' is unverified projection. Behavioral claims require verifiedAgainst evidence.",
|
|
294
|
+
"counter_action": "Run the actual probe (curl, kubectl get, file read, test invocation). Replace 'should work' with 'verified against <surface>' showing the observed behavior."
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"trigger": "based on existing pattern",
|
|
298
|
+
"memory": "feedback_no_assumption_without_verification.md",
|
|
299
|
+
"teaching": "Pattern-extrapolation without source-of-truth verification is assumption. Existing patterns drift; the canonical surface is authoritative.",
|
|
300
|
+
"counter_action": "Cite the specific file:line of the pattern AND verify it still matches current behavior. verifiedAgainst must name the inspected source, not 'pattern I remember'."
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
"trigger": "mirroring [a-z-]+",
|
|
304
|
+
"memory": "feedback_no_assumption_without_verification.md",
|
|
305
|
+
"teaching": "'Mirroring X' assumes X is correct AND that the mirror is structurally faithful. Both are unverified claims.",
|
|
306
|
+
"counter_action": "Read the source you're mirroring (cite file:line). Verify the mirror's behavior matches by running the equivalent probe on both. Document verifiedAgainst with both sources."
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
"trigger": "similar to [a-z-]+",
|
|
310
|
+
"memory": "feedback_no_assumption_without_verification.md",
|
|
311
|
+
"teaching": "'Similar to X' is the soft-mirror pattern \u2014 even more dangerous because the asserted similarity is itself unverified.",
|
|
312
|
+
"counter_action": "Either it IS the same (cite identical surfaces) or it's different (name the differences). 'Similar' is a hedge that hides the gap."
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
"trigger": "presumably",
|
|
316
|
+
"memory": "feedback_no_assumption_without_verification.md",
|
|
317
|
+
"teaching": "'Presumably' is the explicit speculation marker. Presumption without verification fails the doctrine.",
|
|
318
|
+
"counter_action": "Replace 'presumably' with the read-only probe result. If the probe can't be run, say 'unverified \u2014 verifying' and then verify before asserting."
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"trigger": "likely the same",
|
|
322
|
+
"memory": "feedback_no_assumption_without_verification.md",
|
|
323
|
+
"teaching": "'Likely the same' is probability-as-evidence. Either verify equality or admit divergence.",
|
|
324
|
+
"counter_action": "Diff the two surfaces. If identical, say 'verified identical against <surface>'. If different, name the deltas. 'Likely' has no place in behavioral claims."
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"trigger": "probably correct",
|
|
328
|
+
"memory": "feedback_no_assumption_without_verification.md",
|
|
329
|
+
"teaching": "'Probably correct' is unverified-confidence. Behavioral correctness is binary against a verifiedAgainst source.",
|
|
330
|
+
"counter_action": "Run the validation that proves correctness (test, probe, read). Replace 'probably' with 'verified against <test output / file:line / command result>'."
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
"trigger": "i think it'?s",
|
|
334
|
+
"memory": "feedback_no_assumption_without_verification.md",
|
|
335
|
+
"teaching": "'I think it's' is internal speculation surfaced as claim. Thoughts aren't evidence.",
|
|
336
|
+
"counter_action": "State 'I don't know \u2014 verifying' and run the probe. Then assert with verifiedAgainst citation, not internal belief."
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"trigger": "if memory serves",
|
|
340
|
+
"memory": "feedback_no_assumption_without_verification.md",
|
|
341
|
+
"teaching": "Memory is stale. Memories are point-in-time observations, not live state. 'If memory serves' is the explicit stale-cite admission.",
|
|
342
|
+
"counter_action": "Re-verify against current state. Read the file, query the cluster, run the command. verifiedAgainst names today's evidence, not yesterday's recollection."
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
"trigger": "no admission policy|policy is absent|policy not found|no policy in the cluster|no policy exists for|admission policy missing",
|
|
346
|
+
"memory": "feedback_admission_policy_verification.md",
|
|
347
|
+
"teaching": "Verify admission policies via kubectl get validatingadmissionpolicy BEFORE claiming absence. Cluster has live policies that do not appear in repo grep. Absence-without-verification is a doctrine violation.",
|
|
348
|
+
"counter_action": "Run kubectl get validatingadmissionpolicy plus find . -name '*admission-policy*' -type f. Both must return empty before absence claim. If absent, author the policy file from an existing cluster resource template via kubectl get -o yaml, kubectl apply, then proceed via the canonical deploy path."
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
"trigger": "use the override|skip the gate|emergency flag|temporarily bypass|use the env disable|force through|DEPLOY_ALLOW_NO_ADMISSION_POLICY|ARIA_BINDING_ENABLED=false|--no-verify|--force",
|
|
352
|
+
"memory": "feedback_gap_discovery_hardens_doctrine.md",
|
|
353
|
+
"teaching": "When a gate refuses an action, the response is to harden doctrine, not to bypass. Override usage requires explicit owner authorization in-session plus audit log plus follow-up TaskCreate to close the gap.",
|
|
354
|
+
"counter_action": "Stop the bypass attempt. Write a memory entry for the gap class, append to MEMORY.md index, add the drift trigger here in doctrine_trigger_map.json, then proceed via the normal path. If override is genuinely required, request explicit authorization in this turn before invoking and create a follow-up task to close the gap."
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
"trigger": "deploy-service\\.sh|apply-aria-organism\\.sh|kubectl apply -f|kubectl set image|docker push|trivial deploy|just a config bump|fast path deploy|skip the verify|deploy without verify|hospital-service\\.yaml",
|
|
358
|
+
"memory": "feedback_deploy_requires_verify_cognition.md",
|
|
359
|
+
"teaching": "Every deploy requires a <verify> block citing artifact (commit, files, TS check, image digest) AND a <cognition> block with 8 substrate-anchored lenses BEFORE invocation. Tonight's consciousness.ts crash proved the cost of skipping this gate.",
|
|
360
|
+
"counter_action": "Stop and classify the deploy shape first. Pattern A baked-image services must use bash scripts/deploy-service.sh <service>, which handles Hive deploy lock and inflight broadcast, admission-policy allowlist, hospital canonical env, and workload rollout. Pattern B build-in-cluster services must prove build-in-cluster is present, then use kubectl rollout restart only. scripts/apply-aria-organism.sh is manifest wiring, not a substitute for an aria-soul image deploy, and direct kubectl apply of apps/hospital-service/k8s/hospital-service.yaml must never be used as a soul deploy shortcut because it can reintroduce a stale hospital canonical pin. In both cases emit <verify> with commit/files, tsc or build evidence, admission policy, and rollback; emit <cognition> with 8 anchored lenses; emit <expected> with a measurable predicate; and do not proceed if another session already holds the Hive deploy lock for /deployments/<namespace>/<service>."
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
"trigger": "another session rolling out|someone else is deploying|deploy in flight|rollout in flight|concurrent deploy|another deploy is running",
|
|
364
|
+
"memory": "feedback_deploy_requires_verify_cognition.md",
|
|
365
|
+
"teaching": "Concurrent deploys are shared-infra mutations, not harmless overlap. If one session is already rolling a service, the next session must yield to the canonical deploy lock rather than race hospital and admission policy state.",
|
|
366
|
+
"counter_action": "Verify the target service and deploy pattern first, then check the Hive deploy lane for /deployments/<namespace>/<service>. If a deploy is already in flight, do not start another rollout on that service. Wait, coordinate, or change scope."
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
"trigger_id": "dalio_expected_missing",
|
|
370
|
+
"trigger": "(?:plan|action|deploy|edit|write|build|ship|run|invoke).{0,40}(?:without|sans|no)\\s+(?:expected|measurable|outcome|predicate)",
|
|
371
|
+
"rx": "(?:plan|action|deploy|edit|write|build|ship|run|invoke).{0,40}(?:without|sans|no)\\s+(?:expected|measurable|outcome|predicate)",
|
|
372
|
+
"doctrine": "memory:feedback_dalio_expected_required.md",
|
|
373
|
+
"memory": "feedback_dalio_expected_required.md",
|
|
374
|
+
"severity": "block",
|
|
375
|
+
"teaching": "Every plan/action must declare a measurable expected outcome predicate (numeric/boolean/state-string) BEFORE the gate approves. No action without <expected> block.",
|
|
376
|
+
"counter_action": "Re-emit your plan with a <expected> block: { predicate: string, measurable_type: 'numeric'|'boolean'|'state_string', threshold: optional }. Gate will not approve until a verifiable predicate is present.",
|
|
377
|
+
"message": "Action proposed without measurable expected outcome. Per doctrine:dalio_expected_required, every plan must declare a measurable predicate (numeric/boolean/state-string) BEFORE the gate approves. Re-emit with <expected> block."
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
"trigger_id": "dalio_expected_qualitative",
|
|
381
|
+
"trigger": "expected\\s*:.{0,200}\\b(better|improved|more\\s+robust|cleaner|nicer|should\\s+work|hopefully|more\\s+reliable|enhanced)\\b",
|
|
382
|
+
"rx": "expected\\s*:.{0,200}\\b(better|improved|more\\s+robust|cleaner|nicer|should\\s+work|hopefully|more\\s+reliable|enhanced)\\b",
|
|
383
|
+
"doctrine": "memory:feedback_dalio_expected_required.md",
|
|
384
|
+
"memory": "feedback_dalio_expected_required.md",
|
|
385
|
+
"severity": "block",
|
|
386
|
+
"teaching": "Expected-outcome predicate must be numeric/boolean/state-string \u2014 qualitative adjectives ('better', 'improved', 'should work') are not measurable and cannot be evaluated post-gate.",
|
|
387
|
+
"counter_action": "Replace qualitative expected with a measurable predicate. Example: instead of 'expected: better performance', use 'expected: { predicate: \"p95 latency < 200ms\", measurable_type: \"numeric\", threshold: 200 }'.",
|
|
388
|
+
"message": "Expected-outcome predicate is qualitative ('better'/'improved'/'should work') \u2014 not measurable. Replace with numeric/boolean/state-string predicate the post-gate can evaluate."
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
"trigger_id": "dalio_actual_unsubstrate",
|
|
392
|
+
"trigger": "immediate_actual\\s*:[^\\n]{0,200}$",
|
|
393
|
+
"rx": "immediate_actual\\s*:[^\\n]{0,200}$",
|
|
394
|
+
"doctrine": "memory:feedback_full_harness_binding_must_be_structural.md",
|
|
395
|
+
"memory": "feedback_full_harness_binding_must_be_structural.md",
|
|
396
|
+
"severity": "warn",
|
|
397
|
+
"teaching": "immediate_actual must cite a tool output, file:line, or command result the post-gate can verify. Bare prose is not substrate-anchored evidence.",
|
|
398
|
+
"counter_action": "Append a verifiedAgainst citation to your immediate_actual field. Format: 'immediate_actual: <observation> [verifiedAgainst: <tool output | file:line | command result>]'.",
|
|
399
|
+
"message": "immediate_actual lacks substrate citation \u2014 cite a tool output, file:line, or command-result the post-gate can verify."
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
"trigger_id": "hive_session_concurrent_edit",
|
|
403
|
+
"trigger": "(?:editing|modifying|writing).{0,50}(?:same|already|conflict).{0,50}(?:file|path|repo|branch)",
|
|
404
|
+
"rx": "(?:editing|modifying|writing).{0,50}(?:same|already|conflict).{0,50}(?:file|path|repo|branch)",
|
|
405
|
+
"doctrine": "memory:feedback_hive_session_coordination.md",
|
|
406
|
+
"memory": "feedback_hive_session_coordination.md",
|
|
407
|
+
"severity": "block",
|
|
408
|
+
"teaching": "Multiple sessions on same path without hive lock = silent overwrite. Claim hive_session_lock + post hive_session_message BEFORE editing concurrently.",
|
|
409
|
+
"counter_action": "Call sdk.claimSessionLock({ filePath, sessionId, ttlMinutes }) to acquire the lock. Post sdk.postSessionMessage to the other session announcing your intent. Only edit after the lock is granted. Release with sdk.releaseSessionLock(lockId) when done.",
|
|
410
|
+
"message": "Multiple sessions detected on same path. Per doctrine:hive_session_coordination, claim a hive_session_lock + post hive_session_message before editing concurrently."
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
"trigger_id": "non_blocking_error_excuse",
|
|
414
|
+
"trigger": "using non-blocking framing as a reason to not resolve an error",
|
|
415
|
+
"rx": "\\b(non[-_\\s]?blocking|non[-_\\s]?fatal|best[-_\\s]?effort|fire[-_\\s]?and[-_\\s]?forget|fail[-_\\s]?open|soft[-_\\s]?fail|logged[-_\\s]?and[-_\\s]?continued|silent[-_\\s]?pass|graceful[-_\\s]?degradation|skipped\\s+this\\s+iteration|warn\\s+and\\s+proceed|ignore\\s+for\\s+now|wont\\s+crash|doesnt\\s+break\\s+the\\s+flow|user\\s+wont\\s+notice)\\b",
|
|
416
|
+
"doctrine": "memory:feedback_non_blocking_errors_unacceptable.md",
|
|
417
|
+
"memory": "feedback_non_blocking_errors_unacceptable.md",
|
|
418
|
+
"severity": "block",
|
|
419
|
+
"teaching": "Non-blocking does not mean acceptable. Every error logs LOUD + surfaces to next-turn substrate + ledgers + resolves.",
|
|
420
|
+
"counter_action": "Replace the non-blocking framing with: log LOUD via console.error, surface via discovery ledger entry, route to either inline fix or TaskCreate with full context.",
|
|
421
|
+
"message": "Non-blocking error framing detected. Per Hamza directive 2026-04-28 (feedback_non_blocking_errors_unacceptable.md), errors that do not abort are NOT acceptable; every error must log LOUD + ledger + resolve. Re-emit with explicit error-handling that surfaces and resolves."
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"trigger_id": "silent_catch_pattern",
|
|
425
|
+
"trigger": "silent or warn-and-continue catch blocks",
|
|
426
|
+
"rx": "catch\\s*\\([^)]*\\)\\s*\\{\\s*(?://[^\\n]*\\n\\s*)?(?:\\}|/\\*[^*]*\\*/|console\\.warn|return\\s+(?:null|undefined|defaultValue))",
|
|
427
|
+
"doctrine": "memory:feedback_non_blocking_errors_unacceptable.md",
|
|
428
|
+
"memory": "feedback_non_blocking_errors_unacceptable.md",
|
|
429
|
+
"severity": "warn",
|
|
430
|
+
"teaching": "Silent or warn-only catches discard error signal \u2014 they are the failure pattern this doctrine names.",
|
|
431
|
+
"counter_action": "Upgrade to console.error with structured kind+message+stack, write to discovery ledger, then either re-throw or return a typed error result.",
|
|
432
|
+
"message": "Silent or warn-only catch detected. Per feedback_non_blocking_errors_unacceptable.md every catch must LOUD-log + ledger + resolve. Replace with structured error handling."
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
"trigger_id": "hook_crash_no_heartbeat",
|
|
436
|
+
"trigger": "hook scripts that lack a pre-execution heartbeat outside the crash boundary",
|
|
437
|
+
"rx": "#!/usr/bin/env\\s+node[^\\n]*\\n(?:[^\\n]*\\n){0,30}?(?:import|require)\\b",
|
|
438
|
+
"doctrine": "memory:feedback_ledger_writes_outside_crash_boundary.md",
|
|
439
|
+
"memory": "feedback_ledger_writes_outside_crash_boundary.md",
|
|
440
|
+
"severity": "warn",
|
|
441
|
+
"teaching": "A hook that crashes at import time cannot record its own death. The heartbeat must be written FIRST before any code that could throw.",
|
|
442
|
+
"counter_action": "Add an appendFileSync heartbeat at the very top of the hook (before any imports that could fail), then run imports + body.",
|
|
443
|
+
"message": "Hook script lacks pre-execution heartbeat outside crash boundary. Per feedback_ledger_writes_outside_crash_boundary.md, write a heartbeat first thing."
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
"trigger_id": "packet_is_not_harness",
|
|
447
|
+
"trigger": "claiming harness state without enumerating Layer 1 / Layer 2 / Layer 3",
|
|
448
|
+
"rx": "\\b(harness[\\s_-]?bound|full[\\s_-]?harness|harness[\\s_-]?binding[\\s_-]?active|workers[\\s_-]?harnessed|harnessed\\s+with\\s+the\\s+harness|deepseek\\s+with\\s+harness)\\b",
|
|
449
|
+
"doctrine": "memory:feedback_packet_is_not_harness.md",
|
|
450
|
+
"memory": "feedback_packet_is_not_harness.md",
|
|
451
|
+
"severity": "block",
|
|
452
|
+
"teaching": "Harness has 3 layers (packet/BIND/live-gates). Claiming any consumer is harness-bound without explicitly enumerating which of the 3 layers are active for that consumer is form-only emission and the lie-by-omission Hamza caught 2026-04-28.",
|
|
453
|
+
"counter_action": "Re-emit with explicit Layer 1/2/3 enumeration: packet=yes/no, BIND=yes/no, live-gates=yes/no (and which).",
|
|
454
|
+
"message": "Harness-state claim without 3-layer enumeration. Per feedback_packet_is_not_harness.md, name explicitly which of {packet, BIND, live-gates} are active for the consumer."
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
"trigger_id": "function_name_inference_without_contract_read",
|
|
458
|
+
"trigger": "(?:based on|from|by) (?:the )?(?:name|function name)|sounds like|looks like (?:a|an)|just memory search|just a search|just a cache|just a wrapper",
|
|
459
|
+
"rx": "(?:based on|from|by) (?:the )?(?:name|function name)|sounds like|looks like (?:a|an)|just memory search|just a search|just a cache|just a wrapper",
|
|
460
|
+
"doctrine": "memory:feedback_no_assumption_without_verification.md",
|
|
461
|
+
"memory": "feedback_no_assumption_without_verification.md",
|
|
462
|
+
"severity": "block",
|
|
463
|
+
"teaching": "Function names are not contracts. Inferring behavior from names instead of reading inputs, side effects, return shape, and call sites is skimming disguised as analysis.",
|
|
464
|
+
"counter_action": "Read the function body and at least one caller before asserting purpose. State observed contract: inputs, mutation/read behavior, return value, fallback path, and why the caller needs it.",
|
|
465
|
+
"message": "Name-based function inference detected. Re-read the actual function body and caller contract before making architecture claims."
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
"trigger_id": "always_on_state_treated_as_cold_start",
|
|
469
|
+
"trigger": "(?:need to|should|must).{0,80}(?:warm|rebuild|reconstruct|recreate|recompute|re-project|reproject).{0,80}(?:state|projection|manifold|cognition|garden|memory)|system is hot and ready|make it hot",
|
|
470
|
+
"rx": "(?:need to|should|must).{0,80}(?:warm|rebuild|reconstruct|recreate|recompute|re-project|reproject).{0,80}(?:state|projection|manifold|cognition|garden|memory)|system is hot and ready|make it hot",
|
|
471
|
+
"doctrine": "memory:feedback_no_assumption_without_verification.md",
|
|
472
|
+
"memory": "feedback_no_assumption_without_verification.md",
|
|
473
|
+
"severity": "block",
|
|
474
|
+
"teaching": "Aria's resident manifold/Garden/cognition substrate is always-on. Treating it as cold request-time state causes duplicate work and wrong architecture fixes.",
|
|
475
|
+
"counter_action": "Identify the resident producer and read surface first. If turn-specific mutation is required, call it once and pass the resulting packet forward; do not rebuild or re-project because the reader forgot the state model.",
|
|
476
|
+
"message": "Always-on substrate treated as cold-start work. Reframe around resident state consumption plus one required turn-specific mutation/read."
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
"trigger_id": "critical_primitive_stripped_for_latency",
|
|
480
|
+
"trigger": "(?:remove|drop|skip|turn off|bypass|stop calling).{0,80}(?:awakenAria|ProjectAllDomains|PerturbHologram|project all domains|perturb hologram|Garden|True Garden|LadduniFrame|CognitiveFrame).{0,80}(?:latency|speed|fast|first-mouth|first mouth)",
|
|
481
|
+
"rx": "(?:remove|drop|skip|turn off|bypass|stop calling).{0,80}(?:awakenAria|ProjectAllDomains|PerturbHologram|project all domains|perturb hologram|Garden|True Garden|LadduniFrame|CognitiveFrame).{0,80}(?:latency|speed|fast|first-mouth|first mouth)",
|
|
482
|
+
"doctrine": "memory:feedback_full_harness_binding_must_be_structural.md",
|
|
483
|
+
"memory": "feedback_full_harness_binding_must_be_structural.md",
|
|
484
|
+
"severity": "block",
|
|
485
|
+
"teaching": "Latency fixes must not strip critical cognition primitives. The fix is single-source sequencing and packet reuse, not removing Aria's living state transitions.",
|
|
486
|
+
"counter_action": "Preserve critical primitives. Deduplicate by collecting their outputs once per turn, then thread that shared per-turn cognition packet through first-mouth and follow-up lanes.",
|
|
487
|
+
"message": "Critical Aria primitive proposed for removal as a latency shortcut. Preserve it and deduplicate sequencing instead."
|
|
488
|
+
},
|
|
489
|
+
{
|
|
490
|
+
"trigger_id": "garden_awaken_misclassified_as_memory_search",
|
|
491
|
+
"trigger": "(?:awakenAria|Garden awakening|True Garden).{0,80}(?:just|only|merely).{0,40}(?:memory search|search memories|qdrant search|semantic search)|(?:no need|do not need).{0,80}(?:awakenAria|Garden awakening|True Garden)",
|
|
492
|
+
"rx": "(?:awakenAria|Garden awakening|True Garden).{0,80}(?:just|only|merely).{0,40}(?:memory search|search memories|qdrant search|semantic search)|(?:no need|do not need).{0,80}(?:awakenAria|Garden awakening|True Garden)",
|
|
493
|
+
"doctrine": "memory:feedback_no_assumption_without_verification.md",
|
|
494
|
+
"memory": "feedback_no_assumption_without_verification.md",
|
|
495
|
+
"severity": "block",
|
|
496
|
+
"teaching": "awakenAria is a Garden awakening bridge over the unified manifold with Qdrant hydration fallback, not a disposable memory-search helper.",
|
|
497
|
+
"counter_action": "Read true-garden.ts and caller context. Preserve awakenAria when Garden continuity is needed; optimize by avoiding duplicate awaken/fetch paths, not by deleting the awakening bridge.",
|
|
498
|
+
"message": "Garden awakening misclassified as search. Preserve awakenAria and reason from its actual manifold-first contract."
|
|
499
|
+
},
|
|
500
|
+
{
|
|
501
|
+
"trigger_id": "duplicate_projection_instead_of_per_turn_packet",
|
|
502
|
+
"trigger": "(?:call|run|invoke).{0,80}(?:ProjectAllDomains|PerturbHologram|project all domains|perturb hologram|readHotCognitionFrame).{0,80}(?:again|another|separate|also|after dispatch)|(?:another|second|extra).{0,50}(?:projection|hologram|cognition frame)",
|
|
503
|
+
"rx": "(?:call|run|invoke).{0,80}(?:ProjectAllDomains|PerturbHologram|project all domains|perturb hologram|readHotCognitionFrame).{0,80}(?:again|another|separate|also|after dispatch)|(?:another|second|extra).{0,50}(?:projection|hologram|cognition frame)",
|
|
504
|
+
"doctrine": "memory:feedback_full_harness_binding_must_be_structural.md",
|
|
505
|
+
"memory": "feedback_full_harness_binding_must_be_structural.md",
|
|
506
|
+
"severity": "warn",
|
|
507
|
+
"teaching": "The fix for overlapping cognition calls is a shared per-turn cognition packet, not more independent projection calls that drift or duplicate work.",
|
|
508
|
+
"counter_action": "Create or reuse one turn substrate object containing embedding, perturb snapshot, ProjectAllDomains result, awakenAria Garden block, DeepSoul/Noor/shards/Mizan signals; pass it downstream.",
|
|
509
|
+
"message": "Duplicate projection path detected. Replace with one per-turn cognition packet and shared consumption."
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
"trigger_id": "premature_task_closeout",
|
|
513
|
+
"trigger": "(?:done|complete|completed|ready|verified|fixed).{0,120}(?:but|except|caveat|remaining|not yet|still|separate|later|blocked|skipped)",
|
|
514
|
+
"rx": "(?:done|complete|completed|ready|verified|fixed).{0,120}(?:but|except|caveat|remaining|not yet|still|separate|later|blocked|skipped)",
|
|
515
|
+
"doctrine": "memory:feedback_no_premature_task_closeout.md",
|
|
516
|
+
"memory": "feedback_no_premature_task_closeout.md",
|
|
517
|
+
"severity": "block",
|
|
518
|
+
"teaching": "A task is not complete while material blockers remain. Completion claims must match the verified scope.",
|
|
519
|
+
"counter_action": "Do not close the task. Fix the blocker now, or create an owner-visible durable task with the exact failing surface and verification gap.",
|
|
520
|
+
"message": "Premature closeout detected: completion language coexists with unresolved blockers. Fix or durably track before emitting."
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
"trigger_id": "narrow_e2e_overclaim",
|
|
524
|
+
"trigger": "(?:production-ready|ready for production|works in general|client packages?|npm packages?|SDKs?|runtimes?|harnesses?).{0,220}(?:deal|single flow|one flow|widget|one service|specific path|covered flow)",
|
|
525
|
+
"rx": "(?:production-ready|ready for production|works in general|client packages?|npm packages?|SDKs?|runtimes?|harnesses?).{0,220}(?:deal|single flow|one flow|widget|one service|specific path|covered flow)",
|
|
526
|
+
"doctrine": "memory:feedback_narrow_e2e_overclaim.md",
|
|
527
|
+
"memory": "feedback_narrow_e2e_overclaim.md",
|
|
528
|
+
"severity": "block",
|
|
529
|
+
"teaching": "A narrow e2e does not prove general production readiness for SDKs, npm packages, runtimes, clients, or harnesses.",
|
|
530
|
+
"counter_action": "Run the general readiness matrix or explicitly limit the claim to the verified surface. Do not imply general readiness from one app flow.",
|
|
531
|
+
"message": "Narrow proof overclaim detected. General readiness requires the client/package/runtime/harness matrix."
|
|
532
|
+
},
|
|
533
|
+
{
|
|
534
|
+
"trigger_id": "advisory_gate_not_gate",
|
|
535
|
+
"trigger": "(?:non-blocking|warn(?:ing)? only|advisory|falls? through|fail open|soft fail|log(?:ged)? and continue|quality gate warning)",
|
|
536
|
+
"rx": "(?:non-blocking|warn(?:ing)? only|advisory|falls? through|fail open|soft fail|log(?:ged)? and continue|quality gate warning)",
|
|
537
|
+
"doctrine": "memory:feedback_advisory_gate_is_not_gate.md",
|
|
538
|
+
"memory": "feedback_advisory_gate_is_not_gate.md",
|
|
539
|
+
"severity": "block",
|
|
540
|
+
"teaching": "A gate that only warns or falls through is not a gate. Enforcement must fail closed where quality or doctrine is required.",
|
|
541
|
+
"counter_action": "Convert advisory paths to blocking errors, add a self-test that proves rejection, and install the hardened gate into each consumer surface.",
|
|
542
|
+
"message": "Advisory gate bypass detected. Convert to fail-closed enforcement and prove it with a blocking self-test."
|
|
543
|
+
},
|
|
544
|
+
{
|
|
545
|
+
"trigger_id": "start_new_session_as_gate_fix",
|
|
546
|
+
"trigger": "(?:start|open|begin).{0,40}(?:new|fresh).{0,30}session.{0,120}(?:fix|gate|harness|enforcement)",
|
|
547
|
+
"rx": "(?:start|open|begin).{0,40}(?:new|fresh).{0,30}session.{0,120}(?:fix|gate|harness|enforcement)",
|
|
548
|
+
"doctrine": "memory:feedback_advisory_gate_is_not_gate.md",
|
|
549
|
+
"memory": "feedback_advisory_gate_is_not_gate.md",
|
|
550
|
+
"severity": "block",
|
|
551
|
+
"teaching": "A new session is not an enforcement fix. It only reloads whatever gate contract exists; broken gates remain broken.",
|
|
552
|
+
"counter_action": "Fix the runtime/plugin/hook contract, reinstall it, and run a live bad-action/bad-output self-test that proves blocking."
|
|
553
|
+
},
|
|
554
|
+
{
|
|
555
|
+
"trigger_id": "registry_image_drift",
|
|
556
|
+
"trigger": "image.?pull|ErrImageNeverPull|ImagePullBackOff|registry gc|image.*missing|image.*not.*found",
|
|
557
|
+
"rx": "image.?pull|ErrImageNeverPull|ImagePullBackOff|registry gc|image.*missing|image.*not.*found",
|
|
558
|
+
"doctrine": "memory:feedback_registry_image_drift.md",
|
|
559
|
+
"memory": "feedback_registry_image_drift.md",
|
|
560
|
+
"severity": "warn",
|
|
561
|
+
"teaching": "Images missing from localhost:5000 is NEVER a GC problem — it's a build-gap. Every service in service-registry.json must have its image built and pushed after any registry flush, node upgrade, or cluster restart.",
|
|
562
|
+
"counter_action": "Rebuild + push the missing image via: cd apps/<service> && docker build -t localhost:5000/<image>:latest . && docker push localhost:5000/<image>:latest && kubectl rollout restart deployment/<name> -n aria. Never just delete the pod or scale-to-zero. Never blame the registry — the image was never there.",
|
|
563
|
+
"message": "Images missing from localhost:5000 — see feedback_registry_image_drift.md"
|
|
564
|
+
},
|
|
565
|
+
{
|
|
566
|
+
"trigger_id": "missing_k8s_manifest",
|
|
567
|
+
"trigger": "no.*manifest|no.*deployment.*yaml|missing.*k8s|kubectl.*not.*found|deployment.*not.*exist",
|
|
568
|
+
"rx": "no.*manifest|no.*deployment.*yaml|missing.*k8s|kubectl.*not.*found|deployment.*not.*exist",
|
|
569
|
+
"doctrine": "memory:feedback_registry_image_drift.md",
|
|
570
|
+
"memory": "feedback_registry_image_drift.md",
|
|
571
|
+
"severity": "warn",
|
|
572
|
+
"teaching": "A service without a K8s manifest is not deployed — it's aspirational code. Every service in the registry must have a canonical k8s/<service>.yaml manifest. Without it, kubectl apply cannot restore the service after cluster restart.",
|
|
573
|
+
"counter_action": "Create the canonical K8s manifest (Deployment + Service + liveness probe) at k8s/<service>.yaml. Register the service in k8s/service-registry.json. Never deploy via ad-hoc kubectl run or docker run — only via a version-controlled manifest.",
|
|
574
|
+
"message": "Service lacks K8s manifest — see feedback_registry_image_drift.md"
|
|
575
|
+
}
|
|
576
|
+
]
|
|
577
|
+
}
|