#!/usr/bin/env bash set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" cd "$ROOT" ask() { local prompt="$1"; local def="${2:-}"; local val if [ -n "$def" ]; then read -r -p "$prompt [$def]: " val || true echo "${val:-$def}" else read -r -p "$prompt: " val || true echo "$val" fi } echo "=== ARNES start wizard ===" echo "Mode: use this template in a new repo or copy core ARNES into an existing repo." if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then echo "No git repo detected. Initializing local git repository..." git init >/dev/null fi PROJECT_NAME="$(ask 'Project name' 'my-project')" PROJECT_DESC="$(ask 'Project description' 'Project using ARNES template')" APP_DIR="$(ask 'App directory (relative)' 'project')" STACK_CHOICE="$(ask 'Stack preset (1=default Flask+MariaDB+Skeleton, 2=custom)' '1')" if [ "$STACK_CHOICE" = "2" ]; then BACKEND="$(ask 'Backend stack' 'python/flask')" DB="$(ask 'Database' 'mariadb')" CSSFW="$(ask 'CSS framework' 'skeleton')" else BACKEND="python/flask" DB="mariadb" CSSFW="skeleton" fi DEFAULT_TEST_CMD="echo TODO-set-test-command" if [ "$BACKEND" = "python/flask" ]; then DEFAULT_TEST_CMD="python3 -m unittest discover -s $APP_DIR/tests -v" fi TEST_CMD="$(ask 'Test command' "$DEFAULT_TEST_CMD")" LINT_CMD="$(ask 'Lint command (optional)' '')" MODEL_MODE="$(ask 'Model mode (lean/balanced/power)' 'lean')" ADD_BOOTSTRAP="$(ask 'Create bootstrap ticket F-001 now? (y/n)' 'y')" mkdir -p "$APP_DIR" [ -f "$APP_DIR/README.md" ] || cat > "$APP_DIR/README.md" < "$APP_DIR/tests/test_bootstrap.py" <<'PY' import unittest class BootstrapSmokeTest(unittest.TestCase): def test_bootstrap(self): self.assertTrue(True) if __name__ == '__main__': unittest.main() PY fi if [ "$CSSFW" = "skeleton" ]; then mkdir -p "$APP_DIR/static/css" "$APP_DIR/static/images" [ -f "$APP_DIR/static/css/normalize.css" ] || cp defaults/flask-skeleton/static/css/normalize.css "$APP_DIR/static/css/normalize.css" [ -f "$APP_DIR/static/css/skeleton.css" ] || cp defaults/flask-skeleton/static/css/skeleton.css "$APP_DIR/static/css/skeleton.css" [ -f "$APP_DIR/static/images/favicon.png" ] || cp defaults/flask-skeleton/static/images/favicon.png "$APP_DIR/static/images/favicon.png" fi cat > harness/project.config.json < scripts/verify.local.sh <<'SH' #!/usr/bin/env bash set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" cd "$ROOT" if [ ! -f "harness/project.config.json" ]; then echo "[LOCAL] missing harness/project.config.json" exit 1 fi APP_DIR=$(python3 - <<'PY' import json from pathlib import Path cfg=json.loads(Path('harness/project.config.json').read_text()) print(cfg.get('app_dir','project')) PY ) TEST_CMD=$(python3 - <<'PY' import json from pathlib import Path cfg=json.loads(Path('harness/project.config.json').read_text()) print(cfg.get('commands',{}).get('test','')) PY ) LINT_CMD=$(python3 - <<'PY' import json from pathlib import Path cfg=json.loads(Path('harness/project.config.json').read_text()) print(cfg.get('commands',{}).get('lint','')) PY ) if [ ! -d "$APP_DIR" ]; then echo "[LOCAL] app dir not found: $APP_DIR" exit 1 fi echo "[LOCAL] app dir OK: $APP_DIR" if [ -n "$LINT_CMD" ]; then echo "[LOCAL] lint: $LINT_CMD" bash -lc "$LINT_CMD" fi if [ -n "$TEST_CMD" ]; then echo "[LOCAL] test: $TEST_CMD" bash -lc "$TEST_CMD" fi echo "[LOCAL] OK" SH chmod +x scripts/verify.local.sh python3 - < work/current.md </dev/null || true echo "" echo "Done. Project configured." echo "- Config: harness/project.config.json" echo "- Local checks: scripts/verify.local.sh" echo "- Ticket tool: python3 scripts/new_ticket.py" echo "- Publish tool: python3 scripts/publish_ticket.py --feature-id F-001" echo "- Verify: ./scripts/verify.sh" echo "- Runtime: python3 scripts/agent_status.py show" echo "- Reminder: configure git remote before final publish if missing"