按text22收束promotion证据
结论:完成 evidence-ready / inventory-ready 双层 promotion candidate 管理,release/SDK gate 已纳入 virtual HAL promotion summary,baseline 保持 28/28/131/0,Python remap、tool DB、external user-M hard block 继续 locked。
This commit is contained in:
@@ -281,6 +281,336 @@ HAL from accidentally unlocking Python UI or Python remap families.
|
||||
The next practical slice is to add a machine-readable candidate audit for other
|
||||
UI-family macro/load rows before promoting any new positive fixture.
|
||||
|
||||
## 2026-06-18 UI-Family Macro/Load Candidate Audit
|
||||
|
||||
The macro/load report now carries audit rows for UI-family fixture candidates
|
||||
that are not ready for positive promotion:
|
||||
|
||||
- `gscreen/industrial_lathe_wear/toolchange.ngc`
|
||||
- `qtvcp_screens/industrial_lathe_wear/toolchange.ngc`
|
||||
|
||||
Both rows are recorded as `blocked-missing-owning-ini` audit candidates with
|
||||
`promotionAllowed === false`. They must remain excluded from positive
|
||||
macro/load fixtures until the owning INI, machine files, tool table, and
|
||||
UI/process declaration have LinuxCNC source evidence that does not require
|
||||
Python UI process emulation.
|
||||
|
||||
Release diagnostics validation now requires `auditPromotionViolations` to stay
|
||||
empty and requires both audit rows to be present as negative evidence. This is
|
||||
an audit gate, not a coverage promotion: inventory baseline remains unchanged.
|
||||
|
||||
## 2026-06-18 UI-Family Audit Boundary Evidence
|
||||
|
||||
The UI-family audit rows now carry machine-readable source evidence from the
|
||||
generated inventory boundary artifacts:
|
||||
|
||||
- `wasm-port/build/wasm/sim-configs-inventory/boundary-summary.tsv`
|
||||
- `wasm-port/build/wasm/sim-configs-inventory/ini-boundary-summary.tsv`
|
||||
|
||||
For both industrial-lathe `toolchange.ngc` rows, the audit evidence requires
|
||||
`recommendedBlocked === "UNAVAILABLE"` and a `missing_vendored_ini:*`
|
||||
dependency for the owning INI. The INI-level row must also report
|
||||
`vendored === 0` and `reportAvailable === 0`.
|
||||
|
||||
The macro/load fixture report now exposes:
|
||||
|
||||
- `missingAuditRows`
|
||||
- `auditBoundaryEvidenceViolations`
|
||||
- `auditPromotionAllowedViolations`
|
||||
|
||||
Release diagnostics validation requires all of those lists to stay empty. This
|
||||
adds negative coverage for three failure modes: audit rows missing, audit rows
|
||||
accidentally promoted into positive fixtures, and `promotionAllowed === true`
|
||||
without generated boundary/source proof.
|
||||
|
||||
## 2026-06-18 SilverDragon Blocked Boundary Evidence
|
||||
|
||||
The blocked macro/load fixture rows now use the same generated boundary
|
||||
evidence contract. `gscreen/silverdragon/macros/tool_sensor.ngc` carries
|
||||
evidence from `boundary-summary.tsv` and `ini-boundary-summary.tsv` showing
|
||||
that the owning `gscreen/silverdragon/silverdragon.ini` is unavailable in the
|
||||
vendored inventory.
|
||||
|
||||
The report now exposes `blockedBoundaryEvidenceViolations`, and release
|
||||
diagnostics validation requires it to stay empty. This keeps the SilverDragon
|
||||
row as a blocked negative fixture with source-derived evidence, not a virtual
|
||||
HAL promotion path.
|
||||
|
||||
## 2026-06-18 Queuebuster Declaration Evidence
|
||||
|
||||
The declared-only `axis/external_offsets/queuebuster.ngc` fixture now carries
|
||||
declaration-level evidence from `eoffsets.ini`. The fixture report requires the
|
||||
owning INI to expose:
|
||||
|
||||
- section: `DISPLAY`
|
||||
- key: `NGCGUI_SUBFILE`
|
||||
- value: `queuebuster.ngc`
|
||||
- source line: `NGCGUI_SUBFILE = queuebuster.ngc`
|
||||
|
||||
This keeps `queuebuster.ngc` as a non-main fixture path declared by LinuxCNC
|
||||
configuration, not a standalone browser main program. Release diagnostics
|
||||
validation now requires `declarationEvidenceViolations` to stay empty.
|
||||
|
||||
## 2026-06-18 Rose Engine Declaration Evidence
|
||||
|
||||
The positive `axis/rose_engine/rcone.ngc` non-main fixture now carries the same
|
||||
declaration-level evidence contract as queuebuster. `rose_engine.ini` declares
|
||||
the fixture with `NGCGUI_SUBFILE = rcone.ngc`, and the macro/load report now
|
||||
requires every positive fixture with a `declarationSource` to carry matching
|
||||
source evidence.
|
||||
|
||||
This keeps `rcone.ngc` as a LinuxCNC-declared macro/load support asset paired
|
||||
with `rcone_demo.ngc`, not a standalone browser main program. The evidence is
|
||||
limited to the owning INI declaration and does not add browser-owned G-code,
|
||||
interpreter, planner, or remap behavior.
|
||||
|
||||
## 2026-06-18 Boundary Evidence Freshness Gate
|
||||
|
||||
Generated boundary evidence for blocked and audit-only macro/load rows now
|
||||
carries an inventory `baselineSummary`. The macro/load report requires that
|
||||
summary to match the current generated inventory baseline:
|
||||
|
||||
```text
|
||||
executed=28
|
||||
passed=28
|
||||
skipped=131
|
||||
unexpectedFail=0
|
||||
```
|
||||
|
||||
This makes `boundary-summary.tsv` and `ini-boundary-summary.tsv` evidence
|
||||
explicitly tied to the current inventory baseline. A stale baseline now fails
|
||||
the blocked/audit boundary evidence gate instead of silently passing release
|
||||
diagnostics.
|
||||
|
||||
## 2026-06-18 Promotion Family URL Workflow Summary
|
||||
|
||||
The release readiness validation and URL workflow summaries now surface the
|
||||
promotion candidate `familyRows` as a user-visible summary. Ready artifacts
|
||||
show:
|
||||
|
||||
```text
|
||||
qtdragon-on-abort: 6/6 ready; vismach-remap-sims: 1/1 ready; rose-engine-rcone-demo: 1/1 ready
|
||||
```
|
||||
|
||||
The ini-panel workflow overview URL summary reuses this value, so the
|
||||
QtDragon, PUMA, and rose-engine promotion families are visible without opening
|
||||
the raw diagnostics JSON. This is a presentation/reporting change only; it
|
||||
does not change inventory counts or CNC semantics.
|
||||
|
||||
## 2026-06-18 Structured Promotion Family Rows
|
||||
|
||||
The promotion family summary is now also exposed as structured rows. Each row
|
||||
records the family id, candidate count, complete count, source file count, and
|
||||
explicit browser diagnostics readiness. Current rows are:
|
||||
|
||||
```text
|
||||
qtdragon-on-abort: 6/6 ready; sources=12; diagnostics=ready
|
||||
vismach-remap-sims: 1/1 ready; sources=3; diagnostics=ready
|
||||
rose-engine-rcone-demo: 1/1 ready; sources=2; diagnostics=ready
|
||||
```
|
||||
|
||||
The release readiness artifact, validation summary, URL workflow summary, and
|
||||
ini-panel workflow overview all expose these rows. This keeps the summary
|
||||
machine-readable while preserving the existing single-line text summary.
|
||||
|
||||
## 2026-06-18 Boundary Evidence Artifact Hash Gate
|
||||
|
||||
Generated boundary evidence now includes SHA-256 hashes for the two source TSV
|
||||
artifacts used by blocked and audit macro/load evidence:
|
||||
|
||||
```text
|
||||
boundary-summary.tsv de6cf57b7c07182e3bcb32e22dbdf202b618cabc14620d6dff1ef815587950b9
|
||||
ini-boundary-summary.tsv b0afe27224e97a82fbecbbd75a7c86233c98fe957d9c1ba20f0656f8745a5eae
|
||||
```
|
||||
|
||||
The macro/load report and release validation require those hashes to match.
|
||||
This extends the freshness gate beyond inventory counts and makes stale or
|
||||
substituted boundary TSV evidence fail the release diagnostics gate.
|
||||
|
||||
## 2026-06-18 Browser Promotion Family DOM Rows
|
||||
|
||||
The real browser simulation page now renders the structured promotion family
|
||||
rows in the diagnostics panel. The visible browser DOM exposes:
|
||||
|
||||
```text
|
||||
qtdragon-on-abort: 6/6 ready; sources=12
|
||||
vismach-remap-sims: 1/1 ready; sources=3
|
||||
rose-engine-rcone-demo: 1/1 ready; sources=2
|
||||
```
|
||||
|
||||
The browser API also exposes `getVirtualHalPromotionFamilyRows()`, and the real
|
||||
simulation browser smoke asserts that the DOM rows, readiness dataset, and
|
||||
candidate report agree. This moves the existing source-derived promotion
|
||||
evidence from view-model/report data into a visible browser diagnostics surface.
|
||||
It does not change inventory counts or add CNC semantics.
|
||||
|
||||
## 2026-06-18 Fast Follow: Hash Tool And INI Panel Promotion DOM
|
||||
|
||||
The boundary TSV hash freshness gate now has an update/check helper:
|
||||
|
||||
```bash
|
||||
wasm-port/tools/update_sim_config_boundary_hashes.sh --check
|
||||
wasm-port/tools/update_sim_config_boundary_hashes.sh --write
|
||||
```
|
||||
|
||||
The script computes SHA-256 for `boundary-summary.tsv` and
|
||||
`ini-boundary-summary.tsv`, then checks or updates the SDK/release validation
|
||||
constants. This removes the manual hash-update step after generated inventory
|
||||
artifacts change.
|
||||
|
||||
The ini-panel workflow overview now also has a dedicated promotion family DOM
|
||||
surface. It can render and mount the three structured promotion rows from the
|
||||
release URL workflow summary into `[data-workflow-overview-promotion-family-rows]`.
|
||||
The UI shell smoke verifies the rows mount as ready with the expected QtDragon,
|
||||
PUMA, and rose-engine values.
|
||||
|
||||
## 2026-06-18 Promotion Family Source Drilldown
|
||||
|
||||
Promotion family rows now carry their LinuxCNC source file lists through the
|
||||
release readiness report, validation summary, URL workflow summary, and
|
||||
ini-panel workflow overview render state. The ini-panel promotion family DOM
|
||||
mount renders the three family rows plus per-family source-file drilldown rows.
|
||||
|
||||
Current drilldown count is 17 source files:
|
||||
|
||||
```text
|
||||
qtdragon-on-abort: 12 source files
|
||||
vismach-remap-sims: 3 source files
|
||||
rose-engine-rcone-demo: 2 source files
|
||||
```
|
||||
|
||||
This makes the browser/ini-panel evidence inspectable without opening the raw
|
||||
JSON artifact, while keeping the underlying behavior LinuxCNC-source-derived.
|
||||
|
||||
## 2026-06-18 Promotion Family Source Status
|
||||
|
||||
Each ini-panel promotion family source drilldown row now carries source status
|
||||
metadata:
|
||||
|
||||
- `ini` for LinuxCNC INI machine files;
|
||||
- `gcode` for `.ngc` main/on-abort programs;
|
||||
- `remap-subroutine` for files under `remap_subs` or `nc_subroutines`;
|
||||
- `manifest-backed` for rows already carried by the source-derived promotion
|
||||
evidence.
|
||||
|
||||
The DOM render adds dataset fields for source kind, manifest-backed state, and
|
||||
source status, so the UI can distinguish machine config, G-code, and remap
|
||||
support evidence without changing any CNC semantics.
|
||||
|
||||
## 2026-06-18 Promotion Family Source Kind Counts
|
||||
|
||||
The ini-panel promotion family render state now aggregates source-kind counts
|
||||
per family and exposes them in the family row DOM dataset. Current counts are:
|
||||
|
||||
```text
|
||||
qtdragon-on-abort: ini=6 gcode=6
|
||||
vismach-remap-sims: ini=1 gcode=1 remap-subroutine=1
|
||||
rose-engine-rcone-demo: ini=1 gcode=1
|
||||
```
|
||||
|
||||
The family row display includes this summary, while the per-source drilldown
|
||||
rows still expose individual source kind and manifest-backed status.
|
||||
|
||||
## 2026-06-18 Promotion Family Source Filter View Model
|
||||
|
||||
The ini-panel workflow overview now exposes a promotion family source filter
|
||||
view-model. It can filter the existing source drilldown by `all`, `ini`,
|
||||
`gcode`, `remap-subroutine`, or `source`, while preserving family grouping and
|
||||
source-kind counts.
|
||||
|
||||
Current filter totals are:
|
||||
|
||||
```text
|
||||
all=17
|
||||
ini=8
|
||||
gcode=8
|
||||
remap-subroutine=1
|
||||
```
|
||||
|
||||
The `remap-subroutine` filter currently resolves to the PUMA remap evidence
|
||||
row:
|
||||
|
||||
```text
|
||||
linuxcnc/configs/sim/axis/vismach/puma/remap_subs/428remap.ngc
|
||||
```
|
||||
|
||||
This is a browser/UI evidence navigation helper only. It does not change the
|
||||
promotion candidate set, inventory baseline, or CNC runtime semantics.
|
||||
|
||||
## 2026-06-18 Promotion Family Source Family Filter
|
||||
|
||||
The source filter view-model now supports a second selector: `familyId`. This
|
||||
allows UI callers to scope source evidence by promotion family and then filter
|
||||
within that family by source kind.
|
||||
|
||||
Current family filter totals are:
|
||||
|
||||
```text
|
||||
all=17
|
||||
qtdragon-on-abort=12
|
||||
vismach-remap-sims=3
|
||||
rose-engine-rcone-demo=2
|
||||
```
|
||||
|
||||
For example, selecting `virtual-hal-promotion-family-qtdragon-on-abort` with
|
||||
`gcode` returns 6 QtDragon `.ngc` source rows from the 12-file family scope.
|
||||
The selector is a view-model feature only; it does not promote additional sim
|
||||
config rows or relax any blocked runtime family.
|
||||
|
||||
## 2026-06-18 Promotion Family Source Filter DOM Surface
|
||||
|
||||
The source filter view-model now has a dedicated DOM contract, readiness check,
|
||||
render helper, and mount helper. The DOM surface renders:
|
||||
|
||||
- family filter rows;
|
||||
- source-kind filter rows;
|
||||
- filtered source evidence rows;
|
||||
- selected family/source-kind dataset fields on the mount node.
|
||||
|
||||
The QtDragon + `gcode` combination currently renders 13 DOM rows: 7 filter
|
||||
rows and 6 filtered source rows. This moves the combined evidence filter from a
|
||||
view-model-only helper into a mountable ini-panel workflow overview surface.
|
||||
It still only displays existing LinuxCNC-source-derived evidence.
|
||||
|
||||
## 2026-06-18 Promotion Family Source Filter Selector Controls
|
||||
|
||||
The source filter DOM surface now renders two selector controls in addition to
|
||||
the diagnostic rows:
|
||||
|
||||
- a family selector backed by `familyFilters`;
|
||||
- a source-kind selector backed by `sourceKindFilters`.
|
||||
|
||||
For the QtDragon + `gcode` example, the controls expose the selected family
|
||||
`virtual-hal-promotion-family-qtdragon-on-abort` and selected source kind
|
||||
`gcode`, with the `gcode` option carrying count `6`. The selectors currently
|
||||
render selection state and option metadata for browser integration; they do not
|
||||
change the underlying promotion evidence or add CNC semantics.
|
||||
|
||||
## 2026-06-18 Promotion Family Source Filter Selection Workflow
|
||||
|
||||
The selector controls now have an action-plan and selection-change workflow.
|
||||
The workflow reads the current family/source-kind selector values, derives the
|
||||
next source filter view-model, and can optionally re-render the source filter
|
||||
DOM surface.
|
||||
|
||||
The current smoke path changes from QtDragon + `gcode` to
|
||||
`virtual-hal-promotion-family-rose-engine-rcone-demo` + `all`. That produces a
|
||||
new view-model with 2 filtered source files from a 2-file family scope and
|
||||
re-renders the DOM rows to include rose-engine source evidence. This is still a
|
||||
host/UI workflow over existing source-derived evidence only.
|
||||
|
||||
## 2026-06-18 Promotion Family Source Filter Event Binding
|
||||
|
||||
The selector controls now have a reusable event binding helper. It binds the
|
||||
family and source-kind `<select>` elements to the selection-change workflow,
|
||||
tracks the last change result, and can unbind both controls.
|
||||
|
||||
The current Node smoke binds two selector controls, changes the family selector
|
||||
to `virtual-hal-promotion-family-rose-engine-rcone-demo`, dispatches a `change`
|
||||
event, and verifies that the source filter DOM re-renders with 2 rose-engine
|
||||
source rows. This keeps the browser integration path explicit without changing
|
||||
promotion status or CNC semantics.
|
||||
|
||||
## Boundary Statement
|
||||
|
||||
This analysis relies on the improved virtual HAL only for Web simulation
|
||||
|
||||
Reference in New Issue
Block a user