Skip to content

Commit ccbbdb9

Browse files
Shawclaude
andcommitted
fix(cloud-frontend): load Steward runtime on /bsc route
/bsc was missing from STEWARD_RUNTIME_ROUTE_PATTERNS so the Steward SDK never initialized there (unless a stored token already existed). After an OAuth redirect the token isn't in localStorage yet — causing a chicken- and-egg: no runtime → no session sync → no token → perpetual "Sign in". Adding /bsc to the pattern list fixes the OAuth-redirect → /bsc flow so the Steward runtime loads, syncs the JWT, and the payment UI renders for the authenticated user. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 445cc59 commit ccbbdb9

28 files changed

Lines changed: 1408 additions & 306 deletions

packages/chip/Makefile

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1382,10 +1382,13 @@ evidence-regression-test: no-hardware-action-check software-bsp-test physical-ga
13821382
ai-eda-tool-actions-check ai-eda-cocotb-stimulus-dry-run ai-eda-verification-targets \
13831383
ai-eda-physical-design-targets ai-eda-optimization-targets ai-eda-all-target-captures ai-eda-logic-synthesis-recipes \
13841384
ai-eda-logic-synthesis-baseline ai-eda-cuda-preflight ai-eda-cuda-payload \
1385-
ai-eda-cuda-payload-check ai-eda-cuda-run-plan-dry-run ai-eda-cuda-readiness-audit
1385+
ai-eda-cuda-payload-check ai-eda-cuda-run-plan-dry-run ai-eda-cuda-run-plan-safety-matrix ai-eda-cuda-readiness-audit
13861386
ai-eda-source-inventory-check:
13871387
@AI_EDA_RUN_ID=$(AI_EDA_RUN_ID) $(PYTHON) scripts/check_ai_eda_source_inventory.py
13881388

1389+
ai-eda-ai-workload-manifest-check:
1390+
@$(PYTHON) scripts/ai_eda/check_ai_workload_manifest.py
1391+
13891392
ai-eda-external-assets-check:
13901393
@$(PYTHON) scripts/ai_eda/check_external_asset_manifests.py
13911394

@@ -1667,11 +1670,14 @@ ai-eda-cuda-run-plan-dry-run: ai-eda-cuda-payload
16671670
@$(PYTHON) scripts/ai_eda/execute_cuda_run_plan.py --plan build/ai_eda/cuda_training_payloads/$(AI_EDA_RUN_ID)/cuda_training_run_plan.json --run-id $(AI_EDA_RUN_ID)
16681671
@$(PYTHON) scripts/ai_eda/check_cuda_run_plan_execution.py --report build/ai_eda/cuda_run_plan_execution/$(AI_EDA_RUN_ID)/cuda_run_plan_execution.json
16691672

1670-
ai-eda-cuda-readiness-audit: ai-eda-cuda-preflight ai-eda-cuda-run-plan-dry-run ai-eda-alphachip-checkpoint-blocker-check ai-eda-optimization-targets ai-eda-macro-placement-replay-preflight
1673+
ai-eda-cuda-run-plan-safety-matrix: ai-eda-cuda-payload
1674+
@$(PYTHON) scripts/ai_eda/check_cuda_run_plan_safety_matrix.py --plan build/ai_eda/cuda_training_payloads/$(AI_EDA_RUN_ID)/cuda_training_run_plan.json --run-id $(AI_EDA_RUN_ID)
1675+
1676+
ai-eda-cuda-readiness-audit: ai-eda-cuda-preflight ai-eda-cuda-run-plan-dry-run ai-eda-cuda-run-plan-safety-matrix ai-eda-alphachip-checkpoint-blocker-check ai-eda-optimization-targets ai-eda-macro-placement-replay-preflight
16711677
@$(PYTHON) scripts/ai_eda/capture_cuda_readiness_audit.py --run-id $(AI_EDA_RUN_ID) --setup-run-id $(AI_EDA_SETUP_RUN_ID) --training-handoff-run-id $(AI_EDA_TRAINING_HANDOFF_RUN_ID)
16721678
@$(PYTHON) scripts/ai_eda/check_cuda_readiness_audit.py --report build/ai_eda/cuda_readiness_audit/$(AI_EDA_RUN_ID)/cuda_readiness_audit.json
16731679

