This commit is contained in:
@@ -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.
|
||||
Reference in New Issue
Block a user