refactor(structure): promote app to repo root + remove redundant workspace cruft
Standard production layout: the OKR app (was nested under AINative_OKR_CASAN5/) is now
the repository root. No more wrapper directory.
- Promote AINative_OKR_CASAN5/* -> repo root (backend/ frontend/ packages/ apps/
.specify/ docs/ infra/ nginx/ scripts/ + configs). Merge tool dirs: .gitea (kept the
active deploy ci.yml, added harness-ci.yml + runbooks), .claude (agents/commands +
launch.json), .github moved up.
- Remove redundant: 00_SUBMISSION_PACKAGE, scattered root notes (FPT_CASAN_Full.md,
tu-tuong-casan.md, casan-tu-sinh..., casan_harness_assessment.md, source-review...,
README_CASAN5_REFINED.md), casan-next-plans/ and optimize-docs/ (competition/planning
artifacts — roadmap + design history preserved in git log / commit messages).
- Update all references to the old layout:
- .gitea/workflows/{ci,harness-ci}.yml, .github/workflows/{ci,deploy}.yml:
working-directory .; drop AINative_OKR_CASAN5/ prefix; .specify/{tests,scripts}
-> packages/casan-harness/... (.specify/logs state kept)
- .claude/launch.json, .gitea/*-runbook.md: path prefixes
- CLAUDE.md, README.md: docs/input -> apps/okr/domain/input
- policy-bundle.yaml: 8 policy paths -> packages/casan-harness/...; manifest re-signed
- secrets-scan.sh: fixture excludes -> new package/domain paths.
Full gate from the new root: PASS=64 FAIL=0 SKIP=3.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
7101af9fd4
commit
36a4812ef3
@@ -0,0 +1,20 @@
|
||||
version: 1.0
|
||||
description: CASAN Level 5 drift detection policy
|
||||
|
||||
golden_dir: apps/okr/domain/golden-runs
|
||||
evidence_dir: docs/output/casan/level5-evidence
|
||||
|
||||
thresholds:
|
||||
minimum_similarity: 0.85
|
||||
maximum_length_delta_ratio: 0.30
|
||||
|
||||
actions:
|
||||
pass: allow
|
||||
warn: require_review
|
||||
fail: block_or_fallback
|
||||
|
||||
metrics:
|
||||
- similarity_ratio
|
||||
- length_delta_ratio
|
||||
- golden_hash
|
||||
- candidate_hash
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"package": "fpt-casan-sdd-harness",
|
||||
"version": "1.0.0",
|
||||
"capabilities": [
|
||||
"H4-security",
|
||||
"H5-governance",
|
||||
"H6-agentops",
|
||||
"L5-drift-detection",
|
||||
"L5-model-fallback",
|
||||
"L5-tool-registry",
|
||||
"L5-rollback",
|
||||
"L5-business-feedback"
|
||||
],
|
||||
"compatibility": {
|
||||
"speckit": ">=1.0.0",
|
||||
"shell": "bash",
|
||||
"python": ">=3.9"
|
||||
},
|
||||
"entrypoints": {
|
||||
"wrapper": "packages/casan-harness/scripts/bash/casan-harness.sh",
|
||||
"test": "packages/casan-harness/tests/run-casan4-harness-tests.sh",
|
||||
"dashboard": "docs/output/casan/agentops-dashboard.html"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
version: 1.0
|
||||
description: CASAN Level 5 business KPI feedback schema
|
||||
|
||||
kpis:
|
||||
- id: cycle_time_minutes
|
||||
direction: lower_is_better
|
||||
baseline: 180
|
||||
target: 90
|
||||
|
||||
- id: review_rejection_rate
|
||||
direction: lower_is_better
|
||||
baseline: 0.30
|
||||
target: 0.10
|
||||
|
||||
- id: defect_leakage_rate
|
||||
direction: lower_is_better
|
||||
baseline: 0.15
|
||||
target: 0.05
|
||||
|
||||
- id: manual_rework_hours
|
||||
direction: lower_is_better
|
||||
baseline: 12
|
||||
target: 4
|
||||
|
||||
evidence:
|
||||
input: docs/output/casan/level5-evidence/business-kpi-input.json
|
||||
output: docs/output/casan/level5-evidence/business-kpi-report.json
|
||||
@@ -0,0 +1,33 @@
|
||||
version: 1.0
|
||||
description: CASAN Level 5 model/tool fallback policy
|
||||
|
||||
routes:
|
||||
- step_pattern: "review|test|security"
|
||||
primary: primary-model
|
||||
fallback: verifier-model
|
||||
max_attempts: 2
|
||||
fallback_on:
|
||||
- nonzero_exit
|
||||
- empty_output
|
||||
- timeout
|
||||
|
||||
- step_pattern: "implement|write_code|deploy"
|
||||
primary: primary-model
|
||||
fallback: conservative-model
|
||||
max_attempts: 1
|
||||
fallback_on:
|
||||
- nonzero_exit
|
||||
- policy_reject
|
||||
governance_required: true
|
||||
|
||||
default_route:
|
||||
primary: primary-model
|
||||
fallback: fallback-model
|
||||
max_attempts: 2
|
||||
fallback_on:
|
||||
- nonzero_exit
|
||||
- empty_output
|
||||
|
||||
evidence:
|
||||
trace_dir: .specify/logs/trace
|
||||
fallback_log: .specify/logs/level5/fallback.jsonl
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"registry": "fpt-casan-harness-adoption",
|
||||
"layout": {
|
||||
"note": "Plan-01 restructure: reusable harness is a standalone package; each project keeps its domain data separate. A new project (Plan-06) registers here with its own domain_root.",
|
||||
"harness_root": "packages/casan-harness",
|
||||
"state_root": ".specify",
|
||||
"governance_root": ".specify/level5/central-governance"
|
||||
},
|
||||
"projects": [
|
||||
{
|
||||
"project_id": "AINative_OKR_CASAN4",
|
||||
"domain": "SDD OKR",
|
||||
"domain_root": "apps/okr/domain",
|
||||
"harness_package": "fpt-casan-sdd-harness",
|
||||
"harness_version": "1.0.0",
|
||||
"status": "active"
|
||||
},
|
||||
{
|
||||
"project_id": "CASAN_DEMO_PROJECT_A",
|
||||
"domain": "Demo SDLC",
|
||||
"domain_root": "apps/demo-sdlc/domain",
|
||||
"harness_package": "fpt-casan-sdd-harness",
|
||||
"harness_version": "1.0.0",
|
||||
"status": "registered"
|
||||
},
|
||||
{
|
||||
"project_id": "CASAN_DEMO_PROJECT_B",
|
||||
"domain": "Demo QA",
|
||||
"domain_root": "apps/demo-qa/domain",
|
||||
"harness_package": "fpt-casan-sdd-harness",
|
||||
"harness_version": "1.0.0",
|
||||
"status": "registered"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"provider": "sample-provider",
|
||||
"model": "sample-model-large",
|
||||
"run_id": "provider-run-001",
|
||||
"step": "speckit.implement",
|
||||
"input_tokens": 1842,
|
||||
"output_tokens": 936,
|
||||
"total_tokens": 2778,
|
||||
"cost_usd": 0.08334,
|
||||
"latency_ms": 4210,
|
||||
"status": "success"
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
version: 1.0
|
||||
description: CASAN Level 5 tool registry with ownership, schema, risk, idempotency, and rollback metadata
|
||||
|
||||
tools:
|
||||
- id: agent_step
|
||||
owner: ai-platform
|
||||
risk_level: low
|
||||
side_effect: false
|
||||
idempotency_required: false
|
||||
timeout_seconds: 600
|
||||
|
||||
- id: write_code
|
||||
owner: engineering
|
||||
risk_level: high
|
||||
side_effect: true
|
||||
idempotency_required: true
|
||||
timeout_seconds: 900
|
||||
allowed_agents: "boss,implement-agent"
|
||||
rollback:
|
||||
strategy: git_patch_reverse
|
||||
script: packages/casan-harness/scripts/bash/rollback-manager.sh
|
||||
|
||||
- id: migration
|
||||
owner: database-owner
|
||||
risk_level: high
|
||||
side_effect: true
|
||||
idempotency_required: true
|
||||
timeout_seconds: 900
|
||||
allowed_agents: "boss,implement-agent"
|
||||
rollback:
|
||||
strategy: migration_down_or_restore
|
||||
script: packages/casan-harness/scripts/bash/rollback-manager.sh
|
||||
|
||||
- id: deploy
|
||||
owner: release-manager
|
||||
risk_level: high
|
||||
side_effect: true
|
||||
idempotency_required: true
|
||||
timeout_seconds: 1200
|
||||
rate_limit_per_run: 2
|
||||
allowed_agents: "boss,release-manager"
|
||||
rollback:
|
||||
strategy: previous_release
|
||||
script: packages/casan-harness/scripts/bash/rollback-manager.sh
|
||||
|
||||
- id: external_api
|
||||
owner: platform-team
|
||||
risk_level: medium
|
||||
side_effect: true
|
||||
idempotency_required: true
|
||||
timeout_seconds: 120
|
||||
allowed_agents: "boss,implement-agent"
|
||||
rollback:
|
||||
strategy: compensating_request
|
||||
script: packages/casan-harness/scripts/bash/rollback-manager.sh
|
||||
|
||||
- id: db_write
|
||||
owner: database-owner
|
||||
risk_level: high
|
||||
side_effect: true
|
||||
idempotency_required: true
|
||||
timeout_seconds: 300
|
||||
allowed_agents: "boss,implement-agent"
|
||||
rollback:
|
||||
strategy: restore_from_backup
|
||||
script: packages/casan-harness/scripts/powershell/rollback-manager.ps1
|
||||
|
||||
- id: write_file
|
||||
owner: engineering
|
||||
risk_level: medium
|
||||
side_effect: true
|
||||
idempotency_required: false
|
||||
timeout_seconds: 60
|
||||
allowed_agents: "boss,implement-agent,design-agent"
|
||||
rollback:
|
||||
strategy: delete_or_restore
|
||||
script: packages/casan-harness/scripts/bash/rollback-manager.sh
|
||||
|
||||
level5_gate:
|
||||
required_fields:
|
||||
- id
|
||||
- owner
|
||||
- risk_level
|
||||
- side_effect
|
||||
- idempotency_required
|
||||
- timeout_seconds
|
||||
side_effecting_tools_require:
|
||||
- idempotency_key
|
||||
- audit_record
|
||||
- rollback_strategy
|
||||
Reference in New Issue
Block a user