|
| 1 | +# helix-adapter v1.7.3 Release Notes |
| 2 | + |
| 3 | +**Released:** 2026-07-06 |
| 4 | +**Branch:** spider-dev → main |
| 5 | +**PyPI:** `pip install helix-adapter==1.7.3` |
| 6 | + |
| 7 | +--- |
| 8 | + |
| 9 | +## Overview |
| 10 | + |
| 11 | +v1.7.3 is a **Cedar routing and documentation-accuracy release**. The |
| 12 | +headline fix makes Foundry's Cedar model-routing policies actually |
| 13 | +reachable end-to-end — three of five were either dead code or pointed at |
| 14 | +a nonexistent model before this release. The rest of the release closes |
| 15 | +gaps found during a docs/terminology audit: the constitutional prompt |
| 16 | +itself still had the γ/drift conflation the 1.7.1 cleanup was supposed to |
| 17 | +remove, and the dev-onboarding deck had fabricated content that didn't |
| 18 | +match anything actually implemented. |
| 19 | + |
| 20 | +No changes to `HelixAdapter`, `MerkleTree`, or the receipt schema. |
| 21 | +`HelixSession`'s behavior is unaffected except for the prompt wording fix |
| 22 | +below (which changes prompt *text*, not the adapter's logic). |
| 23 | + |
| 24 | +--- |
| 25 | + |
| 26 | +## What's Fixed |
| 27 | + |
| 28 | +### Cedar routing — all 5 policies now reachable (previously 2 of 5) |
| 29 | + |
| 30 | +`RoutedChatRequest` and `SessionStartRequest` conflated two different |
| 31 | +context fields under one name: `action_type` (Cedar's adversarial/ |
| 32 | +structured-output routing trigger — `bash`/`execute`/`api_call`/`shell` |
| 33 | +or `write_file`/`edit_file`/`apply_patch`/`summarize`) was being fed from |
| 34 | +`req.action`, which only ever holds a completely different vocabulary |
| 35 | +(`analyze`/`search`/`write_file`/`summarize`/...) used by the static |
| 36 | +routing fallback. Since the two vocabularies never overlapped, the |
| 37 | +adversarial-pool policy could never fire through the actual API — it |
| 38 | +passed unit tests that built context dicts by hand, but was dead code in |
| 39 | +production. |
| 40 | + |
| 41 | +Fixed by adding a genuine, separate, optional `action_type` field to both |
| 42 | +request models. `cedar_route()` also now drops `None`-valued context |
| 43 | +fields before evaluation, so an omitted `action_type` reads as genuinely |
| 44 | +absent to Cedar's `context has X` checks, rather than the literal string |
| 45 | +`"None"` (the evaluator's `str(v)` fallback for non-primitive types). |
| 46 | + |
| 47 | +All 5 `routing.cedar` policies verified **live** against the running |
| 48 | +qwen-intl deployment — not just unit-tested — via temporary, immediately |
| 49 | +revoked debug API keys. |
| 50 | + |
| 51 | +### Sovereign pool: qwen-long → qwen-flash |
| 52 | + |
| 53 | +The `sovereign` pool (EU/multilingual locale routing) pointed at |
| 54 | +`qwen-long`, which doesn't exist on this DashScope International account |
| 55 | +(confirmed via the live model list — 148 models, no `qwen-long`). Tried |
| 56 | +`qwen-mt-plus` as a thematically better fit, but it's a translation-only |
| 57 | +endpoint that rejects `system`-role messages outright — incompatible |
| 58 | +with Helix's adapter, which always injects the constitutional prompt as |
| 59 | +a system message. Landed on `qwen-flash`, a general chat-completions |
| 60 | +model, verified with a real system+user message pair (not just a bare |
| 61 | +user message) before wiring it in. |
| 62 | + |
| 63 | +### Constitutional prompt: γ/drift conflation removed from the prompt itself |
| 64 | + |
| 65 | +The 1.7.1 terminology cleanup touched docs and the Foundry dashboard's |
| 66 | +display logic but never touched `prompt.py`'s actual content. Found via |
| 67 | +a website audit (the widget page renders the raw constitutional prompt): |
| 68 | +rules 4.5 and 7 still used γ and "drift" in contexts that are actually |
| 69 | +about marker coverage, not the constitutional convergence tolerance |
| 70 | +γ=0.17. This is the prompt every model reads on every turn, so the |
| 71 | +conflation was live in production, not just a docs inconsistency. |
| 72 | + |
| 73 | +- "NO SELF-REPORTED DRIFT" / "γ-drift flags" → "NO SELF-REPORTED MARKER |
| 74 | + COVERAGE" / "marker-coverage flags" |
| 75 | +- "drift risk (γ)" → "marker-coverage risk" |
| 76 | +- "extra scrutiny on γ reporting is required" → "extra scrutiny on |
| 77 | + labeling discipline is required" (also resolves an internal |
| 78 | + contradiction — the model is told not to self-report coverage at all, |
| 79 | + so telling it to scrutinize its own "γ reporting" didn't make sense) |
| 80 | + |
| 81 | +Wording only, no behavioral/logic change. |
| 82 | + |
| 83 | +### PyPI author metadata |
| 84 | + |
| 85 | +`pyproject.toml`'s `authors` entry combined name+email, which PEP 621 |
| 86 | +collapses into a single `Author-email` field, leaving PyPI's displayed |
| 87 | +"Author" field blank. Split into `authors` (name only) and `maintainers` |
| 88 | +(name+email) so both fields populate. Verified via local sdist build. |
| 89 | +Takes effect on this release — PyPI's already-published 1.7.2 metadata |
| 90 | +is immutable and unaffected. |
| 91 | + |
| 92 | +--- |
| 93 | + |
| 94 | +## What's New |
| 95 | + |
| 96 | +### RFC 0004: Cedar Model Routing |
| 97 | + |
| 98 | +Foundry's `routing.cedar` model-pool-selection policy layer had almost no |
| 99 | +dedicated documentation — a one-line mention in `foundry/README.md` and |
| 100 | +nothing distinguishing it from RFC 0003's action-authorization Cedar |
| 101 | +Gate, despite being an architecturally separate system (same policy |
| 102 | +engine, different question: which model handles this request, vs. is |
| 103 | +this action allowed to execute). RFC 0004 documents the schema, all 5 |
| 104 | +routing policies, the `action`/`action_type` distinction, and the |
| 105 | +deliberate fail-open (routing) vs. fail-closed (Cedar Gate) difference. |
| 106 | + |
| 107 | +### Dev onboarding deck: PDF → HTML |
| 108 | + |
| 109 | +The PDF dev-onboarding deck had two content issues found on review: a |
| 110 | +fabricated "Drift Telemetry" taxonomy (four categories with invented |
| 111 | +automated actions — HALT/REMEDIATE/RESTATE/FLAG — that don't correspond |
| 112 | +to anything implemented, later expanded in a subsequent draft to seven |
| 113 | +categories using real commits as false corroborating evidence), and a |
| 114 | +marker table on one slide missing `[CONCLUSION]` while a different slide |
| 115 | +in the same deck had the correct five-marker table. The new HTML version |
| 116 | +fixes both: the fabricated telemetry section is gone, replaced with the |
| 117 | +actual implemented marker-coverage metric, and the marker table is |
| 118 | +complete everywhere. One additional gap found and fixed during review — |
| 119 | +the Four Invariants slide was only showing three of four tiles. |
| 120 | + |
| 121 | +--- |
| 122 | + |
| 123 | +## Testing |
| 124 | + |
| 125 | +Full suite: **141 passing**, zero regressions. Cedar routing fixes |
| 126 | +verified live (not just unit-tested) against the running qwen-intl |
| 127 | +deployment for all 5 policies plus the no-context static-default |
| 128 | +fallback. Prompt terminology fix verified via live redeploy — the widget |
| 129 | +page's rendered constitutional prompt confirmed to show the corrected |
| 130 | +text in production. |
| 131 | + |
| 132 | +ruff + black clean on `src/ foundry/`. |
| 133 | + |
| 134 | +--- |
| 135 | + |
| 136 | +## Breaking Changes |
| 137 | + |
| 138 | +None. Fully backward compatible. |
| 139 | + |
| 140 | +--- |
| 141 | + |
| 142 | +## Upgrade |
| 143 | + |
| 144 | +```bash |
| 145 | +pip install --upgrade helix-adapter==1.7.3 |
| 146 | +``` |
| 147 | + |
| 148 | +No configuration or environment changes required. If you deploy Foundry |
| 149 | +with a custom `routing.cedar`/`models.json`, double check any policy that |
| 150 | +relies on `action_type` — it now reads from a genuinely separate request |
| 151 | +field rather than mirroring `action`. |
| 152 | + |
| 153 | +--- |
| 154 | + |
| 155 | +## What's Next |
| 156 | + |
| 157 | +- Whether routing decisions should carry richer audit context (which |
| 158 | + specific policy matched, not just the resulting pool) into the |
| 159 | + receipt — raised in review, not yet implemented. |
| 160 | +- The `sovereign` pool's original brief (deep regulatory-text analysis, |
| 161 | + full-corpus Merkle auditing) implies a long-context model requirement |
| 162 | + that `qwen-flash` doesn't meet. Revisit pending budget/credit |
| 163 | + availability and confirmation of whether DashScope offers an actual |
| 164 | + long-context successor to `qwen-long`. |
| 165 | +- Website doc alignment is ongoing — repo and prompt content are now |
| 166 | + consistent; continue watching for any remaining stale terminology on |
| 167 | + the live site as it's found. |
0 commit comments