按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

File diff suppressed because it is too large Load Diff

View File

@@ -101,6 +101,24 @@
font: 13px/1.4 "Segoe UI", "Noto Sans", sans-serif;
cursor: pointer;
}
.source-filter-controls {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 8px;
}
.source-filter-controls label {
color: var(--muted);
font: 12px/1.4 "Segoe UI", "Noto Sans", sans-serif;
}
.source-filter-controls select {
width: 100%;
min-height: 32px;
border: 1px solid var(--border);
border-radius: 4px;
padding: 6px 8px;
color: var(--text);
font: 13px/1.4 "Segoe UI", "Noto Sans", sans-serif;
}
</style>
</head>
<body>
@@ -135,6 +153,15 @@
<p data-workflow-overview-release-readiness-artifact-gate-execution-summary-status>Waiting for URL workflow gate evidence.</p>
<dl data-workflow-overview-release-readiness-artifact-gate-execution-summary-rows></dl>
</section>
<section class="overview-status" aria-label="Promotion candidate drilldown" data-workflow-overview-promotion-candidate-drilldown>
<p data-workflow-overview-promotion-candidate-drilldown-status>Waiting for promotion candidate evidence.</p>
<dl data-workflow-overview-promotion-candidate-drilldown-rows></dl>
</section>
<section class="overview-status" aria-label="Promotion family source filter" data-workflow-overview-promotion-family-source-filter>
<p data-workflow-overview-promotion-family-source-filter-status>Waiting for promotion family source evidence.</p>
<div class="source-filter-controls" data-workflow-overview-promotion-family-source-filter-controls></div>
<dl data-workflow-overview-promotion-family-source-filter-rows></dl>
</section>
</section>
</main>
<script type="module">
@@ -178,6 +205,21 @@
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness,
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState,
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState,
createIniPanelShellWorkflowOverviewPromotionFamilyRowsRenderState,
createIniPanelShellWorkflowOverviewPromotionFamilySourceFilterViewModel,
createIniPanelShellWorkflowOverviewPromotionFamilySourceFilterDomContract,
createIniPanelShellWorkflowOverviewPromotionFamilySourceFilterDomReadiness,
createIniPanelShellWorkflowOverviewPromotionFamilySourceFilterSelectionActionPlan,
handleIniPanelShellWorkflowOverviewPromotionFamilySourceFilterSelectionChange,
bindIniPanelShellWorkflowOverviewPromotionFamilySourceFilterSelectionControls,
renderIniPanelShellWorkflowOverviewPromotionFamilySourceFilterState,
mountIniPanelShellWorkflowOverviewPromotionFamilySourceFilterState,
createIniPanelShellWorkflowOverviewPromotionCandidateDrilldownViewModel,
createIniPanelShellWorkflowOverviewPromotionCandidateDrilldownRenderState,
createIniPanelShellWorkflowOverviewPromotionCandidateDrilldownDomContract,
createIniPanelShellWorkflowOverviewPromotionCandidateDrilldownDomReadiness,
renderIniPanelShellWorkflowOverviewPromotionCandidateDrilldownState,
mountIniPanelShellWorkflowOverviewPromotionCandidateDrilldownState,
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlanRenderState,
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlanDomContract,
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlanDomReadiness,
@@ -248,8 +290,53 @@
renderState: gateExecutionSummaryRenderState,
documentRef: document,
});
const promotionCandidateDrilldown =
createIniPanelShellWorkflowOverviewPromotionCandidateDrilldownViewModel(summary, {
diagnosticsArtifact: workflow.diagnosticsArtifact,
});
const promotionCandidateDrilldownRenderState =
createIniPanelShellWorkflowOverviewPromotionCandidateDrilldownRenderState(
promotionCandidateDrilldown,
);
const promotionCandidateDrilldownMountResult =
mountIniPanelShellWorkflowOverviewPromotionCandidateDrilldownState({
renderState: promotionCandidateDrilldownRenderState,
documentRef: document,
});
const promotionFamilyRowsRenderState =
createIniPanelShellWorkflowOverviewPromotionFamilyRowsRenderState(summary);
const promotionFamilySourceFilter =
createIniPanelShellWorkflowOverviewPromotionFamilySourceFilterViewModel(
promotionFamilyRowsRenderState,
);
const promotionFamilySourceFilterMountResult =
mountIniPanelShellWorkflowOverviewPromotionFamilySourceFilterState({
viewModel: promotionFamilySourceFilter,
documentRef: document,
});
const promotionFamilySourceFilterBinding =
bindIniPanelShellWorkflowOverviewPromotionFamilySourceFilterSelectionControls({
renderState: promotionFamilyRowsRenderState,
viewModel: promotionFamilySourceFilter,
documentRef: document,
render: true,
onChange: (changeResult) => {
document.body.dataset.promotionFamilySourceFilterFamily =
changeResult.selectedFamilyId;
document.body.dataset.promotionFamilySourceFilterSourceKind =
changeResult.selectedSourceKind;
document.body.dataset.promotionFamilySourceFilterCount =
String(changeResult.actionPlan.filteredSourceFileCount);
},
});
document.body.dataset.releaseArtifactUrlWorkflowPhase = workflow.phase;
document.body.dataset.releaseArtifactUrlWorkflowReady = workflow.ready ? "true" : "false";
document.body.dataset.promotionCandidateDrilldownReady =
promotionCandidateDrilldown.ready ? "true" : "false";
document.body.dataset.promotionFamilySourceFilterReady =
promotionFamilySourceFilter.ready ? "true" : "false";
document.body.dataset.promotionFamilySourceFilterCount =
String(promotionFamilySourceFilter.filteredSourceFileCount);
return {
workflow,
summary,
@@ -261,6 +348,13 @@
gateExecutionSummary,
gateExecutionSummaryRenderState,
gateExecutionSummaryMountResult,
promotionCandidateDrilldown,
promotionCandidateDrilldownRenderState,
promotionCandidateDrilldownMountResult,
promotionFamilyRowsRenderState,
promotionFamilySourceFilter,
promotionFamilySourceFilterMountResult,
promotionFamilySourceFilterBinding,
};
}
@@ -362,6 +456,69 @@
options ?? { documentRef: document },
)
),
getWorkflowOverviewPromotionFamilyRowsRenderState: (summaryViewModel) => (
createIniPanelShellWorkflowOverviewPromotionFamilyRowsRenderState(summaryViewModel)
),
getWorkflowOverviewPromotionFamilySourceFilterViewModel: (renderState, options) => (
createIniPanelShellWorkflowOverviewPromotionFamilySourceFilterViewModel(renderState, options)
),
getWorkflowOverviewPromotionFamilySourceFilterDomContract: (options) => (
createIniPanelShellWorkflowOverviewPromotionFamilySourceFilterDomContract(options)
),
getWorkflowOverviewPromotionFamilySourceFilterDomReadiness: (options) => (
createIniPanelShellWorkflowOverviewPromotionFamilySourceFilterDomReadiness(
options ?? { documentRef: document },
)
),
getWorkflowOverviewPromotionFamilySourceFilterSelectionActionPlan: (renderState, options) => (
createIniPanelShellWorkflowOverviewPromotionFamilySourceFilterSelectionActionPlan(renderState, options)
),
handleWorkflowOverviewPromotionFamilySourceFilterSelectionChange: (options) => (
handleIniPanelShellWorkflowOverviewPromotionFamilySourceFilterSelectionChange(
options ?? { documentRef: document },
)
),
bindWorkflowOverviewPromotionFamilySourceFilterSelectionControls: (options) => (
bindIniPanelShellWorkflowOverviewPromotionFamilySourceFilterSelectionControls(
options ?? { documentRef: document },
)
),
renderWorkflowOverviewPromotionFamilySourceFilterState: (viewModel, options) => (
renderIniPanelShellWorkflowOverviewPromotionFamilySourceFilterState(
viewModel,
options ?? { documentRef: document },
)
),
mountWorkflowOverviewPromotionFamilySourceFilterState: (options) => (
mountIniPanelShellWorkflowOverviewPromotionFamilySourceFilterState(
options ?? { documentRef: document },
)
),
getWorkflowOverviewPromotionCandidateDrilldownViewModel: (summaryViewModel, options) => (
createIniPanelShellWorkflowOverviewPromotionCandidateDrilldownViewModel(summaryViewModel, options)
),
getWorkflowOverviewPromotionCandidateDrilldownRenderState: (viewModel) => (
createIniPanelShellWorkflowOverviewPromotionCandidateDrilldownRenderState(viewModel)
),
getWorkflowOverviewPromotionCandidateDrilldownDomContract: (options) => (
createIniPanelShellWorkflowOverviewPromotionCandidateDrilldownDomContract(options)
),
getWorkflowOverviewPromotionCandidateDrilldownDomReadiness: (options) => (
createIniPanelShellWorkflowOverviewPromotionCandidateDrilldownDomReadiness(
options ?? { documentRef: document },
)
),
renderWorkflowOverviewPromotionCandidateDrilldownState: (renderState, options) => (
renderIniPanelShellWorkflowOverviewPromotionCandidateDrilldownState(
renderState,
options ?? { documentRef: document },
)
),
mountWorkflowOverviewPromotionCandidateDrilldownState: (options) => (
mountIniPanelShellWorkflowOverviewPromotionCandidateDrilldownState(
options ?? { documentRef: document },
)
),
getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlanRenderState: (actionPlan) => (
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlanRenderState(actionPlan)
),