feat: onboard service desk as second CASAN project

This commit is contained in:
thanhnv
2026-07-10 17:00:35 +09:00
parent 040af64191
commit f8215cd2eb
20 changed files with 208 additions and 13 deletions
@@ -21,7 +21,7 @@
"domain_root": "apps/demo-sdlc/domain",
"harness_package": "fpt-casan-sdd-harness",
"harness_version": "1.0.0",
"status": "registered"
"status": "archived-demo"
},
{
"project_id": "CASAN_DEMO_PROJECT_B",
@@ -29,7 +29,15 @@
"domain_root": "apps/demo-qa/domain",
"harness_package": "fpt-casan-sdd-harness",
"harness_version": "1.0.0",
"status": "registered"
"status": "archived-demo"
},
{
"project_id": "CASAN_SERVICE_DESK",
"domain": "IT Service Desk",
"domain_root": "apps/service-desk/domain",
"harness_package": "fpt-casan-sdd-harness",
"harness_version": "1.0.0",
"status": "active"
}
]
}
@@ -137,6 +137,7 @@ run "phase-sec24-supplychain" bash "$TESTS/phase-sec24-tests.sh"
run "phase-sec25-attestation" bash "$TESTS/phase-sec25-tests.sh"
run "phase-production-handoff" bash "$TESTS/phase-production-preflight-tests.sh"
run "phase-release-provenance" bash "$TESTS/phase-release-provenance-tests.sh"
run "phase-service-desk-onboard" bash "$TESTS/phase-service-desk-onboard-tests.sh"
# Plan-17 loop engineering (Agentic Loop Governance) — each primitive fail-closed.
run "phase-loop-governor" bash "$TESTS/phase-loop-governor-tests.sh"
@@ -11,6 +11,7 @@ PACKAGE="$CASAN_HARNESS_ROOT/level5/harness-package.json"
python - "$REGISTRY" "$PACKAGE" <<'PY'
import json
import os
import sys
registry = json.load(open(sys.argv[1], encoding="utf-8"))
package = json.load(open(sys.argv[2], encoding="utf-8"))
@@ -18,9 +19,22 @@ name = package["package"]
version = package["version"]
projects = [
p for p in registry["projects"]
if p.get("harness_package") == name and p.get("harness_version") == version
if p.get("status") == "active"
and p.get("harness_package") == name and p.get("harness_version") == version
]
if len(projects) < 2:
raise SystemExit(f"HARNESS_REUSE_INSUFFICIENT package={name} version={version} count={len(projects)}")
print(f"HARNESS_REUSE_VALID package={name} version={version} project_count={len(projects)}")
roots = set()
required = ("domain-pack.yaml", "input", "golden-runs", "corpus", "traceability-map.json")
hub = os.path.abspath(os.path.join(os.path.dirname(registry_path := sys.argv[1]), "..", "..", ".."))
for project in projects:
root = project.get("domain_root", "")
if not root or root in roots:
raise SystemExit(f"HARNESS_REUSE_INVALID_DOMAIN_ROOT project={project.get('project_id')} root={root}")
roots.add(root)
full = os.path.join(hub, root)
missing = [entry for entry in required if not os.path.exists(os.path.join(full, entry))]
if missing:
raise SystemExit(f"HARNESS_REUSE_DOMAIN_INCOMPLETE project={project.get('project_id')} missing={','.join(missing)}")
print(f"HARNESS_REUSE_VALID package={name} version={version} project_count={len(projects)} active_projects={','.join(p['project_id'] for p in projects)}")
PY
@@ -0,0 +1,19 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../scripts/bash/casan-paths.sh"
ROOT="$CASAN_APP_ROOT"; S="$CASAN_HARNESS_ROOT/scripts/bash"; DOMAIN="$ROOT/apps/service-desk/domain"
W="$(mktemp -d)"; trap 'rm -rf "$W"' EXIT
PASS=0; FAIL=0
pass() { echo "PASS: $1"; PASS=$((PASS+1)); }
fail() { echo "FAIL: $1"; FAIL=$((FAIL+1)); }
node --test "$ROOT/apps/service-desk/test/ticket.test.mjs" >/dev/null && pass "Service Desk domain tests pass" || fail "Service Desk domain tests fail"
python3 "$S/traceability-matrix.py" --requirements "$DOMAIN/input/service-desk-requirement.md" --map "$DOMAIN/traceability-map.json" --out "$W/trace.json" --gate >/dev/null \
&& python3 - "$W/trace.json" <<'PY' && pass "four Service Desk requirements have code and test evidence" || fail "Service Desk traceability fails"
import json, sys
d=json.load(open(sys.argv[1])); assert d['summary']['requirements']==4 and d['summary']['failed']==0
PY
bash "$S/verify-harness-reuse.sh" | grep -q 'HARNESS_REUSE_VALID.*project_count=2.*CASAN_SERVICE_DESK' \
&& pass "two active independent domain packs prove reuse" || fail "reuse registry not valid"
echo "===== SERVICE DESK ONBOARD SUMMARY: PASS=$PASS FAIL=$FAIL ====="
[[ "$FAIL" -eq 0 ]]