Publish Chimera GFX source
phase0-ci / build-and-audit (push) Successful in 2m14s

This commit is contained in:
Chimera GFX release export
2026-09-03 03:27:14 +02:00
commit a6037502d7
828 changed files with 100454 additions and 0 deletions
+610
View File
@@ -0,0 +1,610 @@
# Safety and threat model
## Non-negotiable boundary
This project uses only userland behavior and public, open-source information.
It excludes kernel and hypervisor code, exploit development, DRM bypass,
proprietary SDK material, leaked or decrypted headers/binaries, direct MMIO or
register writes, clock/SMU/fan control, boost settings, and firmware patches.
No payload or ELF may be transferred to or executed on a PS5 without explicit
approval from Jens in the active task. There is no boot-time or automatic
execution path.
Documented temporary process/kernel runtime changes made by the exact public
loader or SDK may be classified as expected volatile, restored by the loader,
or payload-process-local. They are not automatically unsafe. Persistent writes
and unbounded or unknown effects remain hard blockers.
## Assets and adversaries
Protected assets include the console's stability, display availability, user
data, network credentials, private repository credentials, and the accuracy of
the project's compatibility claims.
Relevant failure or threat sources:
- an incorrect guessed ABI that corrupts stack or memory;
- a command submission that hangs the GPU or display path;
- unbounded waits or incomplete cleanup after partial initialization;
- symbol presence being mistaken for compatible semantics;
- firmware drift;
- malicious or compromised upstream artifacts;
- secrets entering logs, manifests, commits, or remote URLs;
- a build or CI target silently becoming a deployment path.
## Phase-0 controls
| Risk | Control | Verification |
|---|---|---|
| ABI guess is called | No GNM declarations or calls; symbol addresses never escape | `phase0_safety_audit` test |
| GPU work is submitted | No submit/draw/dispatch/flip call sites | source allowlist audit |
| GPU memory changes | No GPU allocator, mapper, resource registration, or command buffer | source and build-graph audit |
| Probe runs accidentally | target disabled by default; runtime acknowledgement; firmware gate | CMake tests and code review |
| Unknown firmware runs | default is `NONE`; discovery build accepts only exact `9.60` | unit test, CMake gate, compatibility file |
| Automatic deployment | no deploy/test/run target; output is compile artifact only | CMake audit |
| Supply-chain substitution | immutable upstream commit and release SHA-256 | lock manifest and bootstrap script |
| Secret disclosure | secret filename ignores, no credential scripts, boolean-only logs | repository scan before push |
| Adapter accidentally claims hardware | compiled queries report unavailable and reject hardware requests | adapter tests |
| Resource lifecycle leaks | context refuses destruction while child handles exist | mock integration tests |
| Phase-1 target enters normal build | separate option defaults off and requires PS5 plus explicit SDL path | configure and source audit |
| Pre-gate SDL side effect | candidate does not link SDL2main; gate precedes `SDL_Init` | source-order audit and ELF imports |
| SDK CRT changes kernel state before `main` | classify exact effects; permanent legacy artifact remains blocked | pinned-source runtime audits and ADR-0010 |
## Probe side-effect statement
After its firmware gate, project code requests only system module loading,
symbol lookup, boolean logging, and module unloading. It does not request a GNM
operation. The pinned SDK source proves that `dlopen` can call
`sceKernelLoadStartModule` and that `dlclose` can call
`sceKernelStopUnloadModule`; module start/stop internals remain unknown.
More importantly, SDK v0.41's payload CRT runs before `main`. Its startup calls
`__patch_init`, which writes process credential capability/attribute fields and
syscall-address limits through the SDK's kernel read/write primitives. The CRT
also sets libc `__isthreaded`, initializes syscall/kernel/log/rtld state, may
load `libSceSysmodule.sprx`, allocates loader bookkeeping, relocates the
payload, and runs constructors. Normal termination runs payload destructors;
project `dlclose` requests module stop/unload only when this open loaded it.
There is no guaranteed cleanup after a hang, crash, partial load, or failed
stop/unload.
Therefore **no GPU mutation or rendering operation is requested by project
code**. The existing ELF remains permanently ineligible by artifact-specific
denylist, independently of the corrected Phase-0.6 classification model.
The firmware-9.60 capability artifact with SHA-256
`4be1c17b4964f2b68c39b5145bc4af4619c32512d60269ecf5c39728b390fa63`
is permanently blocked in `manifests/artifact-denylist.json`. Its manifest
states `execution_eligible=false`, and all new manifests default to the same
false value. `tools/check_artifact_execution_policy.py` must be the first
static gate used by repository tooling and Payload Manager integrations:
missing or false eligibility, malformed input, changed bytes, or a denylist
match returns `DENY`. A pass is not execution authorization.
## Phase-0.5 startup result
The stock v0.41 CRT is `UNSAFE`. Omitting it is mechanically possible, but the
loader caller and its return, cleanup, crash, and pre-entry behavior are
`UNPROVEN`. No minimal startup source or ELF exists, and the corresponding
CMake option fails closed. See `docs/runtime/` and
`manifests/runtime/phase-0.5-startup-audit.json`.
## Phase-0.6 historical lifecycle result
The installed Payload Manager v0.3.1 and elfldr v0.23 are exact public-release
matches. Temporary QA flag, credential, ptrace, mapping, and SDK startup
effects are classified individually. The lifecycle still fails closed because
it has `PERSISTENT_WRITE` and `UNBOUNDED_OR_UNKNOWN` effects: unbounded ptrace
loops, no detached-child watchdog, unresolved return/reaping/cleanup,
incomplete credential restoration, no launch-time hash check, and a manager
upload path that writes `/data/pldmgr/payloads`.
That result remains immutable evidence for the unmodified public-release
chain. It is not the current runtime profile.
## Phase-0.7 offline deployment-readiness result
The hardened elfldr and controlled Payload Manager close the Phase-0.6
implementation blockers with bounded ptrace steps, complete checked credential
restoration, centralized cleanup, a two-second kill/reap watchdog, exact
same-file-descriptor hashing, and receiver-side digest/denylist enforcement.
The lifecycle ELF is a normal SDK v0.41 payload that sends one notification
and calls `_exit`.
The current `controlled-ps5-runtime` profile binds exact firmware 9.60, SDK,
source commits, hashes, sizes, expected effects, a removable controlled
artifact-directory write budget, no payload network, 2000 ms maximum runtime,
and no retry. It is `READY_FOR_HARDENED_RUNTIME_DEPLOYMENT` only:
`installed=false`, `execution_authorized=false`, `transferred=false`, and
`executed=false`.
No PS5 connection, transfer, installation, or execution was used to reach
this decision. Hardware behavior remains unproven. The normal CRT
`__patch_init` path is process-local but means the lifecycle is not a
kernelwrite-free artifact. The old blocked hash remains permanently denied.
See `docs/runtime/phase-0.7-hardening.md` and
`manifests/runtime/phase-0.7-offline-audit.json`.
## Phase-0.8 read-only preflight result
The offline collector-admissibility review is
`READ_ONLY_PREFLIGHT_BLOCKED`. The exact Payload Manager v0.3.1 HTTP handler
sets an in-process active flag for every non-`OPTIONS` request.
`/autoload_status` additionally sets `autoload_triggered` and reads the
autoload configuration. Direct filesystem collection has no pinned collector
or proof excluding atime, audit-log, cache, metadata, service-state, or
on-device-log changes.
No on-device session was started and no PS5 connection was made. Current
firmware, live object identities, listeners, startup state, and rollback
backups remain unobserved. The exact stock Payload Manager backup is therefore
a hard open gate. Installation, lifecycle, execution, and automatic retry
remain unauthorized. See `docs/runtime/phase-0.8-read-only-preflight.md` and
`manifests/runtime/phase-0.8-read-only-preflight.json`.
## Phase-0.9A anti-brick design result
The offline anti-brick layer is `DESIGN_ONLY`. It models exact pre-image
identity, separate reopened backup, inactive staging, quiescence, an atomic
switch, post-switch verification and separately authorized rollback. No such
PS5 switch or recovery primitive is claimed. All fourteen interruption
boundaries remain `UNPROVEN`, so the design is not installation-suitable.
The host simulator performs only in-memory logical writes and cannot connect,
transfer, install, execute, open a target artifact or start a compiler. Its
synthetic atomic primitive is fault-test scaffolding, not hardware evidence.
The byte-exact on-device Payload Manager backup and recovery independent of
both elfldr and Payload Manager remain catastrophic hard gates. No
authorization is granted and automatic retry remains false.
## Phase-0.9B observer feasibility result
The offline result is `BLOCKED`. Normal SDK v0.41 startup is not
kernelwrite-free because `_start()` reaches `__patch_init()` before `main`.
Omitting the CRT is mechanically possible, but safe custom entry, return/exit,
crash handling and loader cleanup remain `UNPROVEN`.
The hash-bound hardened elfldr route deliberately gives the payload no
stdout/stderr socket, and the controlled Payload Manager transport does not
receive payload output. Notifications, klog and stock manager HTTP are not a
proven bounded non-persistent result channel. No observer source, target, ELF,
linker map or package was created. All device authorizations remain false, and
no PS5 action occurred. See
`docs/runtime/phase-0.9b-observer-static-audit.md`.
## Phase-0.9C execution-feasibility result
The offline classification is
`BLOCKED_MULTIPLE_FOUNDATIONAL_CONTRACTS`. Source review proves that a normal
SDK entry is side-effecting before `main`; a freestanding entry has no closed
stack/BSS/relocation/TLS, read, monotonic-time, return, exit, or cleanup
contract. A normal `ret` resumes an unproven SceSpZeroConf continuation, and a
watchdog kill is not accepted as safe exit.
The 4096-byte D1 result format passes deterministic host tests, but no current
caller-owned target buffer, copy-out, cleanup finalizer, or manager delivery
exists. Firmware source two is absent; an SDK export name alone is not an ABI.
Filesystem and platform reads may still affect metadata, atime, audit, caches,
counters, service/security state, open bookkeeping, accounting, object
lifetime, or races. No target source, ELF, map or package was built, and no PS5
action or authorization occurred. See
`docs/runtime/phase-0.9c-static-audit.md`.
## Phase-0.9D existing-stack readback result
The offline decision is `BLOCKED_NO_READBACK_PATH`. The full and controlled
Payload Manager profiles contain uploads, installs, deletes, launch-time file
reads, directory/configuration observations, and process actions, but no
binary-safe file-download response. Hardened elfldr returns fixed status text;
its controlled manager transport sends and closes without receiving component
bytes.
The full-profile `server_active_flag` is process-local and only suppresses a
fallback notification in audited source. It is `LOW_VOLATILE`, but has no
in-process reset and must be explicitly accepted in any future permission.
`/autoload_status` is excluded because it sets `autoload_triggered` and can
alter worker timing. No PS5 was contacted, no file was transferred, and no
target, observer, client, backup, package, staging action, or authorization was
created. See `docs/runtime/phase-0.9d-readback-feasibility.md`.
## Phase-0.9E bootstrap provenance gate
The exact external exploit/host and rudimentary port-9020 listener must be
available and provenance-bound before they can be considered an independent
rescue executor. A matching filename, an opaque console backup, a public
upstream, a generic sender command, or a conceptual dependency graph is not
enough. Unknown filesystem staging or autoload effects are brick-relevant and
remain hard stops.
No Phase-0.9F target design is authorized while the receive, mapping,
entrypoint, live-file, output, cleanup, crash, and reboot contracts are
missing. Phase 0.9E permits only local hashing, source/binary inspection,
schemas, manifests, and host-only policy tests. It permits no network socket,
device client, transfer, target build, payload, install, execution, autoload,
retry, or recovery action.
Phase 0.9E-R permits only bounded official `Gezine/Y2JB` GitHub acquisition
and private-origin push. Official metadata excludes every current release
asset from matching the local backup, and official source contains no
port-9020 listener implementation. The ignored official source tree is
inspection-only; downloaded code was not executed. No outer association may
be promoted to opaque inner provenance, and neither an operator attestation
nor host tests are runtime evidence. All device, build, transfer, execution,
installation, lifecycle, autoload, write, and retry authorizations remain
false.
Phase 0.9E-R2 permits only host-side hashing, bounded browser metadata copies,
the exact MediaFire object page, one mandatory official backup, and
source-motivated community assets. Downloaded archives are static evidence:
never execute or restore them, never track them, and remove temporary copies.
The SIECAF parser is read-only and may inspect only public fixed-width
structural metadata; it may not decrypt, guess keys, extract, write, or invoke
`ps5-bar-tool`. MediaFire metadata, structural similarity, and an inner match
would each remain non-runtime evidence. The actual result is
`LOCAL_BACKUP_UNCORRELATED`, so Phase 0.9F and every authorization remain
blocked.
## Phase-1.0E inherited result boundary
Prior RUN A and RUN B permissions were artifact-specific and consumed. RUN A
visibly reached C1; RUN B produced an unreadable notification and no exact
D-stage may be inferred. Phase 1.0E may record those observations and build a
new execution-ineligible diagnostic candidate offline. Its later exact
one-shot authorization was consumed on 2026-07-22.
The only added target operation is one nonblocking `send` attempt per reached
D-stage through stdout inherited from hardened elfldr's legacy raw-ELF
connection. It may not open a target socket, connect, listen, read requests,
retry, write the device filesystem, install or activate autoload. The host may
model one connect/send/write-half-close/bounded receive with fake sockets, but
no real device use occurs without new exact artifact-specific permission that
also names result reception. EOF, timeout, partial frames and send failure are
terminal, never retry triggers. The normal SDK CRT effects remain explicit;
this result channel is not side-effect-free. RUN C used the permitted single
connection and validated D00-D02 before remote EOF. It did not retry or
reconnect. D03, SDL, VideoOut, rendering, terminal status and cleanup remain
unproven. All authorization fields and artifact eligibility are now false.
## Phase-1.0F startup interval boundary
Phase 1.0F may prepare an exact artifact offline to place I00-I14 checkpoints
inside the source interval after D02 and through entry to D03. These
checkpoints may only reuse the existing nonblocking, signal-suppressed inherited
stdout send. They do not send notifications and may not add a socket, connect,
listener, receive path, address, port, filesystem write, install, autoload,
retry or reconnect.
The distinct `CHD10F01` parser remains offline-only: the live CLI is not
activated for it and must continue to reject the ineligible manifest. Normal
SDK CRT patch effects and the existing SDL/VideoOut imports remain explicit;
the artifact is not side-effect-free and static success is not hardware
evidence. No prior authorization carries forward. Device connection, transfer,
result reception and execution each require a new exact permission.
## Phase-1.0G one-shot runner boundary
Phase 1.0G may prepare and host-test a manifest-driven runner, but its tracked
manifest and approval template remain inactive. The interval protocol cannot
be selected through a free command-line switch. Activation requires both an
exact active manifest and a separate untracked local approval whose artifact,
firmware, target, protocol, limits and unique run identifier agree.
The runner must rehash the actual artifact before transport and exclusively
create and `fsync` a consumed-attempt receipt before opening a socket. This
fail-closed receipt prevents a host crash from silently making the same
permission reusable. Retry, reconnect, resume and trace overwrite remain
forbidden. The current repository contains no active target, run identifier or
authorization; no device action is allowed by Phase 1.0G itself.
The later exact Phase-1.0G authorization was consumed by one attempt. Valid
frames ended at I03 and ordinary stdout proved the deliberate no-argument,
no-menu help/exit path before I04. There was no retry or reconnect. This result
does not authorize another action and does not prove SDL, VideoOut, rendering
or terminal cleanup.
## Phase-1.0H startup-argument boundary
Phase 1.0H may correct only the proven `!HAVE_MENU && argc == 1` exit. The
reviewed profile adds RetroArch's existing verbose flag, generating `-v`, and
must retain null content/config/core paths, static contentless core, write
firewall, bounded runtime and the inherited one-send-per-stage stream. It must
allow H only through an exact active manifest plus separate matching local
approval, never a free protocol switch. No target, run ID, retry, reconnect,
installation, autoload or device-write authority may be tracked by default.
The exact H artifact is offline evidence only. It remains transfer-, execution-
and installation-ineligible, and all authorizations are false. Phase-1.0G
authority was consumed and cannot authorize H. A later action requires a new
exact artifact-specific permission; static success does not prove I04, SDL,
VideoOut, rendering, terminal status or cleanup.
The later exact Phase-1.0H authorization was consumed once. Its trace reached
I04, SDL2 video, VideoOut open and buffer registration, then the first flip
submit returned `-1` and SDL init returned `-1`. The diagnostic pattern was
copied into mapped display memory before the failed submit. D12 also records a
write-firewall rejection during configuration parsing; the exact requested
operation is unobserved. No retry is authorized. Do not infer a visible frame,
runloop entry, complete cleanup or safe exit.
## Phase-1.0I offline postmortem boundary
Phase 1.0I may inspect only the consumed H trace, exact source, ignored local
artifact/map and disassembly. It proves the submitted tuple
`(handle, 0, 1, 0)` and narrows E118 to linked `OPEN` or `STREAM` wrappers. It
does not know the exact blocked operation, original submit `errno`, VideoOut
argument semantics or root cause. The diagnostic/normal frame-zero/frame-one
mismatch is a source candidate only.
No target build, artifact, device client, connection, transfer, execution,
result reception or retry belongs to Phase 1.0I. A later offline design must
capture errno before reporting, transmit the exact write operation and stop
before I04 on a firewall shutdown. Selecting a different frame ID requires a
new ADR, new artifact audit and separate future authorization.
## Phase-1.0O consumed write-free result
The exact M artifact was transferred and executed once. The exclusive receipt
was created before the only connection; there was one send, zero retries and
zero reconnects. No installation, autoload, persistent staging or device
filesystem write occurred. The diagnostic pattern did mutate mapped display
memory and one VideoOut flip submit was attempted, as bounded by the approval.
The run passed I04 with no D13, then reproduced the first flip-submit failure.
D07 reports `-1` and saved errno `0`; E104 is the overlay's generic
`framebuffer_fail` label after that failure, not proof of an allocation fault.
The subsequent D04 after terminal-flagged D12 prevents a successful terminal
classification. Do not infer visible output, event-wait behavior, complete
cleanup or safe exit. The authorization is consumed and no action carries.
## Phase-1.0P offline VideoOut analysis
Phase 1.0P performs source, map, relocation and disassembly inspection only.
It proves the consumed artifact called `sceVideoOutSubmitFlip(handle,0,1,0)`
and received `-1` with saved errno `0`. It does not prove the semantic ABI,
opaque buffer contract, flip ownership, visible presentation or cleanup.
An exported symbol name is not permission to call a status or flip-master
function. No argument experiment, target build, parser relaxation or device
action is permitted by this analysis. The D12-before-D04 order is
source-deterministic, and D12 remains a shutdown request rather than proof of
lifecycle completion.
## Phase-1.0Q public evidence boundary
The bounded official-source inventory found no independent PS5 VideoOut ABI.
SDK v0.41 provides export names only; the PS5 declarations and opaque records
originate together in one SDL lineage, and relevant official ports consume
that same fork. OpenOrbis defines only the analogous PS4 contract.
Do not promote source repetition, a successful registration return, a PS4
constant or an exported status/flip-master name into PS5 semantic proof. No
submit parameter, buffer layout, ownership state or error interpretation may
change from Phase 1.0Q, and no target or device action is authorized.
## Phase-1.0R launch-context boundary
The exact PS5 SDL2main adds no application ID, title identity, LNC setup,
VideoOut ownership or process creation. Its `LoadExec("exit")` occurs only
after `SDL_main` returns, and the tested RetroArch path already performs SDL's
splash-hide call before VideoOut open. Direct and Payload Manager raw-ELF
routes use the same hardened elfldr process constructor.
Do not treat PacBrew packaging, `homebrew.js` path/argument descriptors,
LakeSnes documentation, or the non-unique LNC log as proof of a different
working display context. The exact hbldr/shsrv launcher and runtime active-app
state are unbound. Keep
`NO_SOURCE_PROVEN_LAUNCH_CONTEXT_FIX_TARGET_CHANGE_BLOCKED`: no SDL2main,
LNC/SystemService, submit, VideoOut, target-build, transfer or execution
change is authorized.
## Phase-1.0S hbldr/shsrv boundary
Official source proves that hbldr is materially different from raw elfldr: it
launches a BigApp through SystemService and replaces the resulting process
with a device-resident ELF. This is source evidence for a launch-context
difference, not proof of VideoOut permission, visible output, safe cleanup or
firmware-9.60 behavior. The exact deployed shsrv identity is unknown.
Never invoke or copy the existing route under this gate. It may kill the
running BigApp, performs kernel/ptrace process changes, lacks a hard deadline,
requires prior target staging, and current versions may remount `/system_ex`
and create persistent `FAKE00000` content without an atomic write, rollback or
power-loss protocol. Keep
`BIGAPP_CONTEXT_SOURCE_PROVEN_DEPLOYED_IDENTITY_UNPROVEN_DEVICE_PATH_BLOCKED`.
No port-2323 connection, shsrv request/deployment, hbldr command, target build,
device file, app termination, remount, transfer or execution is authorized.
## Phase-1.0T inactive shsrv identity boundary
The current shsrv source spawns a shell for every accepted connection and its
greeting automatically queries and transmits model, serial number, firmware,
temperatures and CPU frequency. Therefore a nominally read-only `help` request
is not side-effect-free and risks disclosing a device identifier. Phase 1.0T
contains no connector and authorizes no connection.
The offline parser must receive an already supplied transcript on stdin. It
must never persist raw input, serial, model or telemetry, and may retain file
metadata only for an independently supplied literal absolute path. `help`
identifies at most a source family; `stat` is metadata only; `sum` is a weak
16-bit rotating checksum and may cause atime/cache/accounting effects. None
can prove an exact binary. Wildcards, path discovery, content commands,
`hbldr`, launch, writes, signals, mounts, retry and reconnect remain forbidden.
All future windows are `DESIGNED_NOT_ACTIVE` and require separate exact review.
## Phase-1.0U bounded local inventory
Phase 1.0U found no deployed shsrv candidate within the declared Chimera,
attachment, known-download and ZIP-entry-name scope. This is not a global host
or device absence claim. The official source checkout, host telnet wrapper and
PacBrew recipe remain non-deployed references and must never be substituted
for exact installed bytes. No discovered script or binary was executed.
The inventory grants no connection, shell command, target build, transfer,
execution, installation, write, retry or launch-context experiment. Only the
next offline inactive collector-design phase may proceed. A future live
collector remains blocked behind a new exact approval and the Phase-1.0T
serial/telemetry side-effect acceptance.
## Phase-1.0V inactive collector-model boundary
Phase 1.0V is an offline stdin model with no network transport. It bounds raw
and sanitized input to 65,536 bytes, permits at most 256 chunks, rejects
incomplete Telnet controls and invalid UTF-8, and seals after one result. It
retains only the Phase-1.0T sanitized record. The internal bytearray is cleared,
but physical memory erasure is not proven.
The tracked activation and approval remain empty and false. Do not add an
address, port, command, socket, connect/send path, automatic reply, persistent
raw transcript, retry, reconnect, resume or fallback under this phase. Host
model success is not device, prompt, cleanup or deployed-identity evidence.
## Phase-1.0W reviewed inactive client architecture
Self-review remediates doubled-IAC state, empty-chunk accounting, path
allowlisting, firmware/compile metadata validation and numeric-parser error
normalization. Physical memory erasure remains unproven. The new policy accepts
only synthetic dual records and returns a frozen data plan; the fake transport
has no network primitives.
Keep the tracked activation and approval empty. Port 2323, one connection,
ten-second deadline and T2/T3 command tokens are future constraints, not
authority. A consumed receipt, exclusive sanitized output, monotonic deadline,
network transport, Telnet reply/prompt contract and deterministic close remain
missing. Do not connect, render shell lines or issue a request under this phase.
## Phase-1.0X inactive injected transport
The X orchestrator accepts only an already validated immutable session plan,
an injected adapter, an injected monotonic clock and a caller-owned host
evidence directory. Repository tests supply only fake adapters. The consumed
receipt is exclusively created and file-flushed before adapter open. Output is
sanitized, exclusively created and bound to the reopened receipt hash. There
is no overwrite, delete, raw-transcript persistence, target persistence, retry
or second open.
Do not interpret file `fsync` as directory-entry durability. A partial file is
invalid and deliberately not cleaned up; the run remains consumed. Deadline
checks surround adapter boundaries but cannot preempt a blocking real adapter.
Exact prompt and Telnet framing, OS socket timeouts, live close behavior and
deployed shsrv identity remain blockers. No real adapter, address, port,
connection, request or authority may be added under X.
## Phase-1.0Y offline shsrv framing
The Y model accepts synthetic bytes only. It distinguishes raw v0.7-v0.8 from
`libtelnet`/NVT v0.9-v0.19, never opens a transport and never formats a command.
Neither audited family proactively negotiates or server-echoes input. Current
source rejects unsupported `WILL`/`DO`; legacy source passes Telnet controls
into the shell. Future Chimera input must therefore emit no IAC commands.
A terminal `$ ` is not a live completion proof. `PWD` is not forcibly
overwritten, the external Telnet client's local echo is undefined, wire chunks
are arbitrary, and current pipe/socket handlers do not complete short writes.
The server also has no bounded session deadline. Preserve deadline-based
partial-result rejection, keep all authority false, and do not add a real
network adapter under Y.
## Phase-1.0Z offline passive batch
The Z contract produces one target-free ASCII/LF byte batch from a validated W
plan. It permits only `help`, or ordered `stat` and `sum` for one normalized
literal path. NUL, CR, IAC and shell separators cannot enter the batch. It has
no CLI, address, transport, clock or file output and authorizes no device use.
Incoming IAC fails closed; the model never sends a Telnet reply. Prompt text
and remote EOF are not completion boundaries. Only an explicit synthetic
hard-deadline event can seal, and incomplete help/stat/sum output remains
invalid. This does not prove live timeout preemption. A future T3 read may
still cause atime, cache, accounting and scheduler effects, while the automatic
sensitive greeting and shell/connection state require explicit acceptance.
Keep all authority false and add no real adapter under Z.
## Phase-1.0AA offline fake-adapter integration
AA accepts only exact built-in fake adapter, fake clock and fake evidence-store
types. Subclasses and arbitrary injected implementations are rejected, so the
module cannot be repurposed as a live transport boundary. It creates an
exclusive consumed receipt before fake open, permits one complete Z batch,
seals only at a valid synthetic hard deadline and closes exactly once.
EOF, blocked receive, early or missing deadline, data at/after deadline, IAC,
partial output and evidence collisions are failures. A receipt remains after a
failed fake attempt; no cleanup deletes it. Logical event-buffer clearing does
not prove physical erasure. Host `fsync` does not prove directory-entry
durability, and the synthetic clock cannot prove OS preemption. Keep every
authorization false and do not add a network adapter or device action under AA.
## Phase-1.0AB offline live-adapter feasibility
AB binds the local Python 3.13.2 Windows socket/select implementation but adds
no network import or adapter. Its trace model accepts synthetic operations only
and requires receipt-before-creation, nonblocking-before-connect, readiness and
`SO_ERROR`, positive bounded send/receive progress, deadline-only sealing,
sanitization, local close and then output.
Selector timeout is a maximum requested wait, not proof that host scheduling
cannot overshoot. Local `close` is not proof of remote shsrv/process cleanup.
Numeric-address parsing and the exact accepted Windows pending-connect error set
still require implementation review. Keep live implementation, socket creation,
DNS, target retention, connection and request as hard stops under AB.
## Phase-1.0AC offline dormant-adapter boundary
AC executes only against the exact built-in fake syscall facade and fake
clock. A precommitted receipt marker must precede synthetic creation;
nonblocking setup precedes synthetic connect; partial progress is explicit;
EOF, zero progress and data at the deadline fail. One fake local close is
attempted after every successfully opened path. Unused fake events are logically discarded,
which does not prove physical erasure or remote cleanup.
The module has no live adapter protocol, socket/selector import, DNS, address,
CLI, real clock or file output. All authorization remains false. AC permits
only a later offline inactive numeric-target/activation design; it does not
permit a transport implementation, connection, request or device action.
## Controls required before Phase 1
Phase 1 cannot begin until all of the following are recorded in a new ADR:
1. explicit hardware-test approval;
2. an allowlisted firmware and reproducible console identification method;
3. proven function signatures and data layouts from acceptable public sources;
4. a bounded timeout and operator recovery plan;
5. independently reviewed cleanup and crash-log paths;
6. a one-step-at-a-time test case with an SDL software/VideoOut fallback;
7. an explicit statement of exactly which buffer or GPU state may mutate.
Approval for one test does not authorize later tests.
## Timeout, watchdog, cleanup, and logs
The Phase-0 loop is statically bounded by the 21-entry manifest and always
attempts module cleanup after lookup begins. Dynamic-loader calls do not expose
a documented cancellation API, so an in-process forced timeout would risk
leaking loader state. The default `NONE` gate blocks the project-requested
module open. The 9.60 build gate does not remove the SDK CRT blocker and grants
no execution authority.
Before any approved hardware observation, a separate supervisor design must
define a wall-clock deadline, progress events, operator-visible failure state,
and a recovery action that does not kill a thread while it owns loader or GPU
state. The probe already emits deterministic JSON-line stage events suitable
for a redacted crash/timeout log; it never emits addresses. Later GPU phases
must add explicit per-operation deadlines and prove cleanup for each partially
completed state transition.
## Disabled Phase-1 candidate
The candidate source contains one SDL window-surface update, but it is outside
every default target and automated test. Its default `NONE` build exits before
SDL initialization. Project code contains no direct VideoOut or GNM prototype.
The pinned SDL backend's flip-event wait has no proven finite timeout; this is
recorded as a hardware blocker rather than hidden behind a forced thread kill.
See `docs/phase1/HARDWARE_TEST_PLAN.md`.
## Incident rule
On an unexpected return code, missing cleanup confirmation, display anomaly,
hang, reset, or firmware mismatch: stop, preserve non-sensitive logs, mark the
compatibility entry as failed or unknown, and do not retry automatically.