| 1 | # 04-cleared-axes - The Anti-Tunnel-Vision Memory |
| 2 | |
| 3 | This is Cyclops v2's **breadth memory**. Every time an axis is screened and does not yield a |
| 4 | [[../00-doctrine/SEVERITY-GATE|gate-family]] finding, it is logged here - *before* moving on (the |
| 5 | [[../00-doctrine/OPERATING-CORE#4-the-anti-drift-rule-log-cleared-axes-rotate-archetypes|anti-drift rule]]). |
| 6 | The log exists so the agent: |
| 7 | |
| 8 | 1. **Never re-screens the same (target, archetype, axis)** - no re-walking cleared ground. |
| 9 | 2. **Can prove it covered breadth**, not just depth on one tunnel - the v1 failure. |
| 10 | 3. **Has somewhere to put low/medium hardening notes** so they never leak into a finding report (the |
| 11 | [[../00-doctrine/SEVERITY-GATE|gate]] forbids off-path reports; this is where those observations go). |
| 12 | |
| 13 | An entry here is **not** a failure. A clean **DISPROVEN** is a completed unit of work |
| 14 | ([[../00-doctrine/OPERATING-CORE#5-disproven-is-a-success|DISPROVEN is a success]]). |
| 15 | |
| 16 | --- |
| 17 | |
| 18 | ## Entry format |
| 19 | |
| 20 | One row per cleared axis. Append-only. Use this exact schema (markdown table or one file per target - |
| 21 | table is fine to start). |
| 22 | |
| 23 | | Field | Meaning | |
| 24 | |---|---| |
| 25 | | `date` | ISO date the axis was cleared (YYYY-MM-DD). | |
| 26 | | `target` | The software + **pinned version/commit** (novelty depends on the exact tree). | |
| 27 | | `archetype` | Which [[../01-archetypes/electron-desktop|archetype lens]] was applied. | |
| 28 | | `axis` | The specific kill-chain / sink / hypothesis screened (be precise - name the sink/route). | |
| 29 | | `result` | `DISPROVEN` \| `SOURCE_CONFIRMED-stalled` \| `SIBLING-CVE` \| `HARDENING-NOTE` \| `OUT-OF-SCOPE`. | |
| 30 | | `oracle` | What was driven and what it returned (e.g. "ASan fuzz 6h, only null-deref DoS"; "no artifact"). | |
| 31 | | `reason` | *Why* it cleared - the guard found, the missing control, why no gate-family path. | |
| 32 | | `revisit` | A condition that would reopen it (e.g. "if new GGUF KV type lands", "if auth is disabled"), or `none`. | |
| 33 | |
| 34 | ### Result-code meanings |
| 35 | |
| 36 | - **DISPROVEN** - drove the oracle, the impact did not materialize. The strongest clear. Permanently |
| 37 | retired unless `revisit` fires. |
| 38 | - **SOURCE_CONFIRMED-stalled** - a real source→sink path exists but the oracle couldn't be driven yet |
| 39 | (couldn't build a replica, needs a primitive we don't have). Parked, not dead. |
| 40 | - **SIBLING-CVE** - the candidate matched an existing public CVE/advisory (per |
| 41 | [[../06-methods/NOVELTY-DOCTRINE#the-sibling-cve-gate-novel-vs-variant-run-before-deep-work|the sibling gate]]). |
| 42 | Record the CVE id so we never re-investigate it. |
| 43 | - **HARDENING-NOTE** - a real low/medium issue (IDOR, missing header, verbose error, exposed-but-empty |
| 44 | service) that is **below the gate** and therefore **not a finding**. Lives here, never in a report. |
| 45 | - **OUT-OF-SCOPE** - authorization/scope ruled it out per |
| 46 | [[../00-doctrine/OPERATING-CORE#1-authorization-the-only-place-cyclops-is-allowed-to-point|the charter]]. |
| 47 | |
| 48 | --- |
| 49 | |
| 50 | ## Example entries |
| 51 | |
| 52 | ``` |
| 53 | | date | target | archetype | axis | result | oracle | reason | revisit | |
| 54 | |------------|--------------------------------|--------------------|-------------------------------------------------------------|-------------------------|-----------------------------------------------------|------------------------------------------------------------------------|--------------------------------------| |
| 55 | | 2026-06-11 | llama.cpp @a1b2c3d | ml-model-loaders | gguf_init_from_file KV-array length → memcpy heap overflow | DISPROVEN | AFL++ 8h + ASan; 3 crashes, all null-deref DoS | length validated against file size at gguf.c:412 before alloc | if a new KV array type is added | |
| 56 | | 2026-06-11 | Obsidian v1.x (asar) | electron-desktop | markdown render XSS → contextBridge → child_process | DISPROVEN | crafted note in disposable VM, no callback | contextIsolation on; bridge exposes no fs/exec method | if a plugin widens the bridge | |
| 57 | | 2026-06-11 | Flowise @e4f5g6h | ai-agent-mcp | /api/v1 unauth route → code node RCE | SIBLING-CVE | replicated public auth-bypass | matches CVE-2024-xxxxx, already fixed upstream | none | |
| 58 | | 2026-06-11 | Grafana v11.x | devops-infra | datasource proxy SSRF → IMDS | HARDENING-NOTE | SSRF callback fired, IMDS blocked | reaches outbound but metadata egress filtered; bare SSRF below gate | if deployed without egress filtering | |
| 59 | ``` |
| 60 | |
| 61 | --- |
| 62 | |
| 63 | ## Usage rules |
| 64 | |
| 65 | - **Append before you rotate.** You may not move to the next archetype until the cleared axes of the |
| 66 | current one are logged. The rotation requirement is enforced by this log existing. |
| 67 | - **Check before you screen.** At the start of any (target, archetype) pass, read existing entries for |
| 68 | that target - if the axis is already DISPROVEN/SIBLING and `revisit` hasn't fired, skip it. |
| 69 | - **Pin versions.** A clear is only valid for the pinned commit; new code reopens the surface (that's |
| 70 | [[../06-methods/NOVELTY-DOCTRINE#lever-1-hunt-freshly-released-code-the-time-arbitrage|Lever 1]]). |
| 71 | - **Hardening notes die here.** Resist the pull to "at least report the IDOR." The gate says no; the |
| 72 | log is where it goes. |