optimize docs

This commit is contained in:
thanhnv
2026-07-23 23:30:43 +07:00
parent a6c3a5d02f
commit 2ca1eabca9
7 changed files with 390 additions and 201 deletions
@@ -164,13 +164,71 @@ LVL=$( ( cd "$L2" && "$DKC" level show ) | python3 -c 'import json,sys;print(jso
[ "$LVL" = "2" ] && pass "casan level show reports project target level" || fail "level show wrong ($LVL)"
echo "===== ⑨ SAFETY: init refuses to adopt a CASAN source hub into itself ====="
HUB="$WORK/fakehub"; mkdir -p "$HUB/packages/casan-harness/scripts/bash"
HUB="$WORK/fakehub"
mkdir -p "$HUB/packages/casan-harness/scripts/bash" \
"$HUB/packages/casan-devkit" "$HUB/packaging"
echo '#casan' > "$HUB/packages/casan-harness/scripts/bash/casan-harness.sh"
echo '#devkit' > "$HUB/packages/casan-devkit/casan-init.py"
echo '{}' > "$HUB/packaging/levels.json"
echo '#!/bin/sh' > "$HUB/install.sh"
GRC=0; ( cd "$HUB" && "$DKC" init --project hub >/dev/null 2>"$WORK/hub.err" ) || GRC=$?
[ "$GRC" -eq 65 ] && pass "init refuses a source hub (rc=65)" || fail "source-hub not refused (rc=$GRC)"
[ ! -f "$HUB/.claude/settings.json" ] && pass "no hooks written into the refused hub" || fail "hooks written into source hub"
( cd "$HUB" && "$DKC" init --project hub --force >/dev/null 2>&1 ) && pass "--force overrides the source-hub guard" || fail "--force did not override guard"
echo "===== ⑨b MIGRATION: existing vendored project shell is preserved ====="
LEGACY="$WORK/legacy-vendored"
mkdir -p "$LEGACY/packages/casan-harness/scripts/bash" \
"$LEGACY/.claude/commands/bd" "$LEGACY/.github/skills/domain" \
"$LEGACY/.gitea/workflows" "$LEGACY/.casan"
echo '#legacy harness' > "$LEGACY/packages/casan-harness/scripts/bash/casan-harness.sh"
echo 'existing command' > "$LEGACY/.claude/commands/bd/generate.md"
echo 'existing skill' > "$LEGACY/.github/skills/domain/SKILL.md"
echo 'existing workflow' > "$LEGACY/.gitea/workflows/existing.yml"
cat > "$LEGACY/AGENTS.md" <<'EOF'
Project-owned instructions.
<!-- CASAN_PROMPT_ENFORCEMENT_START -->
## CASAN prompt enforcement — mandatory
- The supported prompt boundary is `bin/casan-chat`.
<!-- CASAN_PROMPT_ENFORCEMENT_END -->
EOF
cat > "$LEGACY/.casan/prompt-policy.json" <<'EOF'
{"schema_version":1,"mode":"enforced","project_id":"legacy-vendored","domain_root":"apps/legacy-vendored/domain","direct_external_ui":"not_interceptable_not_certified"}
EOF
chmod 0555 "$LEGACY/.claude"
( cd "$LEGACY" && "$DKC" init --project legacy-vendored --client claude,codex >/dev/null 2>&1 ) \
&& pass "vendored application migrates without unsafe --force" \
|| fail "vendored application was mistaken for a source hub"
[ -f "$LEGACY/.claude/commands/bd/generate.md" ] \
&& [ -f "$LEGACY/.github/skills/domain/SKILL.md" ] \
&& [ -f "$LEGACY/.gitea/workflows/existing.yml" ] \
&& pass "existing commands, GitHub skills, and CI are preserved" \
|| fail "existing project shell content was changed"
grep -q 'CASAN IDE governance' "$LEGACY/AGENTS.md" \
&& grep -q 'Project-owned instructions.' "$LEGACY/AGENTS.md" \
&& pass "only the CASAN-managed legacy instruction block is migrated" \
|| fail "managed prompt-boundary migration was not precise"
python3 - "$LEGACY/.casan/prompt-policy.json" <<'PY' \
&& pass "legacy prompt policy records hybrid client-dependent routing" \
|| fail "legacy prompt policy was not migrated"
import json,sys
d=json.load(open(sys.argv[1]))
assert d["direct_external_ui"] == "client_dependent_see_config"
assert d["agentic_clients"] == ["claude","codex"]
assert d["hybrid_adoption"] is True
PY
[ -f "$LEGACY/packages/casan-harness/scripts/bash/casan-harness.sh" ] \
&& pass "vendored harness is retained for compatibility, not deleted" \
|| fail "migration deleted the existing vendored harness"
python3 - "$LEGACY/.claude" <<'PY' \
&& pass "owner-controlled read-only config directory mode is restored" \
|| fail "migration did not restore the original directory permissions"
import os,stat,sys
assert stat.S_IMODE(os.stat(sys.argv[1]).st_mode) == 0o555
PY
# Restore fixture writability so the suite's temporary-directory cleanup works.
chmod 0755 "$LEGACY/.claude"
echo "===== ⑩ VS Code/Copilot @casan packaging + install + doctor ====="
FAKE_BIN="$WORK/fake-bin"; mkdir -p "$FAKE_BIN"
cat > "$FAKE_BIN/code" <<'EOF'