Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
158 commits
Select commit Hold shift + click to select a range
94021ec
feat(daemon): add named model swap profiles
Sep 10, 2026
14f344e
feat(daemon): wait for profile readiness
Sep 10, 2026
1f80150
test(daemon): cover profile readiness timeout
Sep 10, 2026
c980106
feat(daemon): add shutdown client command
Sep 10, 2026
f88da87
fix(swap): enforce readiness and document direct routing integration
Sep 10, 2026
492a52c
test(swap): qualify concurrent routing and idle eviction with private…
Sep 10, 2026
899d571
fix(swap): recover previous launch after replacement spawn failure
Sep 10, 2026
accf7f3
fix(swap): recover failed readiness without overriding newer lifecycl…
Sep 10, 2026
4c35cdb
test(swap): add strict streaming disconnect qualification gate
Sep 10, 2026
f9b0453
test(swap): exercise real Linux process rollback and worker cleanup
Sep 10, 2026
64dcc68
test(swap): assert termination signals and document Linux recovery ev…
Sep 10, 2026
99bdea1
docs(swap): record combined branch validation and remaining completio…
Sep 10, 2026
64ab64f
test(swap): qualify live cancellation and real model failure recovery
Sep 10, 2026
ae566f4
docs(swap): establish source-backed native parity matrix
Sep 10, 2026
6ca47ff
feat(swap): validate native routing policy configuration
Sep 10, 2026
a392af9
feat(swap): add native inference routing admission
Sep 10, 2026
24849c6
feat(swap): evict idle routed engines
Sep 10, 2026
901c0b9
test(swap): exercise invalid profile group validation
Sep 10, 2026
2e4316c
feat(swap): expose router admission metrics
Sep 10, 2026
ae7ccdd
feat(swap): add guarded upstream passthrough
Sep 10, 2026
2865ef0
feat(swap): reload validated routing catalogs
Sep 10, 2026
0d0cea5
feat(swap): enforce single-slot persistent residency
Sep 10, 2026
1b9c59a
feat(swap): cancel routed inflight requests
Sep 10, 2026
76c3288
feat(swap): report configured and resident profiles
Sep 10, 2026
667277c
docs(swap): distinguish native routing evidence
Sep 10, 2026
596cfae
test(swap): exercise real loopback SSE proxying
Sep 10, 2026
7124501
feat(swap): record native proxy timing signals
Sep 10, 2026
8551430
feat(swap): configure native upstream timeout
Sep 10, 2026
66e50cd
feat(swap): add safe profile request filters
Sep 10, 2026
d5590f4
test(swap): cover native router with real child
Sep 10, 2026
a440057
fix(swap): protect router management with API keys
Sep 10, 2026
80bb5dd
docs(swap): record current daemon regression gate
Sep 10, 2026
76f531d
docs(swap): add native qualification matrix
Sep 10, 2026
fffde24
feat(swap): add private router event stream
Sep 14, 2026
7007dbc
feat(swap): allocate dynamic routed ports
Sep 14, 2026
56afc86
feat(swap): add native management load
Sep 14, 2026
e5d0a41
feat(swap): expose native model list and readiness
Sep 14, 2026
32d56c7
fix(swap): keep concrete paths out of router logs
Sep 14, 2026
10bb1b6
docs(swap): inventory pinned reference surfaces
Sep 14, 2026
4729992
fix(swap): reject unsupported group coexistence
Sep 14, 2026
0dabbd0
feat(swap): add private local management UI
Sep 14, 2026
52aebcf
feat(swap): safely watch catalog changes
Sep 14, 2026
b6ac3ee
feat(swap): expose router transfer timing
Sep 14, 2026
1ee4499
test(swap): cover every routed text endpoint
Sep 14, 2026
44d8354
feat(swap): add native routing benchmark gate
Sep 14, 2026
c45a5d0
fix(swap): restrict maintenance benchmark to Linux
Sep 14, 2026
3cd2082
test(swap): validate native benchmark observations
Sep 14, 2026
b238a7f
feat(swap): retain benchmark metric snapshots
Sep 14, 2026
af25b64
test(swap): preserve routed upstream errors
Sep 14, 2026
a75a6aa
test(swap): exercise dynamic ports with real children
Sep 14, 2026
67b0f63
fix(swap): freeze active routing policy on reload
Sep 14, 2026
984bba9
test(swap): cover active group policy reload conflict
Sep 14, 2026
f572b9c
fix(swap): keep router credentials out of upstream
Sep 14, 2026
de1885a
test(swap): verify auth stripping over loopback
Sep 14, 2026
cb1710d
fix(swap): preserve engine response headers
Sep 14, 2026
1d8af20
test(swap): rotate router keys through catalog reload
Sep 14, 2026
5cd63d3
docs(swap): separate current and historical evidence
Sep 14, 2026
2d0390c
test(swap): verify benchmark scenario state
Sep 14, 2026
4e8b7b0
feat(swap): capture private benchmark hardware snapshots
Sep 14, 2026
7d9465e
fix(swap): validate native benchmark catalog
Sep 14, 2026
079bedd
test(swap): require benchmark process observations
Sep 14, 2026
f2a9c21
test(swap): verify benchmark listener cleanup
Sep 14, 2026
5ce51c0
docs(swap): retain direct benchmark lifecycle evidence
Sep 14, 2026
64af6be
docs(swap): record current daemon verification
Sep 14, 2026
9d795ae
fix(swap): verify resident identity in readiness
Sep 14, 2026
d9dc7f7
test(swap): reject stale args and port in readiness
Sep 14, 2026
5b31904
fix(swap): expose stale resident identity
Sep 14, 2026
644482b
fix(swap): report stale children as nonresident
Sep 14, 2026
6941425
feat(swap): export resident identity metric
Sep 14, 2026
b01e77e
test(swap): require concrete benchmark identity
Sep 14, 2026
aa1bf63
feat(swap): record usage-derived benchmark throughput
Sep 14, 2026
3e4fbad
feat(swap): expose benchmark decode interval
Sep 14, 2026
a6d5244
fix(swap): exclude cancelled streams from completions
Sep 14, 2026
d01ba57
feat(swap): qualify native router cancellation
Sep 14, 2026
92a3987
feat(swap): qualify same-model concurrency
Sep 14, 2026
235d3a2
feat(swap): qualify native TTL eviction
Sep 14, 2026
5b6eda1
feat(swap): qualify active catalog reload conflict
Sep 14, 2026
53a96ce
feat(swap): qualify failed-switch rollback
Sep 14, 2026
4dbc56b
test(swap): require rollback accounting evidence
Sep 14, 2026
c62e3a5
fix(swap): bind exact re-adopted residency
Sep 14, 2026
e9901c0
test(swap): cover real child router re-adoption
Sep 14, 2026
4961590
feat(swap): qualify daemon re-adoption
Sep 14, 2026
9d0e9d4
docs(swap): refresh draft PR evidence
Sep 14, 2026
0033721
docs(swap): keep PR evidence revision-stable
Sep 14, 2026
37df2bb
feat(swap): qualify persistent capacity protection
Sep 14, 2026
1ac3053
test(swap): prove unload one and all semantics
Sep 14, 2026
b3d5c50
docs(swap): record current daemon suite
Sep 14, 2026
bd2b630
feat(swap): qualify conflicting request drain
Sep 14, 2026
5944629
docs(swap): align parity classifications with ownership
Sep 14, 2026
b0fe4ea
fix(swap): filter hop-by-hop response headers
Sep 14, 2026
e1370d3
fix(swap): stabilize unknown model errors
Sep 14, 2026
ca5cfaf
docs(swap): refresh full suite evidence
Sep 14, 2026
05cb116
fix(swap): reserve request IDs before admission
Sep 14, 2026
e494236
fix(swap): cancel abandoned admission waiters
Sep 14, 2026
82be471
test(swap): classify legacy generate routing
Sep 14, 2026
12c5bb6
fix(swap): cancel requests across owned phases
Sep 14, 2026
e990b5c
docs(swap): align research with native ownership
Sep 14, 2026
cc14820
fix(swap): linearize router readiness probes
Sep 14, 2026
94c12f9
fix(swap): serialize manual and routed lifecycle
Sep 14, 2026
1af92a7
fix(swap): retain manual ownership after disconnect
Sep 14, 2026
96d8e60
fix(swap): finish manual transactions after disconnect
Sep 14, 2026
c4667b1
fix(swap): quiesce routing before daemon shutdown
Sep 14, 2026
68caf9e
fix(swap): coordinate daemon exit with routing
Sep 14, 2026
5b6ab25
fix(swap): make catalog binding atomic with admission
Sep 14, 2026
d460906
test(swap): qualify authenticated control plane
Sep 14, 2026
e19b99d
feat(swap): add alternate model aliases
Sep 14, 2026
2c51f8d
feat(swap): add browser CORS compatibility
Sep 14, 2026
4626450
feat(swap): support pinned API key forms
Sep 14, 2026
c5dee9c
feat(swap): enforce concurrency admission limits
Sep 14, 2026
744eb0c
feat(swap): expose exact model load status
Sep 14, 2026
2e720ef
fix(swap): align public models alias
Sep 14, 2026
0933243
feat(swap): support namespaced model ids
Sep 14, 2026
e376fa6
docs(swap): classify streaming load feedback gap
Sep 14, 2026
c1b1004
feat(swap): stream cold model loading state
Sep 14, 2026
f55dec7
test(swap): gate cold loading with real child
Sep 14, 2026
51c1869
docs(swap): refresh current PR audit
Sep 14, 2026
a56ccdc
feat(swap): preserve stateless response routes
Sep 14, 2026
fdfce8b
ci(swap): run daemon suite on Linux
Sep 14, 2026
0b24bbf
ci(swap): expose bounded Linux failures
Sep 14, 2026
b25b2cb
test(swap): fix Linux SSE fixture
Sep 14, 2026
e906b73
test(swap): emit real SSE newlines on Linux
Sep 15, 2026
5ee1e26
test(swap): tolerate vanished Linux workers
Sep 15, 2026
098d758
docs(swap): record hosted Linux process evidence
Sep 15, 2026
22cbd39
ci(swap): report clean Linux totals
Sep 15, 2026
bf70a04
fix(swap): gate maintenance by exact host
Sep 15, 2026
4615daa
docs(swap): record maintenance host gate evidence
Sep 15, 2026
261d80f
fix(daemon): make AMD memory evidence fail closed
Sep 15, 2026
8930738
docs(swap): record AMD observability evidence
Sep 15, 2026
89d026c
Add safe model capability metadata
Sep 15, 2026
bf4a584
Record capability metadata verification
Sep 15, 2026
70fe9f4
Add safe request parameter filters
Sep 15, 2026
2b35abd
Record request filter verification
Sep 15, 2026
cbf00d6
feat: add native warm and pin selectors
Sep 15, 2026
6ba35b0
docs: record selector verification
Sep 15, 2026
3b257bd
feat: add runtime routing profiles
Sep 15, 2026
efe605e
docs: record runtime profile evidence
Sep 15, 2026
c0833f4
feat: add safe readiness and proxy targets
Sep 15, 2026
743361b
docs: record readiness target evidence
Sep 15, 2026
2c90c60
feat(swap): support upstream model name overrides
Sep 15, 2026
8f71070
docs(swap): record upstream model rewrite evidence
Sep 15, 2026
07abf68
feat(swap): expose safe model listing metadata
Sep 15, 2026
08d807b
docs(swap): record model metadata parity evidence
Sep 15, 2026
53b1c6c
feat(swap): support per-profile upstream timeouts
Sep 15, 2026
da02637
docs(swap): record profile timeout evidence
Sep 15, 2026
a3fc0dd
feat(swap): preload a model through native startup
Sep 15, 2026
17fe93c
docs(swap): record startup preload evidence
Sep 15, 2026
5a98b29
Add pinned source inventory and safe upstream guard
Sep 15, 2026
4b81267
Record source inventory and upstream guard evidence
Sep 15, 2026
38c2457
Add bounded activity and opt-in captures
Sep 15, 2026
b2c80e8
Record bounded activity and capture evidence
Sep 15, 2026
493aecd
feat(swap): persist activity and add session-aware UI
Sep 15, 2026
df13574
docs(swap): record durable activity CI evidence
Sep 15, 2026
174bda1
feat(swap): add bounded periodic performance history
Sep 15, 2026
da4b8df
docs(swap): record performance history evidence
Sep 15, 2026
c5d130b
docs(swap): record current combined-tree CPU evidence
Sep 15, 2026
39c3aaa
test(swap): gate live periodic performance evidence
Sep 15, 2026
a5846c0
docs(swap): refresh final CPU qualification evidence
Sep 15, 2026
0c356c1
docs: explain FreeToken swap code line by line
Sep 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
173 changes: 173 additions & 0 deletions .github/workflows/freetoken-swap-daemon.yml

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ For More details:
- [Quick start](https://github.com/FlashML-org/FreeToken/blob/main/docs/quickstart.md)
- [Supported models](https://github.com/FlashML-org/FreeToken/blob/main/docs/models.md)
- [CLI reference](https://github.com/FlashML-org/FreeToken/blob/main/docs/cli.md)
- [freetoken-swap named model switching](docs/freetoken-swap.md)

## Citation

Expand Down

Large diffs are not rendered by default.

569 changes: 569 additions & 0 deletions benchmarks/swap/qualify.py

Large diffs are not rendered by default.

304 changes: 304 additions & 0 deletions benchmarks/swap/qualify_native_recovery.py

Large diffs are not rendered by default.

2,611 changes: 2,611 additions & 0 deletions benchmarks/swap/qualify_native_router.py

Large diffs are not rendered by default.

148 changes: 148 additions & 0 deletions docs/freetoken-swap-completion-audit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
# FreeToken swap completion audit

This audit preserves the full integration goal. A draft PR and passing CPU tests
do not establish that every lifecycle behavior is qualified on real models. It
distinguishes historical evidence from current-branch evidence: neither is
silently promoted to proof for a later native-router implementation.

## Historical combined-source verification

- Swap source: `64dcc683d4e767fb4af8b7088ebb58564b1b7535`.
- AMD model-repair source: `de23ad6a9e74aecc72b9f6b9e81b8c3376ff2e60`.
- Git's clean merge-tree result: `c3c0ae54a09857b98bba83cfc75b91264e6eeb43`.
- The combined tree was archived into an isolated temporary directory on
GMKtek EVO-X2. Neither branch nor the live runtime was replaced by that tree.
- Historical Linux validation: 114 daemon, privacy, benchmark, and reproducibility tests
passed, including the real child-process recovery tests. No skips.
- Combined-tree Qwen validation: 21 grouped-output, SSM, and config tests passed.
- The protected llama.cpp service remained active throughout those CPU checks.
This archived combined tree is not the current `freetoken-swap` branch.

Reproduce the combined-tree CPU suites from the extracted source, with its
`python` directory on `PYTHONPATH` and the required test dependencies installed:

```bash
python -m pytest tests/daemon \
tests/benchmarks/test_public_document_privacy.py \
tests/benchmarks/test_gmk_evo_x2_benchmark.py \
tests/reproduce/test_collect_host_manifest.py -q
python -m pytest tests/models/test_qwen36_gdn_grouped_output.py \
tests/models/test_qwen35_gguf_ssm_a.py \
tests/models/test_qwen35_gguf_config.py -q
```

## Current checkout verification

- Read-only comparison reference: `mostlygeek/llama-swap`
`41ec321b6216d838488b2a7d936274ed227c0c5e`, whose `LICENSE.md` says MIT.
- Local deterministic verification at `39c3aaabd6fefd7dd462e85e8dfd2ba03be849ab`
on the current Windows checkout: 345 daemon
tests passed and 7 Linux-only tests were skipped. This proves CPU/HTTP
behavior only; it does not substitute for real-model evidence.
- GitHub-hosted Ubuntu verification at
`39c3aaabd6fefd7dd462e85e8dfd2ba03be849ab` (Actions run `34941311939`)
reported 352 tests with zero failures, errors, or skips. This includes the
fail-closed maintenance-host and measured-memory gates, AMD SMI parsing,
queued-disconnect ownership regression, and capability-metadata parser and
listing coverage, model display/metadata collision precedence, ordered
upstream-model/request-filter, per-profile upstream-timeout, safe
direct-upstream static-suffix cold-load guard, startup
preload/profile, and generated-alias coverage, and
pin/warm selector and runtime routing-profile parsing, routing, listing,
metadata, management-isolation, reload-reset, safe readiness/proxy-target,
and qualifier gates.
It also covers bounded body-free activity, authenticated aggregate and
capture retrieval APIs, capture-disabled defaults, serialized-byte and
per-response bounds, credential-header redaction, binary fidelity, eviction,
and exact cold-loading downstream SSE capture. Body-free activity recovery,
bounded corruption handling, atomic compaction, path-free persistence health,
memory-only capture restart behavior, hashed non-credential session grouping,
and explicit-on-click UI capture retrieval are also covered.
The bounded periodic-performance tests cover one-hour eviction, strict
RFC3339 filtering, authentication, disabled 503 behavior, generic probe
failure health, reload generation cleanup, and path/PID omission.
It also executes the
disposable process-group, readiness rollback,
re-adoption, dynamic-port, routed SSE, and cleanup tests that Windows skips.
It is current-branch Linux process evidence, not current-engine or GPU-model
qualification.
- No current-branch maintenance-window benchmark artifact has been published.
Raw paths, prompts, responses, logs, and host data must remain private.
- Current isolated combined-tree CPU verification used swap head
`39c3aaabd6fefd7dd462e85e8dfd2ba03be849ab` and draft AMD compatibility
head `c0534c6f38162cb2ddfd0193cd9bf1031613dde1`. Git produced the clean
synthetic tree `74a4f3b1649442d9d8c24576751d29f30e218d04` without checking out or
changing either branch. On Windows, 377 daemon/privacy/benchmark-contract/
reproducibility tests passed with 7 expected Linux skips, and all 21
grouped-output, SSM, and GGUF configuration tests passed in a disposable
Python 3.13 / torch 2.13 CPU environment. This proves source compatibility
only; no protected service, model, GPU, or runtime was inspected or changed.

## Requirement evidence and gaps

| Requirement | Evidence | Status |
| --- | --- | --- |
| Official source, license, and provenance | Read-only llama-swap reference pinned to `41ec321b6216d838488b2a7d936274ed227c0c5e`, MIT license; research report and configuration example | Documented and reverified locally |
| Model catalog and lifecycle controls | Validated TOML catalog, collision-safe slash-namespaced and colon-variant alternate IDs, ordered upstream-model/strip/hard/soft/by-ID JSON filters with protected routing identity, runtime and startup pin profiles, singleton native startup preload, pin/warm virtual selectors with listing metadata, unlisted model entries, safe configured readiness paths and manager-owned loopback proxy prefixes, authenticated profile endpoints, native process manager, longest-prefix direct-upstream resolution, and exact explicit/dynamic/omitted-default-port re-adoption. Spillover is rejected as incompatible with one-resident capacity. | Implemented and CPU/HTTP tested; profile/selector/readiness-target/upstream-model/startup live canaries remain required |
| Automatic model routing | Native `freetoken-swap` model-ID admission, readiness-gated activation, request-preserving proxying, cancellation, TTL eviction, reload, and deterministic HTTP tests; prior direct llama-swap runs remain comparison evidence only | Implemented and CPU/HTTP tested; current native real-engine qualification remains required |
| Readiness and API compatibility | Separate `/ready`, uncached generation-aware default health checks, safe profile-configured readiness paths, exact owned-port proxy targets with optional path prefixes, ordinary and SSE completions, side-effect-free sanitized browser preflight, authenticated model-list CORS, exact `/models` listing alias, public model entries with atomic loaded/activating/unloaded status, collision-safe display/JSON metadata, and declarative text/tool/context capability metadata matching the pinned listing fields | CPU/HTTP tested; current native real-engine evidence required |
| Streaming cold-load feedback | Global/per-profile safe configuration; atomic post-concurrency cold admission; reasoning and queue-position SSE; upstream continuation; in-band terminal errors; strict warm/route/stream bypass; explicit cancellation and disconnect cleanup | Deterministic HTTP and hosted Linux disposable-child gates passed; current GMKtek native execution required |
| Concurrency and unloading | Race-safe global/per-profile reservations, default and configured limits, immediate 429, canonical/alternate sharing, same-model and conflicting-model admission, concurrent cold dynamic binding, and idle eviction are deterministically tested | Current native real-engine verification required |
| Rollback protections | Launch/readiness recovery, newer lifecycle intent, accounting preservation, and current-branch hosted Linux real-child rollback/process-group cleanup passed; historical invalid-GGUF evidence is retained separately | Current-engine real-model recovery execution remains required |
| Client cancellation | Native opaque router request IDs, atomic duplicate-ID rejection before admission/upstream work, disconnect-aware admission, queued/connecting/active request list, explicit cancel endpoint across every owned phase, orphan socket close, lease release, and cancellation metrics. Failed, disconnected, or cancelled admission and failed upstream connection release ownership safely. | Deterministic HTTP tested; current native same-instance GPU verification required |
| Authentication and observability | Bearer, Basic-password, and `X-Api-Key` inference authentication with precedence and local termination; separate `X-FT-Token` lifecycle control; catalog-key-protected `/models` compatibility alias; configured aliases and profiles; Prometheus metrics; bounded router-log SSE; exact-origin qualification credentials | Deterministic HTTP tested; current native GMKtek control-plane execution required |
| Model compatibility | Mixed-format Qwen/GDN repair, tokenizer checks, exact-model contracts, prior live completion evidence, and 21 current isolated combined-tree model tests | Source-compatible at the recorded heads; current-engine real-model qualification remains required |
| Production protection | Isolated test paths, explicit maintenance gate, exact operator-supplied hostname required before artifacts or service inspection, historical restore/completion checks, no interruption during combined-tree checks | Maintained and fail-closed; no current protected workload was touched |
| Privacy | Generic GMKtek EVO-X2 label, sanitized public metadata and examples, privacy regressions, regenerated reviewed PDF | Current publication changes sanitized; historical copies not erased |
| FreeToken-only publication | Public GitHub recheck on 2026-09-15: draft PR 1 targets `main` from `feat/freetoken-swap`, and its public PR ref matched the branch head at recheck; draft PR 2 targets `amd-rocm-gfx1151` from `fix/qwen36-swap-compat` | Submitted, draft, not merged |

The PRs target different base branches: PR 1 targets `main`; PR 2 targets
`amd-rocm-gfx1151`. Their current draft state and branch relationships were
rechecked on their public GitHub pages; current mergeability was not reverified,
and no authenticated mutation was attempted. The clean combined tree is
compatibility evidence, not an instruction to merge either PR or change the
repository's release strategy. PR 1 now has a secret-free GitHub-hosted Ubuntu
daemon check; PR 2 has no hosted check at this audit. The local and hosted test
results are separate evidence. PR 1's public description remains historical and
is not the authoritative record of current-branch qualification.

## Historical maintenance-window evidence

The following records describe an earlier approved window, not current-branch
completion proof:

1. GPU stream cancellation reached terminal idle on the same backend, without
a normal-completion increment. Post-disconnect A-to-B-to-A streaming,
concurrency, and TTL unloading passed.
2. Native daemon recovery passed after the real loader rejected an invalid
GGUF fixture. The restored Qwen3.6 model reached readiness and generated the
expected answer. The failed switch correctly remained HTTP 503.
3. Both phases restored and health-checked the protected service, including a
verified completion. Final process/listener checks found no test runtime
remaining. The accounting gap for the crashed loader is explicitly degraded.

The approved historical window is closed. No permanent production activation,
merge, or upstream submission was performed. Long-context quality, broad model
compatibility, direct-router automatic rollback, and long-duration endurance
remain explicitly unclaimed limitations.

## Current completion gates

The current native router is **not complete** until an approved GMKtek EVO-X2
maintenance window runs the current branch's
`benchmarks/swap/qualify_native_router.py`, retains its raw artifacts privately,
and records sanitized direct, warm-routed, cold-routed, alternating-model,
resident-target warm-selector,
runtime-profile activation/composition/clear,
router-cancellation, same-model concurrency, conflicting-model queue/drain,
failed-switch rollback/accounting,
same-process re-adoption, active-reload-conflict, capacity-safe persistent residency,
TTL-eviction, unauthenticated 401, authenticated model/profile inventory,
Prometheus, bounded router-log, and positive available periodic owned-process
RAM/VRAM results without PID/model/path fields. It must also run Linux real-child tests on
the current branch, then restore and health-check the protected workload. No
merge, permanent service activation, or publication of raw artifacts is
authorized by this audit.

See [integration behavior](freetoken-swap.md) and
[source research and live-test limitations](freetoken-swap-research.md).
Loading
Loading