按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:
2026-06-18 17:20:29 +08:00
parent 014081f1f9
commit 1c94ea4527
29 changed files with 8500 additions and 121 deletions

View File

@@ -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