SPEC v0.1 and project rules for Kvitt
Write SPEC.md v0.1 from the owner interview (requirements, data model, stack, API outline, security, business rules, deployment, milestones, UX sprint brief, contracts). Fill the CLAUDE.md blanks, move the Gradle pin files into android/, point the tools at android/ and server/, and record the git bootstrap exception in the handoff. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+23
-16
@@ -1,10 +1,12 @@
|
||||
#!/bin/sh
|
||||
# Kvitt pre-commit hook: the fast subset of `./gradlew check`. Installed by tools/install-git-hooks.sh.
|
||||
# Kvitt pre-commit hook: the fast subset of both gates. Installed by tools/install-git-hooks.sh.
|
||||
# Each check runs only when its project exists, so the hook works on branches before android/ or server/ exist.
|
||||
set -e
|
||||
top=$(git rev-parse --show-toplevel)
|
||||
|
||||
# Secrets and personal data never reach git. Adjust the list to this project (see CLAUDE.md › Never commit).
|
||||
bad=$(git -C "$top" ls-files --cached -- local.properties '*.jks' '*.keystore' '*.p12' '*.aar' 'models/' 'export/' | head -5)
|
||||
# Secrets and personal data never reach git (CLAUDE.md › Never commit).
|
||||
bad=$(git -C "$top" ls-files --cached -- '*local.properties' '*.jks' '*.keystore' '*.p12' '*.aar' 'models/' 'export/' \
|
||||
'*service-account*.json' '*google-services.json' '*.pem' '*.sqlite' '*.db' 'infra/secrets/' | head -5)
|
||||
if [ -n "$bad" ]; then
|
||||
echo "pre-commit: a secret, keystore, vendor binary or personal-data file is staged or tracked:" >&2
|
||||
echo "$bad" >&2
|
||||
@@ -12,17 +14,22 @@ if [ -n "$bad" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
[ -x "$top/gradlew" ] || exit 0
|
||||
# Android: the pure model tests, on the pinned JDK (android/gradle.properties); the shell's java may be a stub.
|
||||
if [ -x "$top/android/gradlew" ] && [ -d "$top/android/core/model" ]; then
|
||||
case "$("${JAVA_HOME:+$JAVA_HOME/bin/}java" -version 2>&1 | head -1)" in
|
||||
*\"25*) ;;
|
||||
*) [ -d /opt/homebrew/opt/openjdk@25 ] && export JAVA_HOME=/opt/homebrew/opt/openjdk@25/libexec/openjdk.jdk/Contents/Home ;;
|
||||
esac
|
||||
(cd "$top/android" && ./gradlew --quiet :core:model:test) || {
|
||||
echo "pre-commit: Android fast tests failed (see above). Run tools/gradle-serial.sh check for the full picture." >&2
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
|
||||
# The build runs on the pinned JDK (gradle.properties); the shell's default java may be newer or a macOS stub.
|
||||
case "$("${JAVA_HOME:+$JAVA_HOME/bin/}java" -version 2>&1 | head -1)" in
|
||||
*\"25*) ;;
|
||||
*) [ -d /opt/homebrew/opt/openjdk@25 ] && export JAVA_HOME=/opt/homebrew/opt/openjdk@25/libexec/openjdk.jdk/Contents/Home ;;
|
||||
esac
|
||||
|
||||
cd "$top"
|
||||
# Replace with this project's fast checks (architecture rules, the pure-module tests). Keep it under a minute.
|
||||
./gradlew --quiet :core:model:test || {
|
||||
echo "pre-commit: fast tests failed (see above). Run ./gradlew check for the full picture." >&2
|
||||
exit 1
|
||||
}
|
||||
# Server: the pure domain crate tests.
|
||||
if [ -f "$top/server/Cargo.toml" ] && [ -d "$top/server/crates/kvitt-domain" ] && command -v cargo >/dev/null 2>&1; then
|
||||
(cd "$top/server" && cargo test --quiet -p kvitt-domain) || {
|
||||
echo "pre-commit: kvitt-domain tests failed (see above). Run the server gate for the full picture." >&2
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user