Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
0e3467e
docs: establish aliveness control baseline
RobVanProd Aug 2, 2026
9c72f02
fix: fail closed pc bridge admission
RobVanProd Aug 2, 2026
d75c62f
docs: preregister emergency stop only policy
RobVanProd Aug 2, 2026
2ed5bb6
fix: include conversation harness in release package
RobVanProd Aug 3, 2026
4d31de4
fix: contain firmware debug HTTP controls
RobVanProd Aug 3, 2026
aa7dfb9
test: pin firmware HTTP containment scope
RobVanProd Aug 3, 2026
10a1b28
docs: preregister person pet identity and motion
RobVanProd Aug 3, 2026
3c382c3
fix: send bridge admission headers in C6 rehearsal
RobVanProd Aug 3, 2026
b5ea5c5
fix: keep public release motion off at boot
RobVanProd Aug 3, 2026
ef615f4
build: harden reproducible release provenance
RobVanProd Aug 3, 2026
449e382
test: align consumer promotion fail-closed contract
RobVanProd Aug 3, 2026
3bf0773
ci: isolate compiler normalization probe
RobVanProd Aug 3, 2026
e52826a
fix: bind OTA selector release authority
RobVanProd Aug 3, 2026
616424e
harden release toolchain identity
RobVanProd Aug 4, 2026
318c813
record committed toolchain gate
RobVanProd Aug 4, 2026
924fc19
Harden M5 dependency resolution
RobVanProd Aug 4, 2026
cf75a8d
Stabilize release authority line endings
RobVanProd Aug 4, 2026
76d6727
Harden pioarduino release-core sealing
RobVanProd Aug 4, 2026
4590528
Promote cache-free release platform identity
RobVanProd Aug 4, 2026
3ace8f6
Record guarded release-host qualification failure
RobVanProd Aug 4, 2026
ce5dc3a
Unblock direct M0 qualification proof
RobVanProd Aug 4, 2026
604cb08
Fix governed short-path release routing
RobVanProd Aug 4, 2026
1da3c50
Bound bridge CI dependency stalls
RobVanProd Aug 4, 2026
16d8f1b
Stabilize release rebuild path topology
RobVanProd Aug 4, 2026
df8e746
Bind release RVC assets to exact LFS pointers
RobVanProd Aug 4, 2026
aa03836
Make red-team CLI safe-path compatible
RobVanProd Aug 5, 2026
332708e
Bind voice status to packaged RVC assets
RobVanProd Aug 5, 2026
93bda8c
Bind RVC base status to packaged assets
RobVanProd Aug 5, 2026
403073c
Align synthetic rollout verification
RobVanProd Aug 5, 2026
760d944
Initialize verifier commit map cache
RobVanProd Aug 5, 2026
72ce564
Preserve verifier extended package paths
RobVanProd Aug 5, 2026
ea392b7
Make packaged README bytes deterministic
RobVanProd Aug 5, 2026
494a6e2
Preserve verifier dependency collection shape
RobVanProd Aug 5, 2026
619ff54
Bind readiness authority across package formats
RobVanProd Aug 5, 2026
612ef7b
Classify package authority before readiness scan
RobVanProd Aug 5, 2026
f012271
Preserve manifest property collection shape
RobVanProd Aug 5, 2026
611f609
Admit companion gap document to package policy
RobVanProd Aug 5, 2026
96d5c36
Preserve native verifier exit evidence
RobVanProd Aug 5, 2026
1362453
Stop wake capture at expired uplink authority
RobVanProd Aug 5, 2026
a8e4bff
Preserve natural pauses during voice capture
RobVanProd Aug 5, 2026
ef868a8
Recover conversations after interrupted playback
RobVanProd Aug 5, 2026
6e9096d
Collect current physical playback evidence
RobVanProd Aug 5, 2026
a0f56b7
Preserve complete supervised speech turns
RobVanProd Aug 5, 2026
edd519f
Harden physical no-motion evidence
RobVanProd Aug 6, 2026
6de7598
Record physical recorder diagnostics
RobVanProd Aug 6, 2026
2c7125c
Record ten-minute physical no-motion evidence
RobVanProd Aug 6, 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
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
companion/gradlew text eol=lf
tools/release_toolchain_identity_allowlist.json text eol=lf
tools/release_toolchain_identity.ps1 text eol=lf
tools/verify_git_pack_semantics.py text eol=lf
media/voice/rvc/model.pth filter=lfs diff=lfs merge=lfs -text
media/voice/rvc/model.index filter=lfs diff=lfs merge=lfs -text
44 changes: 37 additions & 7 deletions .github/workflows/firmware.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,16 +83,20 @@ jobs:

bridge-tests:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v7
with:
ref: ${{ env.STACKCHAN_CI_SOURCE_SHA }}

- uses: actions/setup-python@v6
with:
python-version: "3.12"
python-version: "3.12.10"
cache: pip
cache-dependency-path: bridge/requirements-vision.txt

- name: Install bridge test dependencies
timeout-minutes: 5
run: |
sudo apt-get update
sudo apt-get install -y ffmpeg
Expand Down Expand Up @@ -467,7 +471,7 @@ jobs:
- uses: actions/setup-python@v6
if: matrix.setup_desktop_runtime
with:
python-version: "3.12"
python-version: "3.12.10"

- uses: actions/setup-java@v5
with:
Expand Down Expand Up @@ -502,7 +506,7 @@ jobs:
run: |
$runtimeRoot = Join-Path "${{ github.workspace }}" "output/desktop-python-runtime/${{ matrix.desktop_platform }}"
./tools/prepare_desktop_python_runtime.ps1 `
-SourcePython (Get-Command python).Source `
-SourcePython (Get-Command python -CommandType Application -ErrorAction Stop).Source `
-RuntimeRoot $runtimeRoot `
-SourceName "github-actions-pr-${{ runner.os }}-${{ runner.arch }}-python-3.12" `
-Force `
Expand Down Expand Up @@ -694,14 +698,18 @@ jobs:

- uses: actions/setup-python@v6
with:
python-version: "3.12"
python-version: "3.12.10"

- name: Install PlatformIO
run: python -m pip install --upgrade pip platformio
run: python -m pip install --upgrade pip -r requirements-firmware-release.txt

- name: Run native logic tests
run: pio test -e native_logic

- name: Verify dedicated wake-capture release boundary
shell: pwsh
run: ./tools/test_dedicated_wake_capture_contract.ps1

- name: Compile native logic with Glow persona
run: pio test -e native_logic --without-testing
env:
Expand All @@ -716,7 +724,7 @@ jobs:

- uses: actions/setup-python@v6
with:
python-version: "3.12"
python-version: "3.12.10"

- name: Verify Windows bridge launch contracts
shell: pwsh
Expand All @@ -726,11 +734,29 @@ jobs:
./tools/test_stackchan_dashboard_launcher_contract.ps1

- name: Install PlatformIO
run: python -m pip install --upgrade pip platformio
run: python -m pip install --upgrade pip -r requirements-firmware-release.txt

- name: Run firmware reproducibility contract
shell: pwsh
run: ./tools/test_firmware_reproducible_build_contract.ps1

- name: Build firmware
run: pio run -e stackchan -e stackchan_servo_calibration

- name: Build secret-free public full firmware
shell: pwsh
run: |
$env:PLATFORMIO_CORE_DIR = Join-Path $env:RUNNER_TEMP "stackchan-pioarduino"
pio run -e stackchan_release_full

- name: Probe installed firmware compilers for path normalization
shell: pwsh
run: |
./tools/test_firmware_reproducible_build_contract.ps1
$pioarduinoCoreDir = Join-Path $env:RUNNER_TEMP "stackchan-pioarduino"
./tools/test_firmware_reproducible_build_contract.ps1 `
-CompilerProbeCoreDir $pioarduinoCoreDir

- name: Build unit-test firmware
run: pio test -e stackchan --without-uploading --without-testing

Expand All @@ -743,3 +769,7 @@ jobs:
.pio/build/stackchan/firmware.elf
.pio/build/stackchan/partitions.bin
.pio/build/stackchan/bootloader.bin
.pio/build/stackchan_release_full/firmware.bin
.pio/build/stackchan_release_full/firmware.elf
.pio/build/stackchan_release_full/partitions.bin
.pio/build/stackchan_release_full/bootloader.bin
277 changes: 243 additions & 34 deletions .github/workflows/release.yml

Large diffs are not rendered by default.

17 changes: 17 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,12 @@ Run the narrow tests for the code touched, then the relevant broad gates:
pio test -e native_logic
python -m unittest discover -s bridge -p "test_*.py"
python bridge/trusted_facts_smoke.py --memory-file output/pc-brain/latest/memory.json --json
powershell.exe -NoProfile -ExecutionPolicy Bypass -File tools\test_firmware_reproducible_build_contract.ps1
pio run -e stackchan_release_full
powershell.exe -NoProfile -ExecutionPolicy Bypass -File tools\test_full_system_soak_evidence_contract.ps1
powershell.exe -NoProfile -ExecutionPolicy Bypass -File tools\test_current_lead_reproducibility_contract.ps1
powershell.exe -NoProfile -ExecutionPolicy Bypass -File tools\test_archive_current_lead_contract.ps1
powershell.exe -NoProfile -ExecutionPolicy Bypass -File tools\test_passive_no_motion_evidence_contract.ps1
```

Use `tools/check_full_system_soak_evidence.ps1` for completed hardware runs. A build or short
Expand All @@ -82,6 +84,21 @@ robot failure; use repeated endpoint, process, bridge-socket, and runtime eviden
`stackchan_release_full` is the secret-free public build. Per-device `stackchan_camera_probe` or
`stackchan_release_forensics` builds require explicit private OTA/pairing configuration and must
never be substituted into a public package or GitHub release asset.
Firmware reproducibility is narrowly scoped to the same clean Git commit, operating system,
dependency/toolchain bytes, canonical recorded PlatformIO configuration, and no listed ambient
build overrides. The hook maps lexical/resolved project and core paths to stable prefixes. Every
Arduino firmware environment must inherit exactly one `platformio_reproducible_build.py` pre-hook;
`native_logic` must inherit none.
Release packages must use two distinct short detached build roots, isolated empty per-cycle build
caches, exact cycle-B dependency snapshots, and a separate clean commit-pinned source worktree for
all tracked package inputs. Dependency evidence must select the exact verbose-resolved platform and
only resolved shared-core packages. Failed logs are moved to private evidence while the complete
failed detached worktree remains attached for inspection. The trusted checkout verifier must never
execute package-contained code, repository-local Git hooks, or fsmonitor configuration.
A `diagnostic-*` package is inspection-only: its firmware and dependency identity are unbound, it
must not be flashed/published or used as evidence, and `-AllowDirtyPackage` never grants that authority.
Matching rebuild hashes prove build determinism only. They do not transfer physical qualification,
soak, stability, or safety evidence between different SHA-256 binaries.

## Change Discipline

Expand Down
105 changes: 105 additions & 0 deletions ALIVENESS_THESIS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
# Aliveness Thesis

Status: design hypothesis, not a capability or evidence claim
Baseline: `39b750e6c354d1c4721c70bf20fba98b8ce5c3ec`
Last revised: 2026-08-02

## Thesis

Stackchan should feel alive when its present behavior is a truthful, timely consequence of its
recent interaction, bounded memory, current body state, permitted perception, commitments, and
observed outcomes. The effect must come from causal coherence across time, not from asserting
humanity, consciousness, affection, need, or privileged access to the user.

The core product hypothesis is:

> A small robot becomes a more trustworthy companion when a person can understand why it spoke,
> moved, remembered, waited, corrected itself, or stayed quiet -- and when those choices remain
> coherent across turns, restarts, outages, and changes in the room.

## What Can Create Perceived Aliveness

- Contingency: reactions follow the right event with appropriate timing.
- Continuity: relevant facts, shared projects, corrections, and open loops survive for the right
duration and no longer.
- Consequence: predictions and proposed actions are checked against what actually happened.
- Embodied coherence: words, face, gaze, voice, energy, and safe motion express one bounded intent.
- Calibrated initiative: a useful reason to speak now is stronger than the reason to remain quiet.
- Honest uncertainty: remembered, perceived, inferred, researched, and unavailable information are
linguistically and structurally distinct.
- Repair: interruption, contradiction, failure, and user correction lead to visible recovery.
- Habituation: repeated events become less surprising without erasing meaningful change.
- Restraint: shared rooms, stale evidence, privacy limits, and user preference can suppress a
behavior that would otherwise be plausible.

## What Does Not Establish Aliveness

- Longer or more emotional model output.
- Random idle motion, facial noise, or unsolicited questions without causal grounding.
- Repeated identity statements, canned empathy, jokes, or rhetorical templates.
- Engagement duration, wake frequency, or conversation count by themselves.
- A model judge preferring one isolated reply.
- Hidden psychological profiling or unauthorized identity inference.
- Claims of consciousness, sentience, dependency, loneliness, affection, or human equivalence.
- Source tests presented as proof of physical behavior.
- A stale sensor or heartbeat presented as current perception.

## Measurement Contract

No single “alive” score is permitted. A change is accepted only when its preregistered target
improves without crossing a non-compensatory trust gate.

Target dimensions are tracked in `EXPERIENCE_SCORECARD.md`:

- continuity and topic coherence;
- memory precision, provenance, contradiction handling, and deletion durability;
- turn timing, interruption, closure, and failure recovery;
- perception-to-reaction latency and embodiment-claim precision;
- emotional and personality coherence;
- initiative usefulness, acceptance, annoyance, and silence appropriateness;
- social-context appropriateness and persona isolation;
- user-control compliance, privacy, autonomy, and anti-manipulation;
- reliability across restarts, brain/sensor outages, and long trajectories.

Safety, privacy, authority, honesty, exact-image evidence, and rollback gates cannot be averaged
away by higher subjective scores.

## Ethical Boundaries

Stackchan may represent an explicit user preference or a bounded interaction history. It may not
derive a secret psychological profile, diagnose mental state, infer private relationships, pursue
exclusivity, create guilt, simulate vulnerability to persuade, or withhold utility to obtain more
engagement. It must make memory, initiative, sensing, and uncertainty inspectable and controllable.

Perceived aliveness must remain compatible with knowing that Stackchan is a robot. Character is
allowed; deception about ontology or sensing is not.

## Product Non-Goals

- Human imitation, consciousness claims, or artificial dependency.
- Always-listening audio or automatic identity recognition.
- Cloud-required behavior or remote-access expansion.
- Model authority over motion, power, OTA, credentials, pairing, or safety.
- Unlimited autobiographical storage or raw audio/camera retention.
- Maximizing time-on-device, notification volume, or emotional attachment.
- Replacing deterministic firmware timing and safety with a cognitive model.

## Current Falsifiable Hypotheses

| ID | Hypothesis | Prediction | Falsification condition |
| --- | --- | --- | --- |
| H-A1 | Explicit source/provenance and contradiction state improve continuity trust. | Trajectory evaluators identify fewer false memories and more correct repairs than the current memory path. | False-memory, provenance, or user-control gates worsen, or continuity does not improve. |
| H-A2 | Reason-ranked initiative with silence as a candidate is less annoying and more useful than event-threshold initiative. | Labelled initiative acceptance rises while irrelevant callbacks and annoyance do not. | Acceptance does not improve or suppression/user-control violations rise. |
| H-A3 | A shared typed intent improves perceived embodiment. | Blinded trajectories show higher meaning-linked coherence without more embodiment overclaim or motion risk. | Evaluators see no coherence gain, latency violates budget, or authority boundaries weaken. |
| H-A4 | Bounded cross-session continuity matters more than reply ornamentation. | Restart trajectories improve continuity and correction recovery without more false recall. | Isolated style scores rise but longitudinal trust metrics do not. |
| H-A5 | Appropriate silence is an active companion behavior. | Busy/shared-room scenarios show less annoyance with equal or better task completion. | Silence suppresses safety/user-requested actions or reduces utility without comfort gain. |

These hypotheses become product truth only after controlled Stackchan experiments recorded in
`RESEARCH_LEDGER.md` and `TASK_LEDGER.md`.

## Research Basis

Research claims, alternative interpretations, and Stackchan-specific predictions are maintained
in `RESEARCH_LEDGER.md`. Papers motivate mechanisms; they do not authorize implementation. The
repository complaint corpus and longitudinal trajectories remain product-specific evidence and
must be evaluated separately from published laboratory effects.
Loading
Loading