03edd82d53
The W6 'unset NOVA_GITEA_TOKEN' line in scripts/run_platform.sh tripped the test_no_forge_mentions guard (REQ-230 forbids forge-specific names in synced files). Renamed to NOVA_FORGE_TOKEN (forge-agnostic); .env.secrets adds NOVA_FORGE_TOKEN as an alias; config.json scopes now map forge + gitea -> NOVA_FORGE_TOKEN. scripts/rotate_spike_key.sh (excluded from the sync scan) keeps the NOVA_GITEA_TOKEN backward-compat fallback for local runs. Full suite green (844 passed). ---ci--- project: acdl phase: 3 milestone: v1.26 status: execute wave: W6 ---
224 lines
6.7 KiB
JSON
224 lines
6.7 KiB
JSON
{
|
|
"projects": [
|
|
{
|
|
"slug": "acdl",
|
|
"name": "Nova — The New Dawn of DevSecOps",
|
|
"default": true
|
|
},
|
|
{
|
|
"slug": "nova-blockchain-exchange",
|
|
"name": "Nova Pilot Consumer — Blockchain Stock Exchange",
|
|
"default": false
|
|
}
|
|
],
|
|
"active_project": "acdl",
|
|
"active_projects": ["acdl", "nova-blockchain-exchange"],
|
|
"active_milestone": "v1.26",
|
|
"autonomy": {
|
|
"level": "full",
|
|
"escalation_hooks": ["deploy", "delete_data", "merge_to_main"],
|
|
"clarify_budget": 10,
|
|
"decision_confidence_threshold": 0.6,
|
|
"max_revision_iterations": 3,
|
|
"max_verification_retries": 2,
|
|
"escalation_timeout_ms": 300000
|
|
},
|
|
"model_profile": "quality",
|
|
"parallelization": {
|
|
"enabled": true,
|
|
"max_concurrent_agents": 5,
|
|
"min_plans_for_parallel": 2,
|
|
"max_concurrent_projects": 3
|
|
},
|
|
"verification": {
|
|
"automated_only": true,
|
|
"escalate_visual": true,
|
|
"escalate_external_integration": true,
|
|
"test_first": false
|
|
},
|
|
"security": {
|
|
"auto_accept_low_severity": true,
|
|
"auto_mitigate_medium_severity": true,
|
|
"escalate_high_severity": true,
|
|
"bash_allowlist": {
|
|
"allowed_commands": [
|
|
"git", "ls", "cat", "head", "tail", "wc",
|
|
"echo", "mkdir", "cp", "mv", "rm", "touch",
|
|
"pwd", "which", "env", "printenv",
|
|
"python3", "pytest", "pip",
|
|
"terraform", "checkov",
|
|
"curl", "wget",
|
|
"docker", "docker-compose"
|
|
],
|
|
"max_output_bytes": 1048576,
|
|
"timeout_ms": 30000,
|
|
"blocked_env_vars": [
|
|
"HOME", "PATH", "USER", "SHELL",
|
|
"AWS_*", "*_TOKEN", "*_KEY", "*_SECRET",
|
|
"*_PASSWORD", "*_CREDENTIAL",
|
|
"GITHUB_TOKEN", "GITHUB_API_KEY",
|
|
"OPENAI_API_KEY", "ANTHROPIC_API_KEY",
|
|
"OLLAMA_CLOUD_API_KEY"
|
|
]
|
|
}
|
|
},
|
|
"git": {
|
|
"branching_strategy": "flat",
|
|
"_branching_strategy_note": "Nova uses flat workflow (committed directly to main per established convention since v1.0; renamed ACDL→Nova in v1.15). The 'phase' strategy is advisory; CIAgent uses milestone/phase branches for v1.14 but the project convention is flat.",
|
|
"auto_commit": true,
|
|
"auto_push": true
|
|
},
|
|
"secrets": {
|
|
"sources": [".env", ".env.secrets", ".env.*"],
|
|
"disallow": ["shell_env", "netrc", "keychain", "rc_files", "global_config"],
|
|
"scopes": {
|
|
"forge": "NOVA_FORGE_TOKEN",
|
|
"gitea": "NOVA_FORGE_TOKEN",
|
|
"github": "GITHUB_TOKEN",
|
|
"gitlab": "GITLAB_TOKEN",
|
|
"openai": "OPENAI_API_KEY",
|
|
"anthropic": "ANTHROPIC_API_KEY",
|
|
"ollama_cloud": "OLLAMA_CLOUD_API_KEY"
|
|
}
|
|
},
|
|
"release": {
|
|
"forge": "gitea",
|
|
"gitea": {
|
|
"base_url": "https://git.cloudinit.dev",
|
|
"owner": "continuous-intelligence",
|
|
"repo": "acdl",
|
|
"token_scope": "gitea"
|
|
},
|
|
"github": {
|
|
"owner": "",
|
|
"repo": "",
|
|
"token_scope": "github"
|
|
},
|
|
"gitlab": {
|
|
"base_url": "",
|
|
"owner": "",
|
|
"repo": "",
|
|
"token_scope": "gitlab"
|
|
}
|
|
},
|
|
"ship": {
|
|
"per_phase": true,
|
|
"require_release": true,
|
|
"allow_skip": false,
|
|
"confirm_before_ship": false,
|
|
"max_release_retries": 3,
|
|
"release_blocking": false
|
|
},
|
|
"backend": {
|
|
"provider": "auto",
|
|
"agent_backends": {
|
|
"opencode": { "enabled": true },
|
|
"codex": { "enabled": true },
|
|
"claude-code": { "enabled": true },
|
|
"hermes": { "enabled": true }
|
|
},
|
|
"llm_backends": {
|
|
"openai": {
|
|
"base_url": "https://api.openai.com/v1",
|
|
"api_key_env": "OPENAI_API_KEY",
|
|
"model": "gpt-4o",
|
|
"model_profile": "quality",
|
|
"timeout_ms": 60000
|
|
},
|
|
"ollama-local": {
|
|
"base_url": "http://localhost:11434",
|
|
"model_profile": "balanced"
|
|
},
|
|
"ollama-cloud": {
|
|
"base_url": "",
|
|
"_base_url_note": "Intentionally unset. The runtime uses the glm-5.2 model via the opencode backend (not the llm_backends config). This entry is for reference only.",
|
|
"api_key_env": "OLLAMA_CLOUD_API_KEY",
|
|
"model_profile": "quality",
|
|
"timeout_ms": 60000
|
|
},
|
|
"anthropic": {
|
|
"base_url": "https://api.anthropic.com",
|
|
"api_key_env": "ANTHROPIC_API_KEY",
|
|
"model": "claude-sonnet-4-20250514",
|
|
"api_version": "2023-06-01",
|
|
"model_profile": "quality",
|
|
"timeout_ms": 60000
|
|
}
|
|
}
|
|
},
|
|
"ideation": {
|
|
"enabled": true,
|
|
"categories": ["security", "quality", "architecture", "coverage", "improvement"],
|
|
"confidence_threshold": 0.6,
|
|
"max_ideas": 20,
|
|
"external_signals": {
|
|
"npm_audit": true,
|
|
"osv_advisories": true,
|
|
"dependency_staleness": true
|
|
},
|
|
"cross_project": {
|
|
"enabled": false,
|
|
"similarity_weight": 0.5
|
|
},
|
|
"chaos": {
|
|
"enabled": true,
|
|
"scenarios": ["backend_unavailable", "requirement_change", "test_coverage_drop"]
|
|
}
|
|
},
|
|
"sessions": {
|
|
"max_concurrent_sessions": 3,
|
|
"session_timeout_ms": 3600000,
|
|
"session_isolation": "branch"
|
|
},
|
|
"personas": {
|
|
"enabled": true,
|
|
"territory_enforcement": "warn",
|
|
"personas": [
|
|
{
|
|
"name": "lead-developer",
|
|
"domain": "coordination",
|
|
"frameworks": [],
|
|
"constraints": ["pragmatic", "battle-tested defaults"],
|
|
"territory": []
|
|
},
|
|
{
|
|
"name": "data-engineer",
|
|
"domain": "data",
|
|
"frameworks": ["drizzle", "postgresql"],
|
|
"constraints": ["schema-first", "type-safe ORM", "migration-driven"],
|
|
"territory": ["**/migrations/**", "**/schema/**", "**/models/**", "**/db/**", "prisma/schema.prisma", "drizzle/**", "**/*.sql"]
|
|
},
|
|
{
|
|
"name": "backend-engineer",
|
|
"domain": "backend",
|
|
"frameworks": ["fastify", "hono"],
|
|
"constraints": ["api-first", "strict-typing", "dependency-injection"],
|
|
"territory": ["**/api/**", "**/routes/**", "**/services/**", "**/middleware/**", "**/controllers/**", "**/auth/**"]
|
|
},
|
|
{
|
|
"name": "frontend-engineer",
|
|
"domain": "frontend",
|
|
"active": false,
|
|
"frameworks": ["react", "next.js"],
|
|
"constraints": ["component-first", "server-components", "minimal-client-js"],
|
|
"territory": ["**/components/**", "**/pages/**", "**/hooks/**", "**/styles/**", "**/*.tsx", "**/*.css", "**/*.vue"],
|
|
"reason": "ACDL has no frontend (no package.json); decks are markdown (lead-developer territory). Deactivated per PERSONAS.md:80."
|
|
}
|
|
]
|
|
},
|
|
"logging": {
|
|
"level": "info",
|
|
"format": "json",
|
|
"file": ".ciagent/logs/ciagent.jsonl"
|
|
},
|
|
"telemetry": {
|
|
"enabled": true,
|
|
"persist": true
|
|
},
|
|
"strategic_direction_file": ".ciagent/NORTH_STAR.md",
|
|
"policy": {
|
|
"engine": "kyverno-json",
|
|
"policy_root": "adapters/kyverno-json/policies"
|
|
}
|
|
}
|