1674-
docs-check: ai-eda-local-rag-index ai-eda-backend-preflight ai-eda-all-target-captures ai-eda-source-inventory-check ai-eda-external-assets-check ai-eda-external-intake-check ai-eda-alphachip-checkpoint-blocker-check ai-eda-internal-schemas-check ai-eda-candidate-manifests-check ai-eda-tool-actions-check ai-eda-cocotb-stimulus-dry-run
1680+
docs-check: ai-eda-local-rag-index ai-eda-backend-preflight ai-eda-all-target-captures ai-eda-source-inventory-check ai-eda-ai-workload-manifest-check ai-eda-external-assets-check ai-eda-external-intake-check ai-eda-alphachip-checkpoint-blocker-check ai-eda-internal-schemas-check ai-eda-candidate-manifests-check ai-eda-tool-actions-check ai-eda-cocotb-stimulus-dry-run
16751681
@$(PYTHON) scripts/docs_check.py
16761682

16771683
tool-versions:

packages/chip/README.md

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -111,19 +111,22 @@ paper PDF, model weights, or generated assertions are treated as chip evidence.
111111
`make ai-eda-cuda-payload` also runs the payload checker, which validates the
112112
tarball, embedded run plan, generated `cuda_handoff_README.md`, selected
113113
assets, critical fetch commands, expected CUDA outputs, the current-research
114-
watchlist capture handoff, OpenROAD ML snapshot handoff, and the
115-
no-datasets/no-weights payload boundary. `make ai-eda-cuda-run-plan-dry-run`
114+
watchlist capture handoff, OpenROAD ML snapshot handoff, the E1 AI workload
115+
manifest/checker, and the no-datasets/no-weights payload boundary.
116+
`make ai-eda-cuda-run-plan-dry-run`
116117
expands the embedded CUDA run plan into a reviewed execution manifest without
117-
running commands; real execution through `execute_cuda_run_plan.py --execute`
118-
must name one or more `--stage` values and uses explicit allow flags for
119-
download, training, inference, replay, and AlphaChip stages. The executor also
120-
skips run-plan orchestration commands inside the plan so it cannot recursively
121-
invoke itself. `make ai-eda-cuda-readiness-audit`
122-
first validates that dry-run execution manifest, then summarizes the preflight,
123-
payload, AlphaChip checkpoint blocker, current-research watchlist,
124-
setup-check/bootstrap evidence, training-handoff bootstrap evidence, and E1
125-
replay-preflight state into one machine-readable blocked-or-ready report for
126-
the CUDA host. For evidence produced under
118+
running commands. `make ai-eda-cuda-run-plan-safety-matrix` then proves each
119+
stage can be selected independently and that download, training, inference,
120+
replay, and AlphaChip stages are blocked in execute mode unless their explicit
121+
allow flags are present. Real execution through
122+
`execute_cuda_run_plan.py --execute` must name one or more `--stage` values.
123+
The executor also skips run-plan orchestration commands inside the plan so it
124+
cannot recursively invoke itself. `make ai-eda-cuda-readiness-audit`
125+
first validates that dry-run execution manifest and safety matrix, then
126+
summarizes the preflight, payload, AlphaChip checkpoint blocker,
127+
current-research watchlist, setup-check/bootstrap evidence, training-handoff
128+
bootstrap evidence, and E1 replay-preflight state into one machine-readable
129+
blocked-or-ready report for the CUDA host. For evidence produced under
127130
different run IDs, pass `AI_EDA_SETUP_RUN_ID=<setup-run>` and
128131
`AI_EDA_TRAINING_HANDOFF_RUN_ID=<handoff-run>` when invoking the audit.
129132

Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
schema: eliza.ai_eda.ai_workload_manifest.v1
2+
updated: 2026-05-21
3+
claim_boundary: ai_workload_manifest_only_no_benchmark_performance_or_release_claim
4+
policy:
5+
release_use_allowed: false
6+
performance_claim_allowed: false
7+
fallback_ops_must_be_reported: true
8+
e1_npu_claim_requires_zero_fallback_proof: true
9+
calibrated_power_or_timing_required_for_tops_per_watt: true
10+
workloads:
11+
- id: mobile-smoke-tflite-cpu
12+
category: runtime_benchmark
13+
benchmark_plan_ref: tflite_cpu
14+
source: benchmarks/models/generate_mobile_smoke_tflite.py
15+
license_status: redistributable_generated_fixture
16+
artifacts:
17+
- path: benchmarks/models/mobile_smoke.tflite
18+
sha256: 6bb01f97e01d782b139eecf32fecada42c08a8edc8d2148da4dcf63b22dd972a
19+
role: model
20+
input_shape:
21+
input: [1, 32]
22+
quantization: fp32
23+
expected_ops:
24+
- FULLY_CONNECTED
25+
- RELU
26+
- SOFTMAX
27+
fallback_ops: []
28+
runtime_path: benchmark_model_cpu
29+
golden_output_tolerance:
30+
kind: smoke_runtime_only
31+
max_abs_error: null
32+
evidence_status: ready_for_cpu_smoke_when_benchmark_model_exists
33+
blockers:
34+
- benchmark_model_binary_required_for_real_runtime_numbers
35+
- id: mobile-smoke-tflite-e1-npu
36+
category: runtime_benchmark
37+
benchmark_plan_ref: tflite_e1_npu
38+
source: benchmarks/models/generate_mobile_smoke_tflite.py
39+
license_status: redistributable_generated_fixture
40+
artifacts:
41+
- path: benchmarks/models/mobile_smoke.tflite
42+
sha256: 6bb01f97e01d782b139eecf32fecada42c08a8edc8d2148da4dcf63b22dd972a
43+
role: model
44+
- path: docs/benchmarks/capabilities/e1_npu_nnapi.proof.template.json
45+
role: proof_template
46+
input_shape:
47+
input: [1, 32]
48+
quantization: fp32
49+
expected_ops:
50+
- FULLY_CONNECTED
51+
- RELU
52+
- SOFTMAX
53+
fallback_ops: []
54+
runtime_path: benchmark_model_nnapi_e1_npu
55+
requires_zero_fallback_proof: true
56+
golden_output_tolerance:
57+
kind: cpu_vs_nnapi_profiled_smoke
58+
max_abs_error: 0.001
59+
evidence_status: blocked_until_e1_nnapi_proof
60+
blockers:
61+
- missing_e1_npu_nnapi_proof_json
62+
- missing_target_benchmark_model_nnapi_transcript
63+
- id: npu-arch-sim-open-2028
64+
category: architecture_sim
65+
benchmark_plan_ref: npu_arch_sim_open_2028
66+
source: benchmarks/sim/run_npu_scale_sim.py
67+
license_status: local_project_fixture
68+
artifacts:
69+
- path: benchmarks/sim/run_npu_scale_sim.py
70+
role: simulator
71+
- path: docs/spec-db/npu-2028-target.yaml
72+
role: target_contract
73+
input_shape:
74+
sweep: deterministic_gemm_conv_attention
75+
quantization: int8
76+
expected_ops:
77+
- GEMM
78+
- CONV
79+
- ATTENTION
80+
fallback_ops: []
81+
runtime_path: python_scale_sim
82+
golden_output_tolerance:
83+
kind: deterministic_json_metrics
84+
max_abs_error: 0.0
85+
evidence_status: modeled_only_not_release_benchmark
86+
blockers:
87+
- modeled_tops_not_calibrated_to_e1_rtl_or_silicon
88+
- id: npu-arch-sim-sota-2028
89+
category: architecture_sim
90+
benchmark_plan_ref: npu_arch_sim_sota_2028
91+
source: benchmarks/sim/run_npu_scale_sim.py
92+
license_status: local_project_fixture
93+
artifacts:
94+
- path: benchmarks/sim/run_npu_scale_sim.py
95+
role: simulator
96+
- path: docs/spec-db/competitor-2028-target.md
97+
role: comparison_target
98+
input_shape:
99+
sweep: deterministic_gemm_conv_attention
100+
quantization: int8
101+
expected_ops:
102+
- GEMM
103+
- CONV
104+
- ATTENTION
105+
fallback_ops: []
106+
runtime_path: python_scale_sim
107+
golden_output_tolerance:
108+
kind: deterministic_json_metrics
109+
max_abs_error: 0.0
110+
evidence_status: modeled_only_not_release_benchmark
111+
blockers:
112+
- modeled_tops_not_calibrated_to_e1_rtl_or_silicon
113+
- id: e1-npu-timeloop-arch
114+
category: dataflow_mapping
115+
source: benchmarks/sim/run_npu_timeloop.py
116+
license_status: local_project_fixture_plus_optional_external_tool
117+
artifacts:
118+
- path: benchmarks/sim/run_npu_timeloop.py
119+
role: runner
120+
- path: benchmarks/sim/configs/e1_npu_timeloop_arch.yaml
121+
role: architecture_config
122+
input_shape:
123+
mapping: local_architecture_config
124+
quantization: int8
125+
expected_ops:
126+
- GEMM
127+
- CONV
128+
fallback_ops: []
129+
runtime_path: timeloop_accelergy_optional_backend
130+
golden_output_tolerance:
131+
kind: blocked_until_backend_installed
132+
max_abs_error: null
133+
evidence_status: blocked_until_timeloop_backend_present
134+
blockers:
135+
- timeloop_accelergy_not_required_for_default_local_gate
136+
- mapping_outputs_not_calibrated_to_e1_rtl
137+
- id: e1-stablehlo-tiny-mlp
138+
category: compiler_lowering
139+
source: compiler/runtime/test_e1_npu_tiny_mlp_e2e.py
140+
license_status: local_project_fixture
141+
artifacts:
142+
- path: compiler/runtime/test_e1_npu_tiny_mlp_e2e.py
143+
role: e2e_test
144+
- path: compiler/runtime/e1_npu_stablehlo.py
145+
role: lowering
146+
- path: compiler/runtime/e1_npu_runtime.py
147+
role: runtime
148+
input_shape:
149+
input: tiny_mlp_test_fixture
150+
quantization: int8
151+
expected_ops:
152+
- stablehlo.dot_general
153+
- stablehlo.add
154+
- stablehlo.relu
155+
fallback_ops: []
156+
runtime_path: python_e1_npu_runtime_sim
157+
golden_output_tolerance:
158+
kind: test_assertions
159+
max_abs_error: 0.0
160+
evidence_status: local_test_fixture_only
161+
blockers:
162+
- not_a_target_hardware_benchmark
163+
- id: e1-quantization-int4-awq-gptq
164+
category: quantization
165+
source: compiler/quantization
166+
license_status: local_project_fixture
167+
artifacts:
168+
- path: compiler/quantization/awq_int4.py
169+
role: awq_calibrator
170+
- path: compiler/quantization/gptq_int4.py
171+
role: gptq_calibrator
172+
- path: compiler/quantization/tests/test_awq_int4_mlp_e2e.py
173+
role: e2e_test
174+
input_shape:
175+
input: local_mlp_calibration_fixture
176+
quantization: int4
177+
expected_ops:
178+
- eliza.group_scaled_int4_matmul
179+
- tflite.matmul
180+
fallback_ops: []
181+
runtime_path: python_quantization_fixture
182+
golden_output_tolerance:
183+
kind: quantized_vs_float_fixture
184+
max_abs_error: 0.25
185+
evidence_status: local_test_fixture_only
186+
blockers:
187+
- no_representative_product_calibration_set
188+
- no_e1_runtime_power_latency_capture
189+
- id: e1-quantization-fp8-sparse24
190+
category: quantization
191+
source: compiler/quantization
192+
license_status: local_project_fixture
193+
artifacts:
194+
- path: compiler/quantization/fp8_e4m3_calibration.py
195+
role: fp8_calibrator
196+
- path: compiler/quantization/sparse_2_4.py
197+
role: sparse_calibrator
198+
- path: compiler/quantization/tests/test_calibrators.py
199+
role: calibrator_tests
200+
input_shape:
201+
input: local_calibration_fixture
202+
quantization: fp8_e4m3_and_sparse_2_4
203+
expected_ops:
204+
- eliza.fp8_matmul
205+
- eliza.sparse_2_4_matmul
206+
fallback_ops: []
207+
runtime_path: python_quantization_fixture
208+
golden_output_tolerance:
209+
kind: quantized_vs_float_fixture
210+
max_abs_error: 0.25
211+
evidence_status: local_test_fixture_only
212+
blockers:
213+
- no_representative_product_calibration_set
214+
- no_e1_runtime_power_latency_capture

0 commit comments

Comments
 (0)