runglet 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- runglet-0.3.0/CHANGELOG.md +82 -0
- runglet-0.3.0/CONTRIBUTING.md +27 -0
- runglet-0.3.0/LICENSE +14 -0
- runglet-0.3.0/MANIFEST.in +6 -0
- runglet-0.3.0/PKG-INFO +308 -0
- runglet-0.3.0/README.md +271 -0
- runglet-0.3.0/pyproject.toml +100 -0
- runglet-0.3.0/setup.cfg +4 -0
- runglet-0.3.0/src/runglet/__init__.py +3 -0
- runglet-0.3.0/src/runglet/__main__.py +5 -0
- runglet-0.3.0/src/runglet/analysis.py +134 -0
- runglet-0.3.0/src/runglet/authoring.py +783 -0
- runglet-0.3.0/src/runglet/backends/__init__.py +1 -0
- runglet-0.3.0/src/runglet/backends/fatek/__init__.py +329 -0
- runglet-0.3.0/src/runglet/backends/fatek/allocation.py +726 -0
- runglet-0.3.0/src/runglet/backends/fatek/atomic_lowering.py +387 -0
- runglet-0.3.0/src/runglet/backends/fatek/bindings.py +65 -0
- runglet-0.3.0/src/runglet/backends/fatek/capabilities.py +288 -0
- runglet-0.3.0/src/runglet/backends/fatek/control_lowering.py +478 -0
- runglet-0.3.0/src/runglet/backends/fatek/fun30.py +190 -0
- runglet-0.3.0/src/runglet/backends/fatek/fun30_differential.py +372 -0
- runglet-0.3.0/src/runglet/backends/fatek/fun30_evidence.py +234 -0
- runglet-0.3.0/src/runglet/backends/fatek/fun30_logic_evidence.py +1012 -0
- runglet-0.3.0/src/runglet/backends/fatek/fun30_lowering.py +1277 -0
- runglet-0.3.0/src/runglet/backends/fatek/fun30_relay_ir.py +526 -0
- runglet-0.3.0/src/runglet/backends/fatek/fun30_vendor_evidence.py +1031 -0
- runglet-0.3.0/src/runglet/backends/fatek/fun30_wrapper.py +186 -0
- runglet-0.3.0/src/runglet/backends/fatek/network_executor.py +147 -0
- runglet-0.3.0/src/runglet/backends/fatek/network_ir.py +424 -0
- runglet-0.3.0/src/runglet/backends/fatek/network_lowering.py +667 -0
- runglet-0.3.0/src/runglet/backends/fatek/runtime_protocol.py +724 -0
- runglet-0.3.0/src/runglet/backends/fatek/trace_map.py +266 -0
- runglet-0.3.0/src/runglet/backends/fatek/verification.py +205 -0
- runglet-0.3.0/src/runglet/build_manifest.py +240 -0
- runglet-0.3.0/src/runglet/cli.py +2636 -0
- runglet-0.3.0/src/runglet/command_analysis.py +93 -0
- runglet-0.3.0/src/runglet/compiler.py +103 -0
- runglet-0.3.0/src/runglet/context_pack.py +222 -0
- runglet-0.3.0/src/runglet/control/__init__.py +32 -0
- runglet-0.3.0/src/runglet/control/generated_pid.py +555 -0
- runglet-0.3.0/src/runglet/control/relay_ir.py +1203 -0
- runglet-0.3.0/src/runglet/diagnostics.py +124 -0
- runglet-0.3.0/src/runglet/float32.py +43 -0
- runglet-0.3.0/src/runglet/frontend/__init__.py +1 -0
- runglet-0.3.0/src/runglet/frontend/ast.py +530 -0
- runglet-0.3.0/src/runglet/frontend/ast_builder.py +865 -0
- runglet-0.3.0/src/runglet/frontend/cst.py +59 -0
- runglet-0.3.0/src/runglet/frontend/formatter.py +627 -0
- runglet-0.3.0/src/runglet/frontend/grammar_v0_2.py +491 -0
- runglet-0.3.0/src/runglet/frontend/grammar_v0_3.py +74 -0
- runglet-0.3.0/src/runglet/frontend/parser.py +25 -0
- runglet-0.3.0/src/runglet/frontend/resolver.py +502 -0
- runglet-0.3.0/src/runglet/frontend/source.py +237 -0
- runglet-0.3.0/src/runglet/hil/__init__.py +65 -0
- runglet-0.3.0/src/runglet/hil/bench.py +643 -0
- runglet-0.3.0/src/runglet/hil/checkout.py +575 -0
- runglet-0.3.0/src/runglet/hil/recorder.py +632 -0
- runglet-0.3.0/src/runglet/interpreter/__init__.py +12 -0
- runglet-0.3.0/src/runglet/interpreter/atomic.py +323 -0
- runglet-0.3.0/src/runglet/interpreter/sequential.py +183 -0
- runglet-0.3.0/src/runglet/lsp/__init__.py +5 -0
- runglet-0.3.0/src/runglet/lsp/__main__.py +6 -0
- runglet-0.3.0/src/runglet/lsp/server.py +1567 -0
- runglet-0.3.0/src/runglet/program_check.py +1241 -0
- runglet-0.3.0/src/runglet/py.typed +1 -0
- runglet-0.3.0/src/runglet/range_analysis.py +685 -0
- runglet-0.3.0/src/runglet/relay_ir/__init__.py +29 -0
- runglet-0.3.0/src/runglet/relay_ir/float32.py +78 -0
- runglet-0.3.0/src/runglet/relay_ir/inspection.py +214 -0
- runglet-0.3.0/src/runglet/relay_ir/lowering.py +1158 -0
- runglet-0.3.0/src/runglet/relay_ir/models.py +330 -0
- runglet-0.3.0/src/runglet/representability.py +86 -0
- runglet-0.3.0/src/runglet/resources/__init__.py +1 -0
- runglet-0.3.0/src/runglet/resources/docs/adr/0007-target-native-fun30-for-initial-pid-delivery.md +83 -0
- runglet-0.3.0/src/runglet/resources/docs/language/authoring-card.md +100 -0
- runglet-0.3.0/src/runglet/resources/docs/language/diagnostics.md +113 -0
- runglet-0.3.0/src/runglet/resources/examples/patterns/README.md +10 -0
- runglet-0.3.0/src/runglet/resources/examples/patterns/core/fault-interlock-arbitration.rung +94 -0
- runglet-0.3.0/src/runglet/resources/examples/patterns/core/signal-and-timer.rung +37 -0
- runglet-0.3.0/src/runglet/resources/examples/patterns/core/value-defaults-and-hold.rung +70 -0
- runglet-0.3.0/src/runglet/resources/examples/patterns/core/writable-memory.rung +61 -0
- runglet-0.3.0/src/runglet/resources/examples/patterns/native-fun30/README.md +9 -0
- runglet-0.3.0/src/runglet/resources/examples/starter/starter.rung +66 -0
- runglet-0.3.0/src/runglet/resources/fixtures/control/split-range-fun30-v0.2/controller.rung +216 -0
- runglet-0.3.0/src/runglet/resources/schemas/authoring-context-v0.1.schema.json +67 -0
- runglet-0.3.0/src/runglet/resources/schemas/authoring-context-v0.2.schema.json +67 -0
- runglet-0.3.0/src/runglet/resources/schemas/check-report-v0.1.schema.json +119 -0
- runglet-0.3.0/src/runglet/resources/schemas/check-report-v0.2.schema.json +44 -0
- runglet-0.3.0/src/runglet/resources/schemas/inspect-report-v0.1.schema.json +227 -0
- runglet-0.3.0/src/runglet/resources/schemas/inspect-report-v0.2.schema.json +97 -0
- runglet-0.3.0/src/runglet/resources/schemas/scaffold-v0.1.schema.json +64 -0
- runglet-0.3.0/src/runglet/resources/schemas/scaffold-v0.2.schema.json +61 -0
- runglet-0.3.0/src/runglet/resources/spec/grammar/runglet-v0.2.ebnf +249 -0
- runglet-0.3.0/src/runglet/resources/spec/grammar/runglet-v0.2.vocabulary.json +217 -0
- runglet-0.3.0/src/runglet/resources/spec/grammar/runglet-v0.3.ebnf +253 -0
- runglet-0.3.0/src/runglet/resources/spec/grammar/runglet-v0.3.vocabulary.json +217 -0
- runglet-0.3.0/src/runglet/scaffold.py +387 -0
- runglet-0.3.0/src/runglet/scenarios/__init__.py +101 -0
- runglet-0.3.0/src/runglet/scenarios/coverage.py +238 -0
- runglet-0.3.0/src/runglet/scenarios/differential.py +729 -0
- runglet-0.3.0/src/runglet/scenarios/fatek_reset.py +289 -0
- runglet-0.3.0/src/runglet/scenarios/mutation.py +120 -0
- runglet-0.3.0/src/runglet/scenarios/runner.py +280 -0
- runglet-0.3.0/src/runglet/scenarios/trace.py +352 -0
- runglet-0.3.0/src/runglet/type_checker.py +387 -0
- runglet-0.3.0/src/runglet/types.py +218 -0
- runglet-0.3.0/src/runglet/winpro/__init__.py +111 -0
- runglet-0.3.0/src/runglet/winpro/canvas.py +1092 -0
- runglet-0.3.0/src/runglet/winpro/canvas_controller.py +5452 -0
- runglet-0.3.0/src/runglet/winpro/canvas_mcp.py +1918 -0
- runglet-0.3.0/src/runglet/winpro/flaui_client.py +186 -0
- runglet-0.3.0/src/runglet/winpro/fun30_acceptance.py +208 -0
- runglet-0.3.0/src/runglet/winpro/fun30_automation.py +929 -0
- runglet-0.3.0/src/runglet/winpro/fun30_coverage.py +180 -0
- runglet-0.3.0/src/runglet/winpro/fun30_export_verification.py +506 -0
- runglet-0.3.0/src/runglet/winpro/fun30_gap_evidence.py +368 -0
- runglet-0.3.0/src/runglet/winpro/fun30_logic_campaign.py +486 -0
- runglet-0.3.0/src/runglet/winpro/handoff.py +299 -0
- runglet-0.3.0/src/runglet/winpro/ldr.py +2234 -0
- runglet-0.3.0/src/runglet/winpro/ldr_coverage.py +103 -0
- runglet-0.3.0/src/runglet/winpro/manual_artifact.py +138 -0
- runglet-0.3.0/src/runglet/winpro/pdw.py +146 -0
- runglet-0.3.0/src/runglet.egg-info/PKG-INFO +308 -0
- runglet-0.3.0/src/runglet.egg-info/SOURCES.txt +272 -0
- runglet-0.3.0/src/runglet.egg-info/dependency_links.txt +1 -0
- runglet-0.3.0/src/runglet.egg-info/entry_points.txt +5 -0
- runglet-0.3.0/src/runglet.egg-info/requires.txt +12 -0
- runglet-0.3.0/src/runglet.egg-info/top_level.txt +1 -0
- runglet-0.3.0/tests/test_analysis.py +159 -0
- runglet-0.3.0/tests/test_ast_builder.py +161 -0
- runglet-0.3.0/tests/test_atomic_interpreter.py +175 -0
- runglet-0.3.0/tests/test_authoring.py +690 -0
- runglet-0.3.0/tests/test_authoring_schemas_v02.py +151 -0
- runglet-0.3.0/tests/test_build_manifest.py +194 -0
- runglet-0.3.0/tests/test_cli.py +1928 -0
- runglet-0.3.0/tests/test_command_analysis.py +135 -0
- runglet-0.3.0/tests/test_compound_high_address.py +144 -0
- runglet-0.3.0/tests/test_conditional_numeric_move.py +176 -0
- runglet-0.3.0/tests/test_conditional_numeric_output.py +138 -0
- runglet-0.3.0/tests/test_control_gain_types.py +118 -0
- runglet-0.3.0/tests/test_control_loop_frontend.py +278 -0
- runglet-0.3.0/tests/test_demo_chamber.py +404 -0
- runglet-0.3.0/tests/test_demo_requirements.py +110 -0
- runglet-0.3.0/tests/test_diagnostics.py +87 -0
- runglet-0.3.0/tests/test_differential_runner.py +336 -0
- runglet-0.3.0/tests/test_distribution_metadata.py +46 -0
- runglet-0.3.0/tests/test_eight_branch_singletons_high_address.py +133 -0
- runglet-0.3.0/tests/test_eight_branch_widths_1_1_1_1_1_1_1_3_high_address.py +142 -0
- runglet-0.3.0/tests/test_execution_profile_boundaries_spec.py +53 -0
- runglet-0.3.0/tests/test_fatek_address_allocator.py +351 -0
- runglet-0.3.0/tests/test_fatek_allocation_schema.py +143 -0
- runglet-0.3.0/tests/test_fatek_atomic_lowering.py +389 -0
- runglet-0.3.0/tests/test_fatek_bindings.py +96 -0
- runglet-0.3.0/tests/test_fatek_capability_schema.py +95 -0
- runglet-0.3.0/tests/test_fatek_condition_simplifier.py +123 -0
- runglet-0.3.0/tests/test_fatek_control_lowering.py +573 -0
- runglet-0.3.0/tests/test_fatek_differential_suite.py +93 -0
- runglet-0.3.0/tests/test_fatek_fun30.py +119 -0
- runglet-0.3.0/tests/test_fatek_fun30_allocation.py +154 -0
- runglet-0.3.0/tests/test_fatek_fun30_differential.py +77 -0
- runglet-0.3.0/tests/test_fatek_fun30_evidence.py +152 -0
- runglet-0.3.0/tests/test_fatek_fun30_fixture_bundle.py +70 -0
- runglet-0.3.0/tests/test_fatek_fun30_logic_evidence.py +399 -0
- runglet-0.3.0/tests/test_fatek_fun30_lowering.py +548 -0
- runglet-0.3.0/tests/test_fatek_fun30_mutations.py +329 -0
- runglet-0.3.0/tests/test_fatek_fun30_relay_ir.py +184 -0
- runglet-0.3.0/tests/test_fatek_fun30_vendor_evidence.py +411 -0
- runglet-0.3.0/tests/test_fatek_fun30_wrapper.py +249 -0
- runglet-0.3.0/tests/test_fatek_network_executor.py +180 -0
- runglet-0.3.0/tests/test_fatek_network_ir.py +405 -0
- runglet-0.3.0/tests/test_fatek_network_ir_schema.py +82 -0
- runglet-0.3.0/tests/test_fatek_network_lowering.py +506 -0
- runglet-0.3.0/tests/test_fatek_reset.py +132 -0
- runglet-0.3.0/tests/test_fatek_runtime_protocol.py +402 -0
- runglet-0.3.0/tests/test_fatek_target_profile.py +54 -0
- runglet-0.3.0/tests/test_fatek_trace_map.py +164 -0
- runglet-0.3.0/tests/test_fatek_verification.py +126 -0
- runglet-0.3.0/tests/test_fault_lowering.py +120 -0
- runglet-0.3.0/tests/test_five_branch_singletons_high_address.py +130 -0
- runglet-0.3.0/tests/test_five_branch_widths_1_1_2_2_3_high_address.py +137 -0
- runglet-0.3.0/tests/test_float32_relay_ir.py +142 -0
- runglet-0.3.0/tests/test_formatter.py +246 -0
- runglet-0.3.0/tests/test_four_branch_singletons_high_address.py +135 -0
- runglet-0.3.0/tests/test_four_branch_widths_1_2_3_3_high_address.py +142 -0
- runglet-0.3.0/tests/test_frontend_parser.py +247 -0
- runglet-0.3.0/tests/test_generated_pid.py +430 -0
- runglet-0.3.0/tests/test_generated_pid_relay_ir.py +262 -0
- runglet-0.3.0/tests/test_hil_bench.py +157 -0
- runglet-0.3.0/tests/test_hil_checkout.py +208 -0
- runglet-0.3.0/tests/test_hil_recorder.py +428 -0
- runglet-0.3.0/tests/test_inspection.py +79 -0
- runglet-0.3.0/tests/test_int32_register_move.py +387 -0
- runglet-0.3.0/tests/test_interlock_lowering.py +111 -0
- runglet-0.3.0/tests/test_language_examples_docs.py +508 -0
- runglet-0.3.0/tests/test_language_spec.py +88 -0
- runglet-0.3.0/tests/test_lsp_server.py +1085 -0
- runglet-0.3.0/tests/test_memory_update_frontend.py +262 -0
- runglet-0.3.0/tests/test_memory_update_integration.py +594 -0
- runglet-0.3.0/tests/test_memory_update_semantics.py +623 -0
- runglet-0.3.0/tests/test_memory_update_tooling.py +174 -0
- runglet-0.3.0/tests/test_mixed_high_address.py +139 -0
- runglet-0.3.0/tests/test_mutation.py +66 -0
- runglet-0.3.0/tests/test_nested_high_address.py +137 -0
- runglet-0.3.0/tests/test_nested_unequal_high_address.py +132 -0
- runglet-0.3.0/tests/test_nested_width3_high_address.py +140 -0
- runglet-0.3.0/tests/test_nine_branch_widths_1_1_1_1_1_1_1_1_3_high_address.py +143 -0
- runglet-0.3.0/tests/test_parser_spike.py +48 -0
- runglet-0.3.0/tests/test_property_based_toolchain.py +140 -0
- runglet-0.3.0/tests/test_relay_ir_lowering.py +176 -0
- runglet-0.3.0/tests/test_relay_ir_schema.py +105 -0
- runglet-0.3.0/tests/test_relay_ir_v02_schema.py +87 -0
- runglet-0.3.0/tests/test_release_workflows.py +79 -0
- runglet-0.3.0/tests/test_representability.py +88 -0
- runglet-0.3.0/tests/test_resolver.py +377 -0
- runglet-0.3.0/tests/test_rising_numeric_hold.py +179 -0
- runglet-0.3.0/tests/test_scaffold.py +291 -0
- runglet-0.3.0/tests/test_scenario_lowering.py +119 -0
- runglet-0.3.0/tests/test_scenario_runner.py +169 -0
- runglet-0.3.0/tests/test_semantic_coverage.py +129 -0
- runglet-0.3.0/tests/test_semantic_ids_spec.py +53 -0
- runglet-0.3.0/tests/test_sequential_executor.py +162 -0
- runglet-0.3.0/tests/test_sequential_scan_spec.py +52 -0
- runglet-0.3.0/tests/test_seven_branch_singletons_high_address.py +132 -0
- runglet-0.3.0/tests/test_seven_branch_widths_1_1_1_1_1_1_3_high_address.py +141 -0
- runglet-0.3.0/tests/test_signal_semantics.py +309 -0
- runglet-0.3.0/tests/test_six_branch_singletons_high_address.py +131 -0
- runglet-0.3.0/tests/test_six_branch_widths_1_1_1_1_2_3_high_address.py +138 -0
- runglet-0.3.0/tests/test_snapshot_atomic_spec.py +49 -0
- runglet-0.3.0/tests/test_source_reader.py +67 -0
- runglet-0.3.0/tests/test_temporal_lowering.py +111 -0
- runglet-0.3.0/tests/test_three_branch_dual_width3_high_address.py +141 -0
- runglet-0.3.0/tests/test_three_branch_equal_high_address.py +144 -0
- runglet-0.3.0/tests/test_three_branch_high_address.py +139 -0
- runglet-0.3.0/tests/test_three_branch_series_width3_high_address.py +145 -0
- runglet-0.3.0/tests/test_three_branch_singletons_high_address.py +134 -0
- runglet-0.3.0/tests/test_three_branch_singletons_width3_high_address.py +135 -0
- runglet-0.3.0/tests/test_three_branch_width3_high_address.py +140 -0
- runglet-0.3.0/tests/test_three_branch_widths_2_3_3_high_address.py +146 -0
- runglet-0.3.0/tests/test_three_branch_widths_3_3_3_high_address.py +147 -0
- runglet-0.3.0/tests/test_timer_lowering.py +110 -0
- runglet-0.3.0/tests/test_trace.py +148 -0
- runglet-0.3.0/tests/test_type_checker.py +121 -0
- runglet-0.3.0/tests/test_type_system_spec.py +49 -0
- runglet-0.3.0/tests/test_types.py +86 -0
- runglet-0.3.0/tests/test_vscode_language_assets.py +167 -0
- runglet-0.3.0/tests/test_vscode_snippets.py +57 -0
- runglet-0.3.0/tests/test_windows_authoring_packaging.py +63 -0
- runglet-0.3.0/tests/test_windows_canvas_acceptance.py +68 -0
- runglet-0.3.0/tests/test_windows_canvas_bootstrap.py +60 -0
- runglet-0.3.0/tests/test_windows_existing_project_export.py +33 -0
- runglet-0.3.0/tests/test_windows_flaui_probe.py +79 -0
- runglet-0.3.0/tests/test_windows_fun30_acceptance.py +640 -0
- runglet-0.3.0/tests/test_windows_ldr_experiment.py +90 -0
- runglet-0.3.0/tests/test_windows_ldr_mcp_acceptance.py +149 -0
- runglet-0.3.0/tests/test_winpro_canvas.py +1056 -0
- runglet-0.3.0/tests/test_winpro_canvas_controller.py +3907 -0
- runglet-0.3.0/tests/test_winpro_canvas_mcp.py +1281 -0
- runglet-0.3.0/tests/test_winpro_flaui_client.py +152 -0
- runglet-0.3.0/tests/test_winpro_fun30_acceptance.py +114 -0
- runglet-0.3.0/tests/test_winpro_fun30_automation.py +380 -0
- runglet-0.3.0/tests/test_winpro_fun30_coverage.py +104 -0
- runglet-0.3.0/tests/test_winpro_fun30_evidence.py +125 -0
- runglet-0.3.0/tests/test_winpro_fun30_export_verification.py +132 -0
- runglet-0.3.0/tests/test_winpro_fun30_gap_evidence.py +292 -0
- runglet-0.3.0/tests/test_winpro_fun30_logic_campaign.py +193 -0
- runglet-0.3.0/tests/test_winpro_golden_project.py +31 -0
- runglet-0.3.0/tests/test_winpro_handoff.py +199 -0
- runglet-0.3.0/tests/test_winpro_int32_comparison_scenarios.py +62 -0
- runglet-0.3.0/tests/test_winpro_ldr.py +3248 -0
- runglet-0.3.0/tests/test_winpro_ldr_coverage.py +108 -0
- runglet-0.3.0/tests/test_winpro_manual_artifact.py +183 -0
- runglet-0.3.0/tests/test_winpro_mixed_parallel_scenarios.py +56 -0
- runglet-0.3.0/tests/test_winpro_pdw.py +84 -0
- runglet-0.3.0/tests/test_winpro_wrapper_function_evidence.py +89 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable user-facing changes to Runglet are documented here.
|
|
4
|
+
|
|
5
|
+
Runglet follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Release
|
|
6
|
+
artifacts use the version exposed by `runglet --version`.
|
|
7
|
+
|
|
8
|
+
## [0.3.0] - 2026-07-27
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Declarative snapshot-atomic writable memory with mandatory HOLD/value defaults,
|
|
13
|
+
ordered `VALUE ... WHEN` cases, one-scan commit visibility, and shared diagnostics.
|
|
14
|
+
- Guard-refined integer and fixed-point representability proof for memory update
|
|
15
|
+
expressions.
|
|
16
|
+
- Offline reference-interpreter and FATEK current/shadow Network-IR equivalence for
|
|
17
|
+
volatile writable state.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Published language specification 0.3 and v0.2 machine-output successors for check,
|
|
22
|
+
inspect, authoring-context, and scaffold reports while retaining historical
|
|
23
|
+
contracts.
|
|
24
|
+
- Added writable-memory authoring guidance, checked examples, stable-ID/source-map
|
|
25
|
+
rules, and VS Code assets.
|
|
26
|
+
|
|
27
|
+
### Safety
|
|
28
|
+
|
|
29
|
+
- FATEK snapshot-atomic deployment remains unsupported. This release adds no new LDR
|
|
30
|
+
encoding claim, external HMI/network write, WinPro contact, or PLC authorization.
|
|
31
|
+
|
|
32
|
+
## [0.2.0] - 2026-07-27
|
|
33
|
+
|
|
34
|
+
First packaged Runglet 0.2 authoring release.
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- Contributor-focused language server and VS Code authoring experience with shared
|
|
39
|
+
compiler diagnostics, formatting, contextual completion, navigation, snippets,
|
|
40
|
+
matching-block support, and offline compiler commands.
|
|
41
|
+
- Checked LLM authoring context, examples, project initialization, inspection, and
|
|
42
|
+
deterministic scenario workflows.
|
|
43
|
+
- Standalone Windows `runglet.exe` and `runglet-lsp.exe` bundle with the matching
|
|
44
|
+
versioned VSIX and no system Python or PowerShell dependency.
|
|
45
|
+
- Tag-driven GitHub Releases containing the wheel, source archive, Windows bundle,
|
|
46
|
+
VSIX, and SHA-256 checksums.
|
|
47
|
+
|
|
48
|
+
### Changed
|
|
49
|
+
|
|
50
|
+
- The Python package and CLI release version now align with language specification
|
|
51
|
+
`0.2.0`; the VS Code extension retains its independent version.
|
|
52
|
+
|
|
53
|
+
### Safety
|
|
54
|
+
|
|
55
|
+
- Offline authoring and release packaging do not contact WinProLadder, a PLC, HIL, or
|
|
56
|
+
production equipment.
|
|
57
|
+
|
|
58
|
+
## [0.0.1] - 2026-07-26
|
|
59
|
+
|
|
60
|
+
Initial alpha release.
|
|
61
|
+
|
|
62
|
+
### Added
|
|
63
|
+
|
|
64
|
+
- The Runglet 0.2 language frontend, canonical formatter, diagnostics, inspection,
|
|
65
|
+
Relay IR lowering, deterministic scenario runner, and language server.
|
|
66
|
+
- Package-backed `runglet init` scaffolding with generated `AGENTS.md`, a checked
|
|
67
|
+
starter program, and a hash-bound manifest.
|
|
68
|
+
- Offline authoring context and versioned machine-readable schemas.
|
|
69
|
+
- Progressive CLI help with `new`, `fmt`, `ctx`, and `test` aliases.
|
|
70
|
+
- One-level `hil`, `winpro`, and `fatek` specialist namespaces with hidden legacy
|
|
71
|
+
command compatibility.
|
|
72
|
+
- FATEK target planning, WinPro evidence tooling, and explicitly authorized isolated
|
|
73
|
+
bench workflows.
|
|
74
|
+
|
|
75
|
+
### Safety
|
|
76
|
+
|
|
77
|
+
- Authoring, checking, formatting, inspection, LSP, and scenario execution remain
|
|
78
|
+
offline and do not authorize access to WinProLadder, a PLC, or production equipment.
|
|
79
|
+
|
|
80
|
+
[0.3.0]: https://github.com/vedit/Runglet/releases/tag/v0.3.0
|
|
81
|
+
[0.2.0]: https://github.com/vedit/Runglet/releases/tag/v0.2.0
|
|
82
|
+
[0.0.1]: https://github.com/vedit/Runglet/releases/tag/v0.0.1
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
## Required checks
|
|
4
|
+
|
|
5
|
+
Before submitting a change, run:
|
|
6
|
+
|
|
7
|
+
```shell
|
|
8
|
+
uv run ruff format --check .
|
|
9
|
+
uv run ruff check .
|
|
10
|
+
uv run mypy
|
|
11
|
+
uv run pytest --cov
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Compiler rules
|
|
15
|
+
|
|
16
|
+
- Keep the AST and Relay IR fully typed. Do not use untyped dictionaries as semantic nodes.
|
|
17
|
+
- Prefer frozen data models and pure transformation passes.
|
|
18
|
+
- Preserve deterministic ordering, serialization, diagnostics, and generated IDs.
|
|
19
|
+
- Add positive and negative tests for language behavior.
|
|
20
|
+
- Treat observable semantic changes as specification changes and record them in an ADR.
|
|
21
|
+
- Never add a direct path that downloads to or starts a physical PLC without an explicit human gate.
|
|
22
|
+
|
|
23
|
+
## LLM-generated contributions
|
|
24
|
+
|
|
25
|
+
LLM-generated code is reviewed as untrusted external code. The task owner must understand and be able to explain it. Safety-significant compiler, backend, and deployment changes require an independent human reviewer. Tests must establish behavior; generated prose or apparent plausibility is not evidence of correctness.
|
|
26
|
+
|
|
27
|
+
The ADR workflow and template are documented in `docs/adr/README.md`.
|
runglet-0.3.0/LICENSE
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Runglet Proprietary License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Runglet contributors. All rights reserved.
|
|
4
|
+
|
|
5
|
+
This software and its accompanying documentation are proprietary. No permission is
|
|
6
|
+
granted to use, copy, modify, distribute, sublicense, sell, or create derivative works
|
|
7
|
+
from this software except under a separate written agreement with the copyright
|
|
8
|
+
holder.
|
|
9
|
+
|
|
10
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
11
|
+
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
12
|
+
PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE
|
|
13
|
+
LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY ARISING FROM, OUT OF, OR IN
|
|
14
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
runglet-0.3.0/PKG-INFO
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: runglet
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: Intent-oriented industrial control language and Relay IR toolchain
|
|
5
|
+
Author: Runglet contributors
|
|
6
|
+
License-Expression: LicenseRef-Proprietary
|
|
7
|
+
Project-URL: Homepage, https://github.com/vedit/Runglet
|
|
8
|
+
Project-URL: Repository, https://github.com/vedit/Runglet
|
|
9
|
+
Project-URL: Documentation, https://github.com/vedit/Runglet/tree/master/docs
|
|
10
|
+
Project-URL: Issues, https://github.com/vedit/Runglet/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/vedit/Runglet/blob/master/CHANGELOG.md
|
|
12
|
+
Keywords: compiler,industrial-control,language-server,ladder-logic,plc
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Intended Audience :: Manufacturing
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Software Development :: Compilers
|
|
21
|
+
Classifier: Typing :: Typed
|
|
22
|
+
Requires-Python: >=3.12
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Requires-Dist: lark==1.3.1
|
|
26
|
+
Requires-Dist: lsprotocol==2025.0.0
|
|
27
|
+
Requires-Dist: pygls==2.1.1
|
|
28
|
+
Provides-Extra: dev
|
|
29
|
+
Requires-Dist: coverage==7.10.1; extra == "dev"
|
|
30
|
+
Requires-Dist: hypothesis==6.136.7; extra == "dev"
|
|
31
|
+
Requires-Dist: mypy==1.17.0; extra == "dev"
|
|
32
|
+
Requires-Dist: pyinstaller==6.21.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pytest==8.4.1; extra == "dev"
|
|
34
|
+
Requires-Dist: pytest-cov==6.2.1; extra == "dev"
|
|
35
|
+
Requires-Dist: ruff==0.12.3; extra == "dev"
|
|
36
|
+
Dynamic: license-file
|
|
37
|
+
|
|
38
|
+
# Runglet
|
|
39
|
+
|
|
40
|
+
Runglet is a block-based, intent-oriented language for industrial control. It lowers into a typed, canonical Relay IR that can be interpreted, tested, and compiled for PLC targets.
|
|
41
|
+
|
|
42
|
+
The initial backend targets FATEK FBs controllers through WinProLadder 3.32. The initial physical verification target is an isolated FBs-20MCR2-AC test panel; no pressure vessel, oxygen-enriched environment, final chamber actuators, or human occupancy is in scope.
|
|
43
|
+
|
|
44
|
+
Runglet is alpha software. Its offline compiler and authoring workflow are usable, but
|
|
45
|
+
target-specific delivery remains evidence-gated and is not production-ready.
|
|
46
|
+
|
|
47
|
+
Language 0.3 adds declarative writable `MEMORY`: an optional snapshot-atomic `UPDATE`
|
|
48
|
+
block calculates one typed next value from the current scan snapshot and commits it at
|
|
49
|
+
the scan boundary. Guarded integer and fixed-point updates fail closed when range or
|
|
50
|
+
resolution safety cannot be proven.
|
|
51
|
+
|
|
52
|
+
## Install
|
|
53
|
+
|
|
54
|
+
Runglet requires Python 3.12 or later. For the isolated command-line application:
|
|
55
|
+
|
|
56
|
+
```shell
|
|
57
|
+
pipx install runglet
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
To install it into an existing Python environment:
|
|
61
|
+
|
|
62
|
+
```shell
|
|
63
|
+
python -m pip install runglet
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
The distribution is currently proprietary; see
|
|
67
|
+
[LICENSE](https://github.com/vedit/Runglet/blob/master/LICENSE) before use.
|
|
68
|
+
|
|
69
|
+
For Windows authoring without a Python installation, CI also produces a portable
|
|
70
|
+
`runglet-authoring-*-windows-*.zip`. It contains native launchers for both
|
|
71
|
+
`runglet.exe` and `runglet-lsp.exe`, their shared private runtime, and the matching
|
|
72
|
+
VS Code extension. Extract the complete archive, add its `bin` directory to the user
|
|
73
|
+
`PATH`, and install `vscode\runglet-vscode.vsix`. The executables launch directly and
|
|
74
|
+
do not use PowerShell. See
|
|
75
|
+
[`packaging/windows/README.md`](https://github.com/vedit/Runglet/blob/master/packaging/windows/README.md).
|
|
76
|
+
|
|
77
|
+
Tagged builds are available from
|
|
78
|
+
[GitHub Releases](https://github.com/vedit/Runglet/releases). Each `vVERSION` release
|
|
79
|
+
provides the Python wheel and source archive, the standalone Windows authoring ZIP, the
|
|
80
|
+
matching versioned VSIX, and `SHA256SUMS`.
|
|
81
|
+
|
|
82
|
+
## Installed package quick start
|
|
83
|
+
|
|
84
|
+
Create a checked, offline, single-file authoring workspace without a repository
|
|
85
|
+
checkout:
|
|
86
|
+
|
|
87
|
+
```shell
|
|
88
|
+
runglet init my-controller --name my_controller
|
|
89
|
+
cd my-controller
|
|
90
|
+
runglet authoring-context --profile core --format markdown
|
|
91
|
+
runglet format src/main.rung --check
|
|
92
|
+
runglet check src/main.rung
|
|
93
|
+
runglet suite src/main.rung --scan-period-ms 10
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Common interactive aliases are `new` for `init`, `fmt` for `format`, `ctx` for
|
|
97
|
+
`authoring-context`, and `test` for `suite`. Run `runglet help --all` for the complete
|
|
98
|
+
tool catalog or `runglet help COMMAND` for focused usage.
|
|
99
|
+
|
|
100
|
+
Specialist tools use one namespace level: `runglet hil COMMAND`,
|
|
101
|
+
`runglet winpro COMMAND`, and `runglet fatek COMMAND`. Run each namespace with
|
|
102
|
+
`--help` to list its actions. The earlier flat `hil-*`, `winpro-*`, and `fatek-*`
|
|
103
|
+
spellings remain accepted as compatibility aliases but are omitted from help.
|
|
104
|
+
|
|
105
|
+
The scaffold includes `AGENTS.md` and `CLAUDE.md` entrypoints, portable Codex and Claude
|
|
106
|
+
skills, a machine-readable installed-version capability declaration, a canonical starter
|
|
107
|
+
with passing scenarios, and a hash-bound scaffold manifest. Initialization refuses to
|
|
108
|
+
merge or overwrite existing files. It never contacts WinProLadder, a PLC, or the network.
|
|
109
|
+
|
|
110
|
+
## Development
|
|
111
|
+
|
|
112
|
+
Prerequisites:
|
|
113
|
+
|
|
114
|
+
- Python 3.12
|
|
115
|
+
- `uv`
|
|
116
|
+
|
|
117
|
+
Install the locked development environment:
|
|
118
|
+
|
|
119
|
+
```shell
|
|
120
|
+
uv sync --extra dev --locked
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Run all local checks:
|
|
124
|
+
|
|
125
|
+
```shell
|
|
126
|
+
uv run ruff format --check .
|
|
127
|
+
uv run ruff check .
|
|
128
|
+
uv run mypy
|
|
129
|
+
uv run pytest --cov
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Run the CLI:
|
|
133
|
+
|
|
134
|
+
```shell
|
|
135
|
+
uv run runglet --version
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Start a productive offline authoring loop with the minimal example:
|
|
139
|
+
|
|
140
|
+
```shell
|
|
141
|
+
uv run runglet check examples/starter/starter.rung
|
|
142
|
+
uv run runglet format examples/starter/starter.rung --check
|
|
143
|
+
uv run runglet build examples/starter/starter.rung --output build/starter
|
|
144
|
+
uv run runglet suite examples/starter/starter.rung --scan-period-ms 10
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
`check` runs the same syntax, resolution, type, ownership, and command validation as
|
|
148
|
+
the language server without invoking a backend. `format --write` applies canonical
|
|
149
|
+
source layout. `build` adds Relay IR lowering and creates canonical source, Relay IR,
|
|
150
|
+
and a deterministic hash-bound manifest in a new directory. See the
|
|
151
|
+
[diagnostics guide](https://github.com/vedit/Runglet/blob/master/docs/language/diagnostics.md)
|
|
152
|
+
for codes and exit behavior. The compact
|
|
153
|
+
[authoring card](https://github.com/vedit/Runglet/blob/master/docs/language/authoring-card.md)
|
|
154
|
+
and checked
|
|
155
|
+
[`examples/patterns`](https://github.com/vedit/Runglet/tree/master/examples/patterns)
|
|
156
|
+
are the preferred starting context for both
|
|
157
|
+
human and LLM-authored Runglet.
|
|
158
|
+
|
|
159
|
+
The checked writable-state pattern is
|
|
160
|
+
[`examples/patterns/core/writable-memory.rung`](https://github.com/vedit/Runglet/blob/master/examples/patterns/core/writable-memory.rung).
|
|
161
|
+
Bare `MEMORY` remains a self-holding declaration for v0.2 compatibility; add an
|
|
162
|
+
`UPDATE` block only under `SNAPSHOT_ATOMIC`.
|
|
163
|
+
|
|
164
|
+
Machine-facing authoring interfaces are deterministic and offline:
|
|
165
|
+
|
|
166
|
+
```shell
|
|
167
|
+
uv run runglet inspect examples/starter/starter.rung --json
|
|
168
|
+
uv run runglet authoring-context --profile core --format markdown
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
The Python environment also installs `runglet-lsp`. The internal contributor VSIX under
|
|
172
|
+
[`editors/vscode`](https://github.com/vedit/Runglet/tree/master/editors/vscode)
|
|
173
|
+
prefers that workspace `.venv`, but also carries a
|
|
174
|
+
version-locked Python runtime for ordinary non-repository folders. It never uses
|
|
175
|
+
PowerShell or installs global packages. The server supplies diagnostics, safe fixes,
|
|
176
|
+
formatting, symbols, hover, completion, and same-file navigation. Its bounded command
|
|
177
|
+
palette directly exposes saved-source `check`, backend-neutral `build`, embedded
|
|
178
|
+
scenario `suite`, and one-scenario `trace` tasks. Checked declaration snippets, server
|
|
179
|
+
status, semantic occurrence highlights, and matching-block navigation complete the
|
|
180
|
+
small single-file authoring loop. The extension does not expose target, WinPro, FATEK
|
|
181
|
+
runtime, or PLC commands.
|
|
182
|
+
|
|
183
|
+
The repository workspace explicitly associates `*.rung` with the `runglet` language.
|
|
184
|
+
After installing the VSIX, reload VS Code once. To verify the entire editor surface,
|
|
185
|
+
run **Tasks: Run Test Task** → **Runglet: Verify Editor Integration**, or use:
|
|
186
|
+
|
|
187
|
+
```shell
|
|
188
|
+
cd editors/vscode
|
|
189
|
+
npm ci
|
|
190
|
+
npm run verify
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Build and smoke the same standalone Windows preview locally with:
|
|
194
|
+
|
|
195
|
+
```powershell
|
|
196
|
+
uv sync --extra dev --locked
|
|
197
|
+
cd editors/vscode
|
|
198
|
+
npm ci
|
|
199
|
+
cd ../..
|
|
200
|
+
uv run python scripts/windows/build-authoring-preview.py
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
The result is written below `dist/windows/`. The smoke test invokes the frozen CLI and
|
|
204
|
+
stdio language server themselves, including project initialization, checking,
|
|
205
|
+
inspection, scenarios, build output, UTF-16 LSP initialization, and clean shutdown.
|
|
206
|
+
|
|
207
|
+
That check covers the language association and assets, direct server/compiler
|
|
208
|
+
discovery, the offline compiler task, diagnostics, formatting, completion, hover,
|
|
209
|
+
definition, references and highlights, matching-block navigation, status reporting,
|
|
210
|
+
missing-server recovery, and post-start server crash recovery without contacting
|
|
211
|
+
WinPro or a PLC.
|
|
212
|
+
|
|
213
|
+
Generate the reviewable paired-FUN30 initial-delivery plan (no PLC download or run).
|
|
214
|
+
ADR-0007 selects this explicit native integer contract first; the generated binary32
|
|
215
|
+
implementation remains a portable follow-on and comparison oracle:
|
|
216
|
+
|
|
217
|
+
```shell
|
|
218
|
+
uv run runglet check fixtures/control/split-range-fun30-v0.2/controller.rung
|
|
219
|
+
uv run runglet format fixtures/control/split-range-fun30-v0.2/controller.rung --check
|
|
220
|
+
uv run runglet winpro fun30-plan \
|
|
221
|
+
fixtures/control/split-range-fun30-v0.2/controller.rung \
|
|
222
|
+
--profile profiles/fatek/fbs-20mcr2-ac.json \
|
|
223
|
+
--allocation-policy profiles/fatek/fbs-20mcr2-ac-allocation.json \
|
|
224
|
+
--config fixtures/control/split-range-fun30-v0.2/fun30-plan.json \
|
|
225
|
+
--output build/fun30-plan
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
After filling a copy of `vendor-trace-template.json` from a WinPro simulator capture,
|
|
229
|
+
verify its plan identity, field contract, scan ordering, and first arithmetic divergence:
|
|
230
|
+
|
|
231
|
+
```shell
|
|
232
|
+
uv run runglet winpro fun30-verify-trace \
|
|
233
|
+
fixtures/control/split-range-fun30-v0.2/controller.rung \
|
|
234
|
+
build/fun30-vendor-capture.json \
|
|
235
|
+
--profile profiles/fatek/fbs-20mcr2-ac.json \
|
|
236
|
+
--allocation-policy profiles/fatek/fbs-20mcr2-ac-allocation.json \
|
|
237
|
+
--config fixtures/control/split-range-fun30-v0.2/fun30-plan.json
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
The native fixture is a complete, canonical single-file program. `check` applies
|
|
241
|
+
resolution, integer type, ownership, and command-completeness validation; the plan
|
|
242
|
+
command repeats those checks before invoking the explicit target-native lowering path.
|
|
243
|
+
Generic `build` remains the backend-neutral Relay IR path and does not lower native
|
|
244
|
+
FUN30 declarations.
|
|
245
|
+
|
|
246
|
+
The emitted `parameters.json` records the mandatory native language contract, requested
|
|
247
|
+
and realized tuning for both directions, exact quantization errors, documented native
|
|
248
|
+
parameter ranges, and the ordered FUN30 PR table layout. `wrapper-relay-ir.json` is the
|
|
249
|
+
integer-only, executable Relay IR for compiler-owned direction, dwell, override, and
|
|
250
|
+
routing behavior; the vendor FUN30 outputs and error flags remain explicit boundaries.
|
|
251
|
+
`wrapper-differential.json` records stable-ID alignment across the independent oracle,
|
|
252
|
+
source Relay IR, and FATEK Network IR without claiming vendor timer execution.
|
|
253
|
+
`direction-project.ldr` is the evidence-bounded 64-record PID direction, parameter-table,
|
|
254
|
+
and paired-core artifact; its provenance explicitly excludes the remaining control and
|
|
255
|
+
routing wrapper. `vendor-trace-template.json` binds both native cores and their parameter
|
|
256
|
+
tables to ten required simulator cases per direction, with raw observations for all seven
|
|
257
|
+
private working registers; it remains `not_captured` until checked WinPro evidence is
|
|
258
|
+
supplied. `wrapper-emission-coverage.json` accounts for all 32 planned ladder network
|
|
259
|
+
IDs: the accepted artifact covers 17 of 29 source networks plus signed-error
|
|
260
|
+
materialization, while 12 source networks and two derived core-enable snapshots remain
|
|
261
|
+
as 26 staged control/routing steps. `evidence-manifest.json` binds all four source inputs
|
|
262
|
+
and twelve generated
|
|
263
|
+
artifacts by SHA-256. It records the four completed offline gates and leaves WinPro
|
|
264
|
+
lifecycle, vendor arithmetic/timer, simulator, review, and bench gates explicitly `not_verified`;
|
|
265
|
+
therefore the emitted candidate is not promotion-ready.
|
|
266
|
+
Exact native tuning and target configuration are currently supplied by the checked
|
|
267
|
+
`fun30-plan.json` contract, with tuning realization recorded in `parameters.json`;
|
|
268
|
+
unifying those values with general source parameter sets remains later language work.
|
|
269
|
+
|
|
270
|
+
Run the complete bench-only demonstration suite with human-readable semantic coverage:
|
|
271
|
+
|
|
272
|
+
```shell
|
|
273
|
+
uv run runglet suite fixtures/demo-chamber-v0.1/demo.rung --scan-period-ms 10
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
Use `--json` for a canonical machine-readable scenario and coverage report. Run the
|
|
277
|
+
checked mutation campaign with:
|
|
278
|
+
|
|
279
|
+
```shell
|
|
280
|
+
uv run runglet mutate fixtures/demo-chamber-v0.1/demo.rung \
|
|
281
|
+
--manifest fixtures/demo-chamber-v0.1/mutations.json \
|
|
282
|
+
--scan-period-ms 10
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
The demonstration is an exact-scan reference-runtime proof over normalized Boolean
|
|
286
|
+
test points and dummy commands. It is not a production chamber program, safety
|
|
287
|
+
function, physical deployment authorization, or compliance argument.
|
|
288
|
+
|
|
289
|
+
For the isolated-bench workflow, validate the design and generate the unexecuted manual
|
|
290
|
+
checkout first:
|
|
291
|
+
|
|
292
|
+
```shell
|
|
293
|
+
uv run runglet hil bench-check hil/bench-panel-v0.1.json
|
|
294
|
+
uv run runglet hil checkout-plan hil/bench-panel-v0.1.json \
|
|
295
|
+
--output build/hil/manual-io-checkout.json
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
After qualified assembly/review and local authorization, `runglet hil observe` can append
|
|
299
|
+
read-only status and X0-X6/Y0-Y3 samples under manual stimulus control. It exposes no
|
|
300
|
+
physical write option and does not authorize energization. See
|
|
301
|
+
[`docs/hil/read-only-recorder-v0.1.md`](https://github.com/vedit/Runglet/blob/master/docs/hil/read-only-recorder-v0.1.md).
|
|
302
|
+
|
|
303
|
+
Project architecture and milestones are documented in `IMPLEMENTATION_PLAN.md`,
|
|
304
|
+
`DESIGN_DECISIONS.md`, and `TASK_BREAKDOWN.md`. The current usable workflow and
|
|
305
|
+
ordered delivery gaps are summarized in
|
|
306
|
+
[`docs/language/readiness.md`](https://github.com/vedit/Runglet/blob/master/docs/language/readiness.md).
|
|
307
|
+
For a clean Codex and WinProLadder move to another Windows machine, follow the
|
|
308
|
+
[`bare-metal Windows handoff`](https://github.com/vedit/Runglet/blob/master/docs/bare-metal-windows-handoff.md).
|