fix(nlos): tighten evidence gates and stream replay

This commit is contained in:
ruv
2026-08-22 21:16:54 -04:00
parent 73ebd9f33e
commit d6ec9f8590
16 changed files with 193 additions and 66 deletions

View File

@@ -55,6 +55,9 @@ describe('NLOSScreen', () => {
render(<ThemeProvider><NLOSScreen /></ThemeProvider>);
expect(screen.getByText('RuView NLOS')).toBeTruthy();
expect(screen.getByText(/does not access raw iPhone LiDAR timing data/)).toBeTruthy();
expect(screen.getByTestId('nlos-maturity-boundary')).toBeTruthy();
expect(screen.getByText(/Physical VL53L8CH reproduction at 27 fps or better/)).toBeTruthy();
expect(screen.getByText(/Measured CSI fusion improvement of at least 25 percent/)).toBeTruthy();
});
it('always watermarks synthetic replay', () => {

View File

@@ -21,6 +21,7 @@ class MockSocket {
const NOW = 1_700_000_000_100;
const BEARER_TOKEN = 'e'.repeat(32);
const activeServices = new Set<NlosService>();
const createHarness = () => {
const socket = new MockSocket();
@@ -42,7 +43,9 @@ const createHarness = () => {
setTimeout: globalThis.setTimeout.bind(globalThis),
clearTimeout: globalThis.clearTimeout.bind(globalThis),
};
return { service: new NlosService(dependencies), socket, fetchMock, dependencies };
const service = new NlosService(dependencies);
activeServices.add(service);
return { service, socket, fetchMock, dependencies };
};
const authenticate = (socket: MockSocket) => {
@@ -57,6 +60,8 @@ const authenticate = (socket: MockSocket) => {
describe('NlosService', () => {
afterEach(() => {
for (const service of activeServices) service.disconnect();
activeServices.clear();
configureNlosBearerToken(null);
});

View File

@@ -81,6 +81,19 @@ export const NLOSScreen = () => {
</ThemedText>
</View>
<View testID="nlos-maturity-boundary" style={styles.maturityCard}>
<ThemedText preset="labelMd" style={{ color: colors.accent }}>SOFTWARE PREVIEW</ThemedText>
<ThemedText preset="bodySm">
The software path is implemented and locally validated. Research readiness remains blocked on:
</ThemedText>
<ThemedText preset="bodySm" color="textSecondary">OPEN · macOS native compilation</ThemedText>
<ThemedText preset="bodySm" color="textSecondary">OPEN · Physical VL53L8CH reproduction at 27 fps or better</ThemedText>
<ThemedText preset="bodySm" color="textSecondary">OPEN · Measured CSI fusion improvement of at least 25 percent</ThemedText>
<ThemedText preset="bodySm" color="textSecondary">
Builds, simulators, and synthetic replay do not close hardware or measured-fusion evidence gates.
</ThemedText>
</View>
<ProvenancePanel frame={frame} freshness={freshness} streamStatus={streamStatus} />
<View style={styles.visualizationCard}>
@@ -194,6 +207,14 @@ const styles = StyleSheet.create({
borderRadius: 10,
padding: spacing.md,
},
maturityCard: {
backgroundColor: colors.surface,
borderColor: colors.accentDim,
borderWidth: 1,
borderRadius: 12,
padding: spacing.md,
gap: spacing.sm,
},
visualizationCard: {
position: 'relative',
overflow: 'hidden',