Testing IS-Core and GridLookout Version Pairs
This page extends the React perceptive app workflow with a tighter test loop for the reference platform:
shared manifest
-> Go ISCore server
-> React GridLookout
-> Android GridLookout bridge contract
The aim is not merely to check that a UI builds. The aim is to prove that the same CPUX manifest can be loaded, served, acted on, reflected, and reused across platform surfaces.
Repository Shape
The reference platform keeps one manifest as the source of truth:
platform/shared/cpux-app-manifest.json
Platform copies are generated from it:
react-pulse-cpux-app-v0_3/public/cpux-app-manifest.json
android/todo-shared-manifest.json
The sync script is:
scripts/sync-shared-manifest.sh to-platforms
This avoids a common failure mode: React and Android appearing to work while they are actually testing different manifest versions.
Test Commands
From:
cd /Users/pronabpal/QuickLab/pilliar-action-site/X-PLATFORM-CPUX_abacus/iscore-cpux-platform-reference
Run the Go runtime unit tests:
scripts/dev-loop.sh test-iscore
Run only the CPUX server contract:
scripts/dev-loop.sh test-server
Run the React GridLookout contract:
scripts/dev-loop.sh test-react-gridlookout
Run the Android GridLookout bridge contract, without a device:
scripts/dev-loop.sh test-android-bridge-contract
Run the Android GridLookout APK build test:
scripts/dev-loop.sh test-android-gridlookout
By default this packages an android/arm64 ISCore runtime binary, which is right for most physical Android devices.
On an Intel Mac using an x86 Android emulator, build the APK with an x86 Android runtime instead:
ANDROID_TARGET=android/amd64 scripts/dev-loop.sh test-android-gridlookout
Install the built APK on a connected emulator/device:
INSTALL_APK=1 scripts/dev-loop.sh test-android-gridlookout
Run the current version pair as a single suite:
scripts/dev-loop.sh test-all
What Each Test Proves
ISCore Server
scripts/test-version-pair.sh server
This starts cmd/iscore-server, serves the shared manifest, initializes CPUX, registers cells, and verifies the server contract.
Expected proof:
CPUX server contract test passed
React GridLookout Test
scripts/test-version-pair.sh react-gridlookout
This syncs the shared manifest into React, builds the React app, starts the Go server with the React dist directory, registers cells, and performs a representative /cell-action.
Expected proof:
React GridLookout test passed
Android GridLookout Bridge Contract Test
scripts/test-version-pair.sh android-bridge-contract
This syncs the shared manifest into the Android manifest copy, starts the Go server, and verifies the Android bridge contract against the same /cell-action API.
This does not require an Android device. It proves the manifest/server/action contract the Android app must use.
Expected proof:
Android GridLookout bridge contract test passed
Android GridLookout Test
scripts/test-version-pair.sh android-gridlookout
This generates the Android host project, builds the debug APK, and verifies that an APK is produced.
It does not install by default. To install:
INSTALL_APK=1 scripts/test-version-pair.sh android-gridlookout
For an Intel Mac x86 emulator:
ANDROID_TARGET=android/amd64 INSTALL_APK=1 scripts/test-version-pair.sh android-gridlookout
Expected proof:
Android GridLookout APK build passed
Version Pair Discipline
Treat the following as one version pair:
- shared manifest version,
- Go ISCore runtime version,
- React GridLookout renderer version,
- Android GridLookout bridge version.
When one changes, run:
scripts/dev-loop.sh test-all
If only the Go runtime changes, start with:
scripts/dev-loop.sh test-iscore
scripts/dev-loop.sh test-server
If a platform renderer changes, run that platform test and then the full pair:
scripts/dev-loop.sh test-react-gridlookout
scripts/dev-loop.sh test-all
or:
scripts/dev-loop.sh test-android-bridge-contract
scripts/dev-loop.sh test-android-gridlookout
scripts/dev-loop.sh test-all
Why This Matters
IS-Core development can fail in subtle places:
- a DN emits a different Signal shape than the designated release Signal,
- a reflector pickup reaches the Field but a platform does not subscribe correctly,
- a React or Android manifest copy drifts from the shared manifest,
- a platform action targets the wrong receptor IC,
- a server route works directly but not through GridLookout cell action shape.
The version-pair test loop catches these while adding runtime functionality, such as reflector error Pulses for emitted/release Signal mismatch.
O_reflector Error Contract
ISCore can now configure an IC-level O_reflector error pulse contract:
"reflectorError": {
"enabled": true,
"intentionId": "I_reflector_error",
"pulsePhrase": "reflector_error",
"includeDetails": true
}
When enabled, the pickup path remains unchanged:
DN emits pickup result Signal
Visitor moves pickup result to O_reflector
O_reflector compares it to the designated release/result Signal
O_reflector emits normal release Signal or reflector_error Signal
Field absorbs the reflected Signal through pickup
The Go runtime tests now cover the mismatch case directly: a DN result with the wrong intentionId produces reflector_error, and the runner proves that the Field absorbs the error through the same pickup mechanism used by successful releases.