feat(01-01): add Phase 1 invariant verification scripts
Three executable bash scripts under tools/ that Wave 0 and every
subsequent Phase 1 plan's <automated> block rely on:
- verify-no-version-literals.sh (INFRA-01 SC#2 / D-09): no literal
library/plugin version strings in any *.gradle.kts. Excludes
build-logic/build.gradle.kts (needs asDependency() literals) and
top-level project-version assignments ("^version = \"x.y.z\"")
which are artifact metadata, not library pins.
- verify-shared-pure.sh (INFRA-06 / D-19): shared/commonMain must
not import Ktor/Compose/SQLDelight. Returns OK if the directory
does not exist yet (pre-scaffold tolerance for Plan 07).
- verify-ios-flags.sh (INFRA-03 / D-18): both K/N iOS binary flags
present in gradle.properties.
All three use bash (#!/usr/bin/env bash + set -euo pipefail) and
are marked chmod +x. Scripts exit 0 against the current repo state.
This commit is contained in:
6
tools/verify-ios-flags.sh
Executable file
6
tools/verify-ios-flags.sh
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Enforces INFRA-03 / D-18: iOS K/N flags present in gradle.properties.
|
||||||
|
set -euo pipefail
|
||||||
|
grep -q '^kotlin\.native\.binary\.gc=cms$' gradle.properties || { echo "MISSING: kotlin.native.binary.gc=cms" >&2; exit 1; }
|
||||||
|
grep -q '^kotlin\.native\.binary\.objcDisposeOnMain=false$' gradle.properties || { echo "MISSING: kotlin.native.binary.objcDisposeOnMain=false" >&2; exit 1; }
|
||||||
|
echo "OK: iOS binary flags present."
|
||||||
21
tools/verify-no-version-literals.sh
Executable file
21
tools/verify-no-version-literals.sh
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Enforces INFRA-01 SC#2 / D-09: no literal *library/plugin* version strings outside catalog.
|
||||||
|
# Scans every *.gradle.kts for numeric version literals (e.g. version = "1.2.3") that would
|
||||||
|
# represent a library or plugin pin leaking out of the catalog.
|
||||||
|
#
|
||||||
|
# Exclusions (all semantic, not loopholes):
|
||||||
|
# - build-logic/build.gradle.kts needs literal plugin-dependency coordinates (`asDependency()`)
|
||||||
|
# - Top-level project-version assignments (unindented `^version = "x.y.z"`) are Gradle project
|
||||||
|
# metadata (artifact name) — NOT a library version pin. D-09 guards dependency versions,
|
||||||
|
# not project identity.
|
||||||
|
set -euo pipefail
|
||||||
|
VIOLATIONS=$(grep -rn -E 'version[[:space:]]*=[[:space:]]*"[0-9]' --include='*.gradle.kts' . 2>/dev/null \
|
||||||
|
| grep -v 'build-logic/build.gradle.kts' \
|
||||||
|
| grep -vE ':[0-9]+:version[[:space:]]*=[[:space:]]*"[0-9]' \
|
||||||
|
|| true)
|
||||||
|
if [ -n "$VIOLATIONS" ]; then
|
||||||
|
echo "ERROR: version literals found outside catalog:" >&2
|
||||||
|
echo "$VIOLATIONS" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "OK: no version literals outside catalog."
|
||||||
15
tools/verify-shared-pure.sh
Executable file
15
tools/verify-shared-pure.sh
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Enforces INFRA-06 / D-19: shared/commonMain must not import Ktor, Compose, SQLDelight.
|
||||||
|
# Runs grep against shared/src/commonMain/ only. Allowed imports: kotlin.*, kotlinx.serialization, kotlinx.datetime.
|
||||||
|
set -euo pipefail
|
||||||
|
if [ ! -d shared/src/commonMain ]; then
|
||||||
|
echo "OK: shared/src/commonMain does not exist yet (pre-scaffold)."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
VIOLATIONS=$(grep -rn -E '^import[[:space:]]+(io\.ktor|androidx\.compose|org\.jetbrains\.compose|app\.cash\.sqldelight)' shared/src/commonMain/ 2>/dev/null || true)
|
||||||
|
if [ -n "$VIOLATIONS" ]; then
|
||||||
|
echo "ERROR: shared/commonMain has forbidden imports:" >&2
|
||||||
|
echo "$VIOLATIONS" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "OK: shared/commonMain is pure."
|
||||||
Reference in New Issue
Block a user