feat: onboard service desk as second CASAN project
This commit is contained in:
@@ -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 ]]
|
||||
Reference in New Issue
Block a user