@ccoalm/ccl-skills 0.18.6 → 0.18.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/marketplace/plugins/ccl-skills/agent-context/session-policy.md +2 -2
- package/dist/assets/marketplace/plugins/ccl-skills/agent-context/session-start.md +6 -6
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/host-input.py +39 -4
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_proposed_next.py +66 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/development-completion.md +3 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_gate.sh +30 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/SKILL.md +5 -5
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/design-review-gate-mechanics.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/pre-final-continuation-gate.md +2 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/review-reception.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/eval-routing.md +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/source-register.md +28 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-ccl-skills.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-size-budget.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-sync-pointers.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/eval-routing-bank.rb +11 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_body_compliance_grading.sh +79 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_impact_chain_refscripts.sh +4 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_register_pending_exclusion.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_regressions.sh +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_route_drift.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_size_budget.sh +4 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_source_register_lifecycle.sh +9 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_sync_pointers.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_bank_grader_diagnostics.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_bank_resolution.sh +32 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_bank_surface_binding.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_prose_target.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_impact_chain_gate_dateless_host.sh +3 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_impact_chain_gate_verdict_differential.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_impact_chain_round_attribution.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_impact_chain_self_adjudication.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_impact_chain_source_refuted.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_locale_independent_gates.sh +264 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_register_firing_path_resolution.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_register_firing_path_wiring.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_uiux_delivery_contract.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_uiux_loading_budget.sh +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/validate-skill.sh +2 -0
- package/dist/assets/release.json +47 -42
- package/package.json +1 -1
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Regression: the repository gates must not depend on the caller's locale.
|
|
3
|
+
# Under a POSIX/unset locale Ruby defaults to US-ASCII, so a gate that reads the
|
|
4
|
+
# UTF-8 skill text (or runs a `ruby -e` program with UTF-8 literals) crashed with
|
|
5
|
+
# "invalid byte sequence in US-ASCII" before checking anything, while CI (which
|
|
6
|
+
# runs C.UTF-8) stayed green. Each ruby-invoking script pins `RUBYOPT=-Ku`.
|
|
7
|
+
# (1) every tracked live shell script (skills/, hooks/, scripts/) and every
|
|
8
|
+
# Makefile target that invokes ruby carries the pin, and no other literal RUBYOPT mention drops it; the
|
|
9
|
+
# classifier is held by pinned bypass and near-miss rows; frozen evidence
|
|
10
|
+
# under specs/ and eval/ is exempt;
|
|
11
|
+
# (2) validate-skill.sh passes on a UTF-8 fixture under LC_ALL=C;
|
|
12
|
+
# (3) the same run with the pin deleted goes red for the encoding reason, which
|
|
13
|
+
# shows the pin is what makes leg (2) pass; on a host whose C locale already
|
|
14
|
+
# reads UTF-8 the pin is not load-bearing and leg (3) reports unevaluated.
|
|
15
|
+
set -euo pipefail
|
|
16
|
+
# Ruby takes its encoding from the locale; under a POSIX/unset locale it reads the UTF-8 skill text as US-ASCII and crashes. Pin UTF-8, as CI runs.
|
|
17
|
+
case " ${RUBYOPT:-} " in *" -Ku "*) ;; *) export RUBYOPT="-Ku${RUBYOPT:+ $RUBYOPT}" ;; esac
|
|
18
|
+
|
|
19
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
|
|
20
|
+
ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd -P)"
|
|
21
|
+
PIN='case " ${RUBYOPT:-} " in *" -Ku "*) ;; *) export RUBYOPT="-Ku${RUBYOPT:+ $RUBYOPT}" ;; esac'
|
|
22
|
+
fail() { printf 'FAIL: %b\n' "$*" >&2; exit 1; }
|
|
23
|
+
|
|
24
|
+
# Closed contract over the idiom this repo owns: a RUBYOPT mention keeps the pin
|
|
25
|
+
# only as the pin line itself, the keep idiom RUBYOPT="${RUBYOPT:+$RUBYOPT }..."
|
|
26
|
+
# whose suffix holds only `-r<lib>` requires or variables, or an empty RUBYOPT=
|
|
27
|
+
# before `bash "$script"` (that script pins itself). Any other literal mention -
|
|
28
|
+
# replacing, clearing, unset, env -u, any other Ruby option - drops the pin.
|
|
29
|
+
# Ruby's option names are not this repo's to enumerate, so the suffix is
|
|
30
|
+
# allowlisted, never denylisted. Returns 0 when allowed.
|
|
31
|
+
KEEP_TOKEN='(-r[^[:space:]"\\]+|[$][{]?[A-Za-z_0-9]+[}]?)'
|
|
32
|
+
pin_kept() {
|
|
33
|
+
local line="$1" rest
|
|
34
|
+
[ "$line" = "$PIN" ] && return 0
|
|
35
|
+
# An attribute builtin on the variable can unexport or rescope it even when
|
|
36
|
+
# the value is the keep idiom.
|
|
37
|
+
if printf '%s\n' "$line" | grep -qE '(^|[[:space:];&|({])(declare|typeset|local|readonly|export[[:space:]]+-n)([[:space:]]|$)[^;|&]*RUBYOPT'; then
|
|
38
|
+
return 1
|
|
39
|
+
fi
|
|
40
|
+
rest="$(printf '%s\n' "$line" | sed -E \
|
|
41
|
+
-e "s/^([^\"'\\\\]*)[[:space:]]#.*\$/\\1/" \
|
|
42
|
+
-e "s/RUBYOPT=\"[\$][{]RUBYOPT:[+][\$]RUBYOPT [}](${KEEP_TOKEN}([[:space:]]+${KEEP_TOKEN})*)?\"//g" \
|
|
43
|
+
-e 's/(^|[[:space:]])RUBYOPT=[[:space:]]+bash[[:space:]]+"[$][A-Za-z_{][^"]*"/\1/g')"
|
|
44
|
+
case "$rest" in *RUBYOPT*) return 1 ;; esac
|
|
45
|
+
return 0
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
# Every RUBYOPT line of one file that drops the pin, as "N:line". Whole-line
|
|
49
|
+
# comments are skipped; nothing else is pre-filtered, so a line that merely
|
|
50
|
+
# contains the pin text is still classified.
|
|
51
|
+
pin_drops() {
|
|
52
|
+
local hit
|
|
53
|
+
while IFS= read -r hit; do
|
|
54
|
+
pin_kept "${hit#*:}" || printf '%s\n' "$hit"
|
|
55
|
+
done < <(grep -nE 'RUBYOPT' "$1" | grep -vE '^[0-9]+:[[:space:]]*#' || true)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
# (1a) The classifier itself: every bypass row must be flagged and every
|
|
59
|
+
# near-miss row must stay allowed, so a broken classifier cannot pass on a
|
|
60
|
+
# corpus that happens to hold only allowed shapes.
|
|
61
|
+
while IFS= read -r row; do
|
|
62
|
+
[ -n "$row" ] || continue
|
|
63
|
+
if pin_kept "$row"; then fail "classifier allowed a pin-dropping line: $row"; fi
|
|
64
|
+
done <<'ROWS'
|
|
65
|
+
RUBYOPT="-r$SHIM" ruby x.rb
|
|
66
|
+
RUBYOPT= ruby -e "p 1"
|
|
67
|
+
unset RUBYOPT
|
|
68
|
+
env -u RUBYOPT ruby -e 1
|
|
69
|
+
RUBYOPT="$RUBYOPT_EXTRA -rfoo" ruby -e 1
|
|
70
|
+
export RUBYOPT=
|
|
71
|
+
RUBYOPT=
|
|
72
|
+
RUBYOPT= LC_ALL=C ruby -e 1
|
|
73
|
+
LC_ALL=C RUBYOPT= LANG=C ruby -e 1
|
|
74
|
+
RUBYOPT= exec ruby -e 1
|
|
75
|
+
RUBYOPT= "${RUBY:-ruby}" -e 1
|
|
76
|
+
RUBYOPT= bash -c "ruby -e 1"
|
|
77
|
+
unset -v RUBYOPT
|
|
78
|
+
unset LANG RUBYOPT
|
|
79
|
+
env --unset=RUBYOPT ruby -e 1
|
|
80
|
+
env -uRUBYOPT ruby -e 1
|
|
81
|
+
RUBYOPT=-W0 ruby -e 1 "$RUBYOPT"
|
|
82
|
+
RUBYOPT="${RUBYOPT#-Ku}" ruby -e 1
|
|
83
|
+
RUBYOPT="" bash x.sh
|
|
84
|
+
export RUBYOPT=-W0
|
|
85
|
+
echo "a #b"; RUBYOPT=-Kn ruby -e 1
|
|
86
|
+
printf ' #' ; unset RUBYOPT
|
|
87
|
+
case " ${RUBYOPT:-} " in *" -Ku "*) ;; *) export RUBYOPT="-Ku${RUBYOPT:+ $RUBYOPT}" ;; esac; unset RUBYOPT
|
|
88
|
+
RUBYOPT="${RUBYOPT:+$RUBYOPT }-Kn" ruby x.rb
|
|
89
|
+
RUBYOPT="${RUBYOPT:+$RUBYOPT }-E ASCII" ruby x.rb
|
|
90
|
+
RUBYOPT="${RUBYOPT:+$RUBYOPT }--internal-encoding=US-ASCII" ruby x.rb
|
|
91
|
+
RUBYOPT="${RUBYOPT:+$RUBYOPT }--disable=rubyopt" ruby x.rb
|
|
92
|
+
RUBYOPT="${RUBYOPT:+$RUBYOPT }-r\" -Kn" ruby x.rb
|
|
93
|
+
export -n RUBYOPT="${RUBYOPT:+$RUBYOPT }-rdate"
|
|
94
|
+
declare +x RUBYOPT="${RUBYOPT:+$RUBYOPT }"
|
|
95
|
+
local RUBYOPT="${RUBYOPT:+$RUBYOPT }-rdate"
|
|
96
|
+
readonly RUBYOPT="${RUBYOPT:+$RUBYOPT }-rdate"
|
|
97
|
+
typeset -x RUBYOPT="${RUBYOPT:+$RUBYOPT }-rdate"
|
|
98
|
+
RUBYOPT="${RUBYOPT:+$RUBYOPT_EXTRA }" ruby x.rb
|
|
99
|
+
RUBYOPT="${RUBYOPT:+$RUBYOPT}-Kn" ruby x.rb
|
|
100
|
+
x=$#; unset RUBYOPT
|
|
101
|
+
echo a\ #b; unset RUBYOPT
|
|
102
|
+
local RUBYOPT
|
|
103
|
+
declare -x RUBYOPT=
|
|
104
|
+
ROWS
|
|
105
|
+
while IFS= read -r row; do
|
|
106
|
+
[ -n "$row" ] || continue
|
|
107
|
+
pin_kept "$row" || fail "classifier flagged an allowed line: $row"
|
|
108
|
+
done <<'ROWS'
|
|
109
|
+
out="$(RUBYOPT="${RUBYOPT:+$RUBYOPT }-rdate" ruby x.rb)"
|
|
110
|
+
env -u X LC_ALL=C RUBYOPT= bash "$SIZE_SCRIPT" "$REPO"
|
|
111
|
+
f() { # takes a RUBYOPT value
|
|
112
|
+
RUBYOPT= bash "$x"; ruby -e 1
|
|
113
|
+
RUBYOPT="${RUBYOPT:+$RUBYOPT }-r$SHIM -rdate" ruby x.rb
|
|
114
|
+
RUBYOPT="${RUBYOPT:+$RUBYOPT }$2" ruby "$1"
|
|
115
|
+
run_gate() { # <gate-path> <RUBYOPT value or empty>
|
|
116
|
+
locale=C RUBYOPT= bash "$x"
|
|
117
|
+
dir=/usr/local RUBYOPT="${RUBYOPT:+$RUBYOPT }-rdate" ruby x.rb
|
|
118
|
+
declared=1 RUBYOPT= bash "$s"
|
|
119
|
+
ROWS
|
|
120
|
+
|
|
121
|
+
# (1b) Static coverage over tracked live shell scripts.
|
|
122
|
+
tracked="$(git -C "$ROOT" ls-files -- 'skills/*.sh' 'hooks/*.sh' 'scripts/*.sh')" \
|
|
123
|
+
|| fail "cannot list tracked scripts (not a git checkout?); leg 1 needs git ls-files"
|
|
124
|
+
[ -n "$tracked" ] || fail "git ls-files listed no tracked scripts under $ROOT; leg 1 would pass vacuously"
|
|
125
|
+
missing=""
|
|
126
|
+
dropped=""
|
|
127
|
+
while IFS= read -r rel; do
|
|
128
|
+
# A bare `ruby` word: catches `ruby -e`, `ruby<<`, `ruby;`, `${RUBY:-ruby}`;
|
|
129
|
+
# leaves `rubygems` / `ruby-build` alone. Over-matching only over-requires the pin.
|
|
130
|
+
grep -qE '(^|[^a-z_])ruby([^a-z0-9_.-]|$)' "$ROOT/$rel" || continue
|
|
131
|
+
grep -qxF "$PIN" "$ROOT/$rel" || missing="$missing\n $rel"
|
|
132
|
+
# This file names RUBYOPT in its own patterns and rows, so only its pin is checked.
|
|
133
|
+
[ "$rel" = "skills/skill-extraction-workflow/scripts/test_locale_independent_gates.sh" ] && continue
|
|
134
|
+
while IFS= read -r hit; do
|
|
135
|
+
[ -n "$hit" ] && dropped="$dropped\n $rel: $hit"
|
|
136
|
+
done < <(pin_drops "$ROOT/$rel")
|
|
137
|
+
done <<<"$tracked"
|
|
138
|
+
# Makefile targets that run ruby in a recipe must be on the target-specific
|
|
139
|
+
# RUBYOPT pin line. A rule line names every target before its first colon
|
|
140
|
+
# (`a b: deps`); `X := y` assignments and the pin line itself are not rules.
|
|
141
|
+
mk_pinned_of() { sed -nE 's/^([^#:]*):[[:space:]]*override RUBYOPT :=.*-Ku.*$/\1/p' "$1"; }
|
|
142
|
+
mk_ruby_of() {
|
|
143
|
+
awk '
|
|
144
|
+
/^\t/ { if ($0 ~ /(^|[^a-z_])ruby([^a-z0-9_.-]|$)/) for (i in cur) print cur[i]; next }
|
|
145
|
+
/^[^#[:space:]]/ {
|
|
146
|
+
c = index($0, ":"); if (c == 0) next
|
|
147
|
+
head = substr($0, 1, c - 1)
|
|
148
|
+
if (substr($0, c + 1, 1) == "=" || head ~ /=/) next
|
|
149
|
+
if ($0 ~ /RUBYOPT :=/) next
|
|
150
|
+
split("", cur); n = split(head, names, /[[:space:]]+/)
|
|
151
|
+
for (i = 1; i <= n; i++) if (names[i] != "") cur[i] = names[i]
|
|
152
|
+
}' "$1" | sort -u
|
|
153
|
+
}
|
|
154
|
+
mk_missing_of() { # <Makefile>: ruby-running targets absent from the pin line
|
|
155
|
+
local pinned t
|
|
156
|
+
grep -qxF 'export RUBYOPT' "$1" || { echo "(RUBYOPT is not exported)"; return; }
|
|
157
|
+
pinned="$(mk_pinned_of "$1")"
|
|
158
|
+
[ -n "$pinned" ] || { echo "(no target-specific RUBYOPT -Ku pin line)"; return; }
|
|
159
|
+
for t in $(mk_ruby_of "$1"); do
|
|
160
|
+
case " $pinned " in *" $t "*) ;; *) echo "$t" ;; esac
|
|
161
|
+
done
|
|
162
|
+
}
|
|
163
|
+
[ -n "$(mk_ruby_of "$ROOT/Makefile")" ] || fail "found no Makefile recipe that runs ruby; the Makefile check would pass vacuously"
|
|
164
|
+
for t in $(mk_missing_of "$ROOT/Makefile"); do missing="$missing\n Makefile target $t"; done
|
|
165
|
+
# The tracker itself, on a fixture: a multi-target ruby rule after a pinned one
|
|
166
|
+
# must be reported under its own names, and an assignment line must not reset it.
|
|
167
|
+
mk_fx="$(mktemp "${TMPDIR:-/tmp}/locale-mk.XXXXXX")"
|
|
168
|
+
printf 'X := 1\nexport RUBYOPT\np1 p2: override RUBYOPT := -Ku\np1:\n\truby a.rb\nnew-a new-b: dep\n\t@ruby b.rb\nY := 2\n\techo no\n' >"$mk_fx"
|
|
169
|
+
mk_fx_out="$(mk_missing_of "$mk_fx" | tr '\n' ' ')"
|
|
170
|
+
rm -f "$mk_fx"
|
|
171
|
+
[ "$mk_fx_out" = "new-a new-b " ] || fail "Makefile tracker must report exactly new-a new-b on its fixture, got: $mk_fx_out"
|
|
172
|
+
[ -z "$missing" ] || fail "ruby-invoking scripts without the RUBYOPT UTF-8 pin:$missing"
|
|
173
|
+
[ -z "$dropped" ] || fail "RUBYOPT mentions that drop the UTF-8 pin (use the keep idiom):$dropped"
|
|
174
|
+
|
|
175
|
+
TMP="$(mktemp -d "${TMPDIR:-/tmp}/locale-gates.XXXXXX")"
|
|
176
|
+
trap 'rm -rf "$TMP"' EXIT
|
|
177
|
+
|
|
178
|
+
# Exercise the actual Makefile declarations using inert recipes. In particular,
|
|
179
|
+
# command-line RUBYOPT must not override the UTF-8 pin. Replacing just the recipes
|
|
180
|
+
# keeps live evals offline and preserves Make's assignment/export semantics.
|
|
181
|
+
make_targets="$(mk_ruby_of "$ROOT/Makefile" | tr '\n' ' ')"
|
|
182
|
+
printf '%s:\n' "$make_targets" >"$TMP/probe.mk"
|
|
183
|
+
printf '\t@ruby -e '\''abort "make recipe lost UTF-8" unless Encoding.default_external == Encoding::UTF_8; abort "make recipe lost caller option" if ENV["CCL_MAKE_CALLER_OPTION"] == "yes" && !ENV.fetch("RUBYOPT").split.include?("-W0")'\''\n' >>"$TMP/probe.mk"
|
|
184
|
+
run_make_pin() {
|
|
185
|
+
local makefile="$1"
|
|
186
|
+
shift
|
|
187
|
+
env -u LANGUAGE -u RUBYOPT LC_ALL=C LANG=C make --no-print-directory \
|
|
188
|
+
-f "$makefile" -f "$TMP/probe.mk" "$@" $make_targets
|
|
189
|
+
}
|
|
190
|
+
if ! make_out="$(run_make_pin "$ROOT/Makefile" RUBYOPT=-W0 CCL_MAKE_CALLER_OPTION=yes 2>&1)"; then
|
|
191
|
+
fail "Makefile Ruby targets failed under LC_ALL=C with CLI RUBYOPT:\n$make_out"
|
|
192
|
+
fi
|
|
193
|
+
if ! make_out="$(run_make_pin "$ROOT/Makefile" 2>&1)"; then
|
|
194
|
+
fail "Makefile Ruby targets failed with RUBYOPT absent:\n$make_out"
|
|
195
|
+
fi
|
|
196
|
+
# Applied mutations prove both declarations matter at runtime, as well as in
|
|
197
|
+
# the static tracker. CLI variables are auto-exported by Make, so the export
|
|
198
|
+
# mutation must run without the CLI override to avoid masking a missing export.
|
|
199
|
+
sed 's/: override RUBYOPT :=/: RUBYOPT :=/' "$ROOT/Makefile" >"$TMP/no-override.mk"
|
|
200
|
+
sed '/^export RUBYOPT$/d' "$ROOT/Makefile" >"$TMP/no-export.mk"
|
|
201
|
+
for mutant in no-override no-export; do
|
|
202
|
+
cmp -s "$ROOT/Makefile" "$TMP/$mutant.mk" && fail "$mutant mutation was not applied"
|
|
203
|
+
[ -n "$(mk_missing_of "$TMP/$mutant.mk")" ] || fail "Makefile tracker accepted $mutant mutation"
|
|
204
|
+
make_args=()
|
|
205
|
+
[ "$mutant" != no-override ] || make_args=(RUBYOPT=-W0)
|
|
206
|
+
# Bash 3.2 treats an empty array as unset under nounset.
|
|
207
|
+
if make_out="$(run_make_pin "$TMP/$mutant.mk" ${make_args[@]+"${make_args[@]}"} 2>&1)"; then
|
|
208
|
+
fail "Makefile $mutant mutation still passed the UTF-8 assertion"
|
|
209
|
+
fi
|
|
210
|
+
case "$make_out" in *'make recipe lost UTF-8'*) : ;; *) fail "$mutant failed for an unrelated reason:\n$make_out" ;; esac
|
|
211
|
+
done
|
|
212
|
+
|
|
213
|
+
# (1c) The scan as a whole, on a fixture file: only a line that drops the pin is
|
|
214
|
+
# reported, including one that also contains the pin text.
|
|
215
|
+
{
|
|
216
|
+
printf '%s\n' "$PIN"
|
|
217
|
+
printf '%s; unset RUBYOPT\n' "$PIN"
|
|
218
|
+
printf '# unset RUBYOPT in a comment\n'
|
|
219
|
+
printf 'out="$(RUBYOPT="${RUBYOPT:+$RUBYOPT }-rdate" ruby x.rb)"\n'
|
|
220
|
+
} >"$TMP/scan-fixture.sh"
|
|
221
|
+
scan_out="$(pin_drops "$TMP/scan-fixture.sh")"
|
|
222
|
+
[ "${scan_out%%:*}" = "2" ] && [ "$(printf '%s\n' "$scan_out" | grep -c .)" = "1" ] \
|
|
223
|
+
|| fail "pin_drops must report only line 2 of the scan fixture, got:\n$scan_out"
|
|
224
|
+
mkdir -p "$TMP/skill/references"
|
|
225
|
+
cat >"$TMP/skill/SKILL.md" <<'EOF'
|
|
226
|
+
---
|
|
227
|
+
name: locale-fixture
|
|
228
|
+
description: 合成夹具 — synthetic fixture for locale independence.
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
# 夹具
|
|
232
|
+
|
|
233
|
+
见 `references/detail.md`。
|
|
234
|
+
EOF
|
|
235
|
+
printf '# 细节\n\n中文正文。\n' >"$TMP/skill/references/detail.md"
|
|
236
|
+
|
|
237
|
+
run_c_locale() { env -u LANGUAGE LC_ALL=C LANG=C RUBYOPT= bash "$1" "$TMP/skill"; }
|
|
238
|
+
|
|
239
|
+
# (2) The shipped gate passes under the C locale.
|
|
240
|
+
if ! out="$(run_c_locale "$SCRIPT_DIR/validate-skill.sh" 2>&1)"; then
|
|
241
|
+
fail "validate-skill.sh failed under LC_ALL=C:\n$out"
|
|
242
|
+
fi
|
|
243
|
+
case "$out" in *markdown_references_ok*) : ;; *) fail "validate-skill.sh did not reach the reference check under LC_ALL=C:\n$out" ;; esac
|
|
244
|
+
|
|
245
|
+
# (3) Applied mutation: the same script without the pin reds for the encoding reason.
|
|
246
|
+
cp -R "$SCRIPT_DIR" "$TMP/scripts"
|
|
247
|
+
grep -vxF "$PIN" "$SCRIPT_DIR/validate-skill.sh" >"$TMP/scripts/validate-skill.sh"
|
|
248
|
+
if mout="$(run_c_locale "$TMP/scripts/validate-skill.sh" 2>&1)"; then
|
|
249
|
+
# Unevaluated only when the host itself explains the pass: Ruby already reads
|
|
250
|
+
# UTF-8 under the C locale, so the pin is not load-bearing here. Any other
|
|
251
|
+
# reason the unpinned run passed means leg 2 may be vacuous.
|
|
252
|
+
if ! env -u LANGUAGE LC_ALL=C LANG=C ruby -e 'exit(Encoding.find("locale") == Encoding::UTF_8 ? 0 : 1)'; then
|
|
253
|
+
fail "pin removed, yet validate-skill.sh still passed under LC_ALL=C on a host whose Ruby reads US-ASCII there, so leg 2 proves nothing:\n$mout"
|
|
254
|
+
fi
|
|
255
|
+
echo "test_locale_independent_gates_leg3_unevaluated: this host's Ruby reads UTF-8 under LC_ALL=C, so removing the pin cannot be shown to matter here" >&2
|
|
256
|
+
echo "test_locale_independent_gates: ok (legs 1-2; leg 3 unevaluated on this host)"
|
|
257
|
+
exit 0
|
|
258
|
+
fi
|
|
259
|
+
case "$mout" in
|
|
260
|
+
*"invalid byte sequence"*|*"invalid multibyte char"*) : ;;
|
|
261
|
+
*) fail "pin removed: run failed, but not for the encoding reason:\n$mout" ;;
|
|
262
|
+
esac
|
|
263
|
+
|
|
264
|
+
echo "test_locale_independent_gates: ok"
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
# locator. A test that only ever asserts "clean stays clean" would pass with the
|
|
14
14
|
# whole detection deleted, so every RED case here has a paired GREEN control.
|
|
15
15
|
set -euo pipefail
|
|
16
|
+
# Ruby takes its encoding from the locale; under a POSIX/unset locale it reads the UTF-8 skill text as US-ASCII and crashes. Pin UTF-8, as CI runs.
|
|
17
|
+
case " ${RUBYOPT:-} " in *" -Ku "*) ;; *) export RUBYOPT="-Ku${RUBYOPT:+ $RUBYOPT}" ;; esac
|
|
16
18
|
|
|
17
19
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
|
|
18
20
|
GATE="$SCRIPT_DIR/register-firing-path-resolution.rb"
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
# ALIAS_AUDIT_CMD=true stands in for a passing private R0 audit so the assertion
|
|
12
12
|
# isolates firing-path enforcement from the separate R0 interim path.
|
|
13
13
|
set -euo pipefail
|
|
14
|
+
# Ruby takes its encoding from the locale; under a POSIX/unset locale it reads the UTF-8 skill text as US-ASCII and crashes. Pin UTF-8, as CI runs.
|
|
15
|
+
case " ${RUBYOPT:-} " in *" -Ku "*) ;; *) export RUBYOPT="-Ku${RUBYOPT:+ $RUBYOPT}" ;; esac
|
|
14
16
|
|
|
15
17
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
|
|
16
18
|
CHECK_SCRIPT="$SCRIPT_DIR/check-ccl-skills.sh"
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
# The canonical reference owns the protocol; each participating skill keeps
|
|
4
4
|
# only its local responsibility and a pointer to that reference.
|
|
5
5
|
set -euo pipefail
|
|
6
|
+
# Ruby takes its encoding from the locale; under a POSIX/unset locale it reads the UTF-8 skill text as US-ASCII and crashes. Pin UTF-8, as CI runs.
|
|
7
|
+
case " ${RUBYOPT:-} " in *" -Ku "*) ;; *) export RUBYOPT="-Ku${RUBYOPT:+ $RUBYOPT}" ;; esac
|
|
6
8
|
|
|
7
9
|
ROOT="${UIUX_CONTRACT_ROOT:-$(cd "$(dirname "$0")/../../.." && pwd -P)}"
|
|
8
10
|
CONTRACT="$ROOT/skills/product-ui-ux-design/references/delivery-contract.md"
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
# entry and every routed reference local and resolvable. Real provider load,
|
|
8
8
|
# token, latency, correction, and task-quality claims still require task trials.
|
|
9
9
|
set -euo pipefail
|
|
10
|
+
# Ruby takes its encoding from the locale; under a POSIX/unset locale it reads the UTF-8 skill text as US-ASCII and crashes. Pin UTF-8, as CI runs.
|
|
11
|
+
case " ${RUBYOPT:-} " in *" -Ku "*) ;; *) export RUBYOPT="-Ku${RUBYOPT:+ $RUBYOPT}" ;; esac
|
|
10
12
|
|
|
11
13
|
ROOT="${UIUX_LOADING_ROOT:-$(cd "$(dirname "$0")/../../.." && pwd -P)}"
|
|
12
14
|
DEFAULT_BASE_REF="e322db47abe5736e6e1fdf0e73e2ed3eb32c006b"
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
set -euo pipefail
|
|
3
|
+
# Ruby takes its encoding from the locale; under a POSIX/unset locale it reads the UTF-8 skill text as US-ASCII and crashes. Pin UTF-8, as CI runs.
|
|
4
|
+
case " ${RUBYOPT:-} " in *" -Ku "*) ;; *) export RUBYOPT="-Ku${RUBYOPT:+ $RUBYOPT}" ;; esac
|
|
3
5
|
|
|
4
6
|
target="${1:-.}"
|
|
5
7
|
|
package/dist/assets/release.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": 1,
|
|
3
3
|
"npmPackage": "@ccoalm/ccl-skills",
|
|
4
|
-
"version": "0.18.
|
|
5
|
-
"sourceCommit": "
|
|
4
|
+
"version": "0.18.7",
|
|
5
|
+
"sourceCommit": "dcdc9ba9c54f708348dbfc46fb4964ec8d452001",
|
|
6
6
|
"sourceState": "clean",
|
|
7
7
|
"files": [
|
|
8
8
|
{
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
44
|
"path": "marketplace/plugins/ccl-skills/agent-context/session-policy.md",
|
|
45
|
-
"sha256": "
|
|
45
|
+
"sha256": "a47f7ff077f33da3efaa24fc1d55118330f23ef268e92355d2f281ee56237d2a",
|
|
46
46
|
"mode": 420
|
|
47
47
|
},
|
|
48
48
|
{
|
|
49
49
|
"path": "marketplace/plugins/ccl-skills/agent-context/session-start.md",
|
|
50
|
-
"sha256": "
|
|
50
|
+
"sha256": "a4292129978273e62a6975ed86abd383ea0b4cc3925ede8a1a8af5d6b39be1c8",
|
|
51
51
|
"mode": 420
|
|
52
52
|
},
|
|
53
53
|
{
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
84
|
"path": "marketplace/plugins/ccl-skills/hooks/host-input.py",
|
|
85
|
-
"sha256": "
|
|
85
|
+
"sha256": "b737a74f0a664c52189e43b84539c7ab41e5e4817570b6b1c50c889056c3a9a6",
|
|
86
86
|
"mode": 420
|
|
87
87
|
},
|
|
88
88
|
{
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
},
|
|
188
188
|
{
|
|
189
189
|
"path": "marketplace/plugins/ccl-skills/hooks/test_proposed_next.py",
|
|
190
|
-
"sha256": "
|
|
190
|
+
"sha256": "db2df523107fa2b0896c769396e523171f77948526f9d39c8396b598e68fefbf",
|
|
191
191
|
"mode": 493
|
|
192
192
|
},
|
|
193
193
|
{
|
|
@@ -347,7 +347,7 @@
|
|
|
347
347
|
},
|
|
348
348
|
{
|
|
349
349
|
"path": "marketplace/plugins/ccl-skills/skills/code-review/references/development-completion.md",
|
|
350
|
-
"sha256": "
|
|
350
|
+
"sha256": "1de7e7f7529d4399738cb1bf9447cb33654bb96443449456fc14d037ca8a94c9",
|
|
351
351
|
"mode": 420
|
|
352
352
|
},
|
|
353
353
|
{
|
|
@@ -557,7 +557,7 @@
|
|
|
557
557
|
},
|
|
558
558
|
{
|
|
559
559
|
"path": "marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_gate.sh",
|
|
560
|
-
"sha256": "
|
|
560
|
+
"sha256": "b04fd9bd2bbd75195e5a3f1ca63aeba9d8a585403079a721c44f0275b0ea0208",
|
|
561
561
|
"mode": 493
|
|
562
562
|
},
|
|
563
563
|
{
|
|
@@ -1417,7 +1417,7 @@
|
|
|
1417
1417
|
},
|
|
1418
1418
|
{
|
|
1419
1419
|
"path": "marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/design-review-gate-mechanics.md",
|
|
1420
|
-
"sha256": "
|
|
1420
|
+
"sha256": "6c07df6024da34e6494101c85959286049aed52db96567c2819c957566ca6ea2",
|
|
1421
1421
|
"mode": 420
|
|
1422
1422
|
},
|
|
1423
1423
|
{
|
|
@@ -1477,7 +1477,7 @@
|
|
|
1477
1477
|
},
|
|
1478
1478
|
{
|
|
1479
1479
|
"path": "marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/pre-final-continuation-gate.md",
|
|
1480
|
-
"sha256": "
|
|
1480
|
+
"sha256": "b23c9822452402d26035218ea1e16f8cb3943a2d5812ff6ecd94399f66110644",
|
|
1481
1481
|
"mode": 420
|
|
1482
1482
|
},
|
|
1483
1483
|
{
|
|
@@ -1507,7 +1507,7 @@
|
|
|
1507
1507
|
},
|
|
1508
1508
|
{
|
|
1509
1509
|
"path": "marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/review-reception.md",
|
|
1510
|
-
"sha256": "
|
|
1510
|
+
"sha256": "e00b62f2719fc8640b5632b9b1ca0bc2035880b0688441c8beebb3fd49cc781d",
|
|
1511
1511
|
"mode": 420
|
|
1512
1512
|
},
|
|
1513
1513
|
{
|
|
@@ -1552,7 +1552,7 @@
|
|
|
1552
1552
|
},
|
|
1553
1553
|
{
|
|
1554
1554
|
"path": "marketplace/plugins/ccl-skills/skills/product-rd-workflow/SKILL.md",
|
|
1555
|
-
"sha256": "
|
|
1555
|
+
"sha256": "5e1218771802f949cded19f40ddb03676b0e0be411d0616245fdd581425d0ef9",
|
|
1556
1556
|
"mode": 420
|
|
1557
1557
|
},
|
|
1558
1558
|
{
|
|
@@ -1817,7 +1817,7 @@
|
|
|
1817
1817
|
},
|
|
1818
1818
|
{
|
|
1819
1819
|
"path": "marketplace/plugins/ccl-skills/skills/python-service-architecture/SKILL.md",
|
|
1820
|
-
"sha256": "
|
|
1820
|
+
"sha256": "199b030335cfdb9f5255d5697326c97e48604fe2a46dcb3dd98f07793e2d40de",
|
|
1821
1821
|
"mode": 420
|
|
1822
1822
|
},
|
|
1823
1823
|
{
|
|
@@ -2107,7 +2107,7 @@
|
|
|
2107
2107
|
},
|
|
2108
2108
|
{
|
|
2109
2109
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/eval-routing.md",
|
|
2110
|
-
"sha256": "
|
|
2110
|
+
"sha256": "f0bf6485aa236398045f6ab460ec6975566f78569862a7c1f94a29e58e05a9e2",
|
|
2111
2111
|
"mode": 420
|
|
2112
2112
|
},
|
|
2113
2113
|
{
|
|
@@ -2207,7 +2207,7 @@
|
|
|
2207
2207
|
},
|
|
2208
2208
|
{
|
|
2209
2209
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/source-register.md",
|
|
2210
|
-
"sha256": "
|
|
2210
|
+
"sha256": "1c0e95554f7b8d63860e23385d3b9d84b7d3c1790e4e4071e772b170b4a2b2c6",
|
|
2211
2211
|
"mode": 420
|
|
2212
2212
|
},
|
|
2213
2213
|
{
|
|
@@ -2247,7 +2247,7 @@
|
|
|
2247
2247
|
},
|
|
2248
2248
|
{
|
|
2249
2249
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-ccl-skills.sh",
|
|
2250
|
-
"sha256": "
|
|
2250
|
+
"sha256": "cc0b4c36f8f5c8cfe613a046117b4f569314be1f0cae94ba4b4133c21415b960",
|
|
2251
2251
|
"mode": 493
|
|
2252
2252
|
},
|
|
2253
2253
|
{
|
|
@@ -2272,12 +2272,12 @@
|
|
|
2272
2272
|
},
|
|
2273
2273
|
{
|
|
2274
2274
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-size-budget.sh",
|
|
2275
|
-
"sha256": "
|
|
2275
|
+
"sha256": "9a5f860bde439347e853ba4298705abe237ab18ca908e919204b1d5294570e60",
|
|
2276
2276
|
"mode": 493
|
|
2277
2277
|
},
|
|
2278
2278
|
{
|
|
2279
2279
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-sync-pointers.sh",
|
|
2280
|
-
"sha256": "
|
|
2280
|
+
"sha256": "f2a12a889e8fe18b89c95cdb5a7ea9647661822de58270adf08a045c39cbf319",
|
|
2281
2281
|
"mode": 493
|
|
2282
2282
|
},
|
|
2283
2283
|
{
|
|
@@ -2302,7 +2302,7 @@
|
|
|
2302
2302
|
},
|
|
2303
2303
|
{
|
|
2304
2304
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/eval-routing-bank.rb",
|
|
2305
|
-
"sha256": "
|
|
2305
|
+
"sha256": "224fbb07f3e1233510ee2493de9e4a8b98afd0d03e39c334a68df95109a0c936",
|
|
2306
2306
|
"mode": 493
|
|
2307
2307
|
},
|
|
2308
2308
|
{
|
|
@@ -2382,12 +2382,12 @@
|
|
|
2382
2382
|
},
|
|
2383
2383
|
{
|
|
2384
2384
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_body_compliance_grading.sh",
|
|
2385
|
-
"sha256": "
|
|
2385
|
+
"sha256": "c1c34a27011e77f367a758bb5d6f4abd1ab04d997119f718268343c73027604f",
|
|
2386
2386
|
"mode": 493
|
|
2387
2387
|
},
|
|
2388
2388
|
{
|
|
2389
2389
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_impact_chain_refscripts.sh",
|
|
2390
|
-
"sha256": "
|
|
2390
|
+
"sha256": "705f24a9cd5f8ed552fdeda3334d308bafa15922d1c311cba3c62866c2a07ae2",
|
|
2391
2391
|
"mode": 493
|
|
2392
2392
|
},
|
|
2393
2393
|
{
|
|
@@ -2402,22 +2402,22 @@
|
|
|
2402
2402
|
},
|
|
2403
2403
|
{
|
|
2404
2404
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_register_pending_exclusion.sh",
|
|
2405
|
-
"sha256": "
|
|
2405
|
+
"sha256": "db83328728cd9579e910548d28a9096292d8140c8c447e714b2b28409158d46b",
|
|
2406
2406
|
"mode": 493
|
|
2407
2407
|
},
|
|
2408
2408
|
{
|
|
2409
2409
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_regressions.sh",
|
|
2410
|
-
"sha256": "
|
|
2410
|
+
"sha256": "3fac6685fe62945ac8733b58cc4826932cdaf243233d38f44979796dda3ec845",
|
|
2411
2411
|
"mode": 493
|
|
2412
2412
|
},
|
|
2413
2413
|
{
|
|
2414
2414
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_route_drift.sh",
|
|
2415
|
-
"sha256": "
|
|
2415
|
+
"sha256": "4116943f04a4711a5b8ba1544f5165cd906cebcfe4ef200fa858ac2283e98ac4",
|
|
2416
2416
|
"mode": 493
|
|
2417
2417
|
},
|
|
2418
2418
|
{
|
|
2419
2419
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_size_budget.sh",
|
|
2420
|
-
"sha256": "
|
|
2420
|
+
"sha256": "12516de81258c0be905ca62ed9acef5afb5af0ff9b32aace6636fd5759e323f7",
|
|
2421
2421
|
"mode": 493
|
|
2422
2422
|
},
|
|
2423
2423
|
{
|
|
@@ -2427,7 +2427,7 @@
|
|
|
2427
2427
|
},
|
|
2428
2428
|
{
|
|
2429
2429
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_source_register_lifecycle.sh",
|
|
2430
|
-
"sha256": "
|
|
2430
|
+
"sha256": "19421b4db0ed6f1e22f0bf8402a049f111018d69703313ecf1c961cc477f8d37",
|
|
2431
2431
|
"mode": 493
|
|
2432
2432
|
},
|
|
2433
2433
|
{
|
|
@@ -2447,7 +2447,7 @@
|
|
|
2447
2447
|
},
|
|
2448
2448
|
{
|
|
2449
2449
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_sync_pointers.sh",
|
|
2450
|
-
"sha256": "
|
|
2450
|
+
"sha256": "582e2c093d5a872db63d42001fa2ff4c5743ab4e8e5b2804e3f1718a8d355afa",
|
|
2451
2451
|
"mode": 493
|
|
2452
2452
|
},
|
|
2453
2453
|
{
|
|
@@ -2472,22 +2472,22 @@
|
|
|
2472
2472
|
},
|
|
2473
2473
|
{
|
|
2474
2474
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_bank_grader_diagnostics.sh",
|
|
2475
|
-
"sha256": "
|
|
2475
|
+
"sha256": "1fd3bb148b94fa4fcdc9914075bec85f0b18ce2d57fb02bca5595d319c0f446f",
|
|
2476
2476
|
"mode": 493
|
|
2477
2477
|
},
|
|
2478
2478
|
{
|
|
2479
2479
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_bank_resolution.sh",
|
|
2480
|
-
"sha256": "
|
|
2480
|
+
"sha256": "f927bf7f2210d67611b9f2ee07b5e218f78bea3daa73173a4c06e6fab56fa80d",
|
|
2481
2481
|
"mode": 493
|
|
2482
2482
|
},
|
|
2483
2483
|
{
|
|
2484
2484
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_bank_surface_binding.sh",
|
|
2485
|
-
"sha256": "
|
|
2485
|
+
"sha256": "7388730731f38e6cb9042546b3c384241b7a9c7df2fe5f368de5f9b2b84d580d",
|
|
2486
2486
|
"mode": 493
|
|
2487
2487
|
},
|
|
2488
2488
|
{
|
|
2489
2489
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_prose_target.sh",
|
|
2490
|
-
"sha256": "
|
|
2490
|
+
"sha256": "f64532ad4d50d4546f09994c38dd63dae05e7dd7f90ae8fe2b640e9987d1d814",
|
|
2491
2491
|
"mode": 493
|
|
2492
2492
|
},
|
|
2493
2493
|
{
|
|
@@ -2532,27 +2532,27 @@
|
|
|
2532
2532
|
},
|
|
2533
2533
|
{
|
|
2534
2534
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_impact_chain_gate_dateless_host.sh",
|
|
2535
|
-
"sha256": "
|
|
2535
|
+
"sha256": "b3ea5fdcabf00d0df14710830c7c6860ef1d5476d19044ff7812000eaee6edb6",
|
|
2536
2536
|
"mode": 493
|
|
2537
2537
|
},
|
|
2538
2538
|
{
|
|
2539
2539
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_impact_chain_gate_verdict_differential.sh",
|
|
2540
|
-
"sha256": "
|
|
2540
|
+
"sha256": "0028a9ffa2a9c344ce143377da5787975f488cb75dd04cf602de4d93c72b6496",
|
|
2541
2541
|
"mode": 493
|
|
2542
2542
|
},
|
|
2543
2543
|
{
|
|
2544
2544
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_impact_chain_round_attribution.sh",
|
|
2545
|
-
"sha256": "
|
|
2545
|
+
"sha256": "e6417d70200377268f71bd445578687c27aa1994a0260626feca9e0e950b0738",
|
|
2546
2546
|
"mode": 493
|
|
2547
2547
|
},
|
|
2548
2548
|
{
|
|
2549
2549
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_impact_chain_self_adjudication.sh",
|
|
2550
|
-
"sha256": "
|
|
2550
|
+
"sha256": "b84dcaa206ce9c95d95ec0a813d55450f5759422e67076ea473d2b775088acf2",
|
|
2551
2551
|
"mode": 493
|
|
2552
2552
|
},
|
|
2553
2553
|
{
|
|
2554
2554
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_impact_chain_source_refuted.sh",
|
|
2555
|
-
"sha256": "
|
|
2555
|
+
"sha256": "7afcf09d3bb2ed2405c685b9bd5d8f95cd0c3798d2dd7d119279cb6905b6372b",
|
|
2556
2556
|
"mode": 493
|
|
2557
2557
|
},
|
|
2558
2558
|
{
|
|
@@ -2560,6 +2560,11 @@
|
|
|
2560
2560
|
"sha256": "59a64a65c1998a18506164f93100cb270319ee9c6eddd485d32d78520b064e6a",
|
|
2561
2561
|
"mode": 493
|
|
2562
2562
|
},
|
|
2563
|
+
{
|
|
2564
|
+
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_locale_independent_gates.sh",
|
|
2565
|
+
"sha256": "0f78f16b4193f2feeb72c3af102c3979ab76ce1322530be053c049fed7bf5aee",
|
|
2566
|
+
"mode": 493
|
|
2567
|
+
},
|
|
2563
2568
|
{
|
|
2564
2569
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_obligation_ledger_repo_audit.sh",
|
|
2565
2570
|
"sha256": "57b64b2b2f9cfddf96ff723be42e93410cf2269f6b0fae184c6a68b3c7945968",
|
|
@@ -2582,12 +2587,12 @@
|
|
|
2582
2587
|
},
|
|
2583
2588
|
{
|
|
2584
2589
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_register_firing_path_resolution.sh",
|
|
2585
|
-
"sha256": "
|
|
2590
|
+
"sha256": "b5dfd026af42ccb67801e3e7325ccc909a0677c72bd37c29c4c5fcd4905bc71c",
|
|
2586
2591
|
"mode": 493
|
|
2587
2592
|
},
|
|
2588
2593
|
{
|
|
2589
2594
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_register_firing_path_wiring.sh",
|
|
2590
|
-
"sha256": "
|
|
2595
|
+
"sha256": "8b8ae410afc61a8d4fde59e21f88af91cd90a4329b0cdc3183eb8b5f2a6dc630",
|
|
2591
2596
|
"mode": 493
|
|
2592
2597
|
},
|
|
2593
2598
|
{
|
|
@@ -2617,12 +2622,12 @@
|
|
|
2617
2622
|
},
|
|
2618
2623
|
{
|
|
2619
2624
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_uiux_delivery_contract.sh",
|
|
2620
|
-
"sha256": "
|
|
2625
|
+
"sha256": "b58ec01810e0a226ff92bfd15b9d1f7bdc3c572591e7a68407b4a9fa8fa14ced",
|
|
2621
2626
|
"mode": 493
|
|
2622
2627
|
},
|
|
2623
2628
|
{
|
|
2624
2629
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_uiux_loading_budget.sh",
|
|
2625
|
-
"sha256": "
|
|
2630
|
+
"sha256": "3e85121dd240eb88c8a1ce1b66de0ac700dd722a5680b5584d706b22bb6d10a7",
|
|
2626
2631
|
"mode": 493
|
|
2627
2632
|
},
|
|
2628
2633
|
{
|
|
@@ -2642,7 +2647,7 @@
|
|
|
2642
2647
|
},
|
|
2643
2648
|
{
|
|
2644
2649
|
"path": "marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/validate-skill.sh",
|
|
2645
|
-
"sha256": "
|
|
2650
|
+
"sha256": "0422dbae4565e2df2582f3bedb6fb4b2a3f849a0b430e03ad27acd6bbdbf1846",
|
|
2646
2651
|
"mode": 493
|
|
2647
2652
|
},
|
|
2648
2653
|
{
|
|
@@ -3518,5 +3523,5 @@
|
|
|
3518
3523
|
"mode": 420
|
|
3519
3524
|
}
|
|
3520
3525
|
],
|
|
3521
|
-
"snapshotHash": "
|
|
3526
|
+
"snapshotHash": "ba46e55d708e08e62b84b47d83c333b50a91b1ea66c25a01c9b8430689cf3e3f"
|
|
3522
3527
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ccoalm/ccl-skills",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.7",
|
|
4
4
|
"description": "Reusable workflows that help coding agents plan, build, test, review, and release software — for Claude Code, Codex, and OpenCode",
|
|
5
5
|
"keywords": ["skills", "agent-skills", "claude", "claude-code", "codex", "opencode", "agent", "ai", "ai-agents", "cli", "anthropic", "developer-tools"],
|
|
6
6
|
"type": "module",
|