docs(ci): define release manifest contract

Add the run_id and manifest contract doc, reserve the reports/releases tree, record the decision in the execution log, and annotate the four release scripts with their planned manifest-based inputs.
This commit is contained in:
Your Name
2026-04-21 09:23:54 +08:00
parent d98b1fb262
commit 3aeddc0b43
8 changed files with 191 additions and 8 deletions

View File

@@ -4,11 +4,17 @@ set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
TS="$(date +%F_%H%M%S)"
OUT_DIR="${ROOT_DIR}/reports/archive/gate_verification"
RELEASES_DIR="${ROOT_DIR}/reports/releases"
mkdir -p "${OUT_DIR}"
REPORT_FILE="${OUT_DIR}/final_decision_consistency_${TS}.md"
LOG_FILE="${OUT_DIR}/final_decision_consistency_${TS}.log"
# Manifest migration design:
# - preferred entry: --manifest <reports/releases/<run_id>/manifest.json>
# - this script should bind final_decision, tok007_recheck and stage validation inputs
# to one run_id and stop reading historical "latest" outputs
latest_file_or_empty() {
local pattern="$1"
local latest
@@ -74,6 +80,10 @@ parse_machine_decision() {
}
FINAL_DECISION_FILE="${ROOT_DIR}/review/final_decision_2026-03-31.md"
# Planned manifest keys:
# - decision_inputs.final_decision_report
# - decision_inputs.tok007_recheck_report
# - decision_inputs.superpowers_stage_validation_report
TOK007_FILE="$(latest_file_or_empty "${ROOT_DIR}/review/outputs/tok007_release_recheck_*.md")"
SP_FILE="$(latest_file_or_empty "${OUT_DIR}/superpowers_stage_validation_*.md")"

View File

@@ -3,12 +3,18 @@ set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
OUT_DIR="${ROOT_DIR}/reports/archive/gate_verification"
RELEASES_DIR="${ROOT_DIR}/reports/releases"
TS="$(date +%F_%H%M%S)"
OUT_FILE="${OUT_DIR}/staging_token_go_evidence_autofill_${TS}.md"
LOG_FILE="${OUT_DIR}/staging_token_go_evidence_autofill_${TS}.log"
mkdir -p "${OUT_DIR}"
# Manifest migration design:
# - preferred entry: --manifest <reports/releases/<run_id>/manifest.json>
# - this script should read only decision_inputs/artifact_paths from the supplied manifest
# - no future release evidence should be discovered by latest_file_or_empty()
usage() {
cat <<'EOF'
Usage:
@@ -211,6 +217,12 @@ while [[ $# -gt 0 ]]; do
esac
done
# Planned manifest keys:
# - decision_inputs.staging_run_log
# - decision_inputs.stage_report
# - decision_inputs.token_runtime_readiness_report
# - decision_inputs.tok007_recheck_report
# - artifact_paths.superpowers_release_pipeline_report
if [[ -z "${STAGING_RUN_LOG}" ]]; then
STAGING_RUN_LOG="$(latest_file_or_empty "${OUT_DIR}/staging_run_*.log")"
fi

View File

@@ -10,12 +10,20 @@ else
fi
TS="$(date +%F_%H%M%S)"
OUT_DIR="${ROOT_DIR}/reports/archive/gate_verification"
RELEASES_DIR="${ROOT_DIR}/reports/releases"
mkdir -p "${OUT_DIR}"
REPORT_FILE="${OUT_DIR}/staging_release_pipeline_${TS}.md"
LOG_FILE="${OUT_DIR}/staging_release_pipeline_${TS}.log"
ALLOW_LOCAL_MOCK_STAGING="${ALLOW_LOCAL_MOCK_STAGING:-0}"
# Manifest migration design:
# - run_id format: YYYYMMDD_HHMMSS_<shortsha>_<env>[-rNN]
# - release root: ${RELEASES_DIR}/<run_id>/
# - manifest path: ${RELEASES_DIR}/<run_id>/manifest.json
# - this script becomes the manifest seed writer and must pass the resolved manifest path
# to downstream scripts instead of relying on latest_file_or_empty().
log() {
echo "$1" | tee -a "${LOG_FILE}"
}
@@ -124,6 +132,12 @@ run_step \
"Superpowers release pipeline with staging env" \
"cd \"${ROOT_DIR}\" && STAGING_ENV_FILE=\"${ENV_FILE_REL}\" bash \"scripts/ci/superpowers_release_pipeline.sh\""
# Planned manifest inputs for staging_evidence_autofill.sh:
# - decision_inputs.staging_run_log
# - decision_inputs.stage_report
# - decision_inputs.token_runtime_readiness_report
# - decision_inputs.tok007_recheck_report
# - artifact_paths.superpowers_release_pipeline_report
LATEST_STAGING_RUN_LOG="$(latest_file_or_empty "${OUT_DIR}/staging_run_*.log")"
LATEST_STAGE_REPORT="$(latest_file_or_empty "${OUT_DIR}/superpowers_stage_validation_*.md")"
LATEST_TOKEN_READINESS="$(latest_file_or_empty "${OUT_DIR}/token_runtime_readiness_*.md")"

View File

@@ -6,12 +6,18 @@ TS="$(date +%F_%H%M%S)"
OUT_DIR="${ROOT_DIR}/review/outputs"
mkdir -p "${OUT_DIR}"
GATE_OUT_DIR="${ROOT_DIR}/reports/archive/gate_verification"
RELEASES_DIR="${ROOT_DIR}/reports/releases"
mkdir -p "${GATE_OUT_DIR}"
MARK_SCRIPT="${ROOT_DIR}/scripts/ci/mark_historical_snapshots.sh"
CURRENT_POINTER_FILE="review/outputs/current_machine_review_sources.md"
OUT_FILE="${OUT_DIR}/tok007_release_recheck_${TS}.md"
LOG_FILE="${GATE_OUT_DIR}/tok007_release_recheck_${TS}.log"
# Manifest migration design:
# - preferred entry: --manifest <reports/releases/<run_id>/manifest.json>
# - this script should read run-scoped TOK006 / stage validation / token readiness inputs
# from manifest.decision_inputs instead of scanning latest files across history
log() {
echo "$1" | tee -a "${LOG_FILE}"
}
@@ -100,6 +106,12 @@ extract_pass_fail_result() {
echo "UNKNOWN"
}
# Planned manifest keys:
# - decision_inputs.tok006_gate_bundle_report
# - decision_inputs.superpowers_stage_validation_report
# - decision_inputs.token_runtime_readiness_report
# - decision_inputs.supply_gate_review_report
# - decision_inputs.final_decision_report
TOK006_REPORT="$(latest_file_or_empty "${GATE_OUT_DIR}/tok006_gate_bundle_*.md")"
SP_REPORT="$(latest_file_or_empty "${GATE_OUT_DIR}/superpowers_stage_validation_*.md")"
TOK_RUNTIME_READINESS_REPORT="$(latest_file_or_empty "${GATE_OUT_DIR}/token_runtime_readiness_*.md")"