Files
dingtalk-workspace-cli/scripts/policy/check-param-alias-cooccurrence.sh
克谨 af1f8ccd05 test(param): fixture regression through delivery path + co-occurrence gate
Add the ⑥ regression gate that replays every reviewed validation_fixture bad case
through the real embedded PreParse pipeline and asserts the canonical outcome
(accepting either semantic rewrite or native real-flag acceptance, failing only
on a genuine unknown-flag hallucination). Add check-param-concepts.sh (dictionary
schema/loader invariants) and check-param-alias-cooccurrence.sh (full-tree
co-occurrence scan), and wire all three into make policy.
2026-07-29 10:01:53 +08:00

42 lines
1.8 KiB
Bash
Executable File

#!/bin/sh
set -eu
# Scan every runnable command for parameter-concept co-occurrence. A concept
# whose members intersect two or more VISIBLE real flags on one command cannot
# be auto-reduced (picking one would silently mis-map the other) and must be an
# explicitly reviewed `ambiguous` entry in param_concepts.json, or reduction
# fails. This re-runs the single reduction algorithm — cli.ReduceParamAliases,
# invoked by the parameter-alias generator — against the live Cobra tree built
# by app.NewRootCommand(), so a future command or flag that introduces an
# unreviewed co-occurrence (or a scoped_aliases/bind override targeting a flag
# that is not real) turns this gate red before it can ship a silent mis-map.
#
# It is intentionally distinct from check-generated-drift.sh: drift proves the
# committed table is byte-current, whereas this gate isolates and reports the
# co-occurrence / override-target contract with a focused failure message.
ROOT="$(CDPATH= cd -- "$(dirname -- "$0")/../.." && pwd)"
cd "$ROOT"
. "$ROOT/scripts/policy/policy-runtime.sh"
policy_prepare_runtime "$ROOT"
exec_tmp="$(policy_runtime_mktemp_dir dws-param-cooccurrence)"
# The generator refuses to write inside the repository tree, so the throwaway
# output goes to a system temp dir (mirrors check-generated-drift.sh).
out_tmp="$(mktemp -d)"
generator="$exec_tmp/param-aliases"
out="$out_tmp/param_aliases_generated.go"
err="$exec_tmp/err.log"
trap 'rm -rf "$exec_tmp" "$out_tmp"' EXIT HUP INT TERM
"${GO:-go}" build -o "$generator" ./internal/generator/cmd_param_aliases
if ! "$generator" -root . -output "$out" 2>"$err"; then
printf '%s\n' 'param-alias co-occurrence gate: FAIL' >&2
printf '%s\n' 'an unreviewed concept co-occurrence (>=2 visible real flags) or an invalid scoped/bind override target was found:' >&2
cat "$err" >&2
exit 1
fi
printf 'param-alias co-occurrence gate: ok\n'