@agentikos/omega-os 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +127 -0
- package/bin/omega-os.js +48 -0
- package/bootstrap/lib/common.sh +73 -0
- package/bootstrap/lib/steps.sh +153 -0
- package/bootstrap/manifest.example.yaml +45 -0
- package/docs/ACCOUNT-AND-BILLING.md +95 -0
- package/docs/ARCHITECTURE.md +225 -0
- package/docs/AUTONOMOUS-AGENTS.md +128 -0
- package/docs/ENGINE-SPEC.md +174 -0
- package/docs/INSTALL.md +106 -0
- package/docs/MCP-AND-PLUGINS.md +121 -0
- package/docs/RUNTIME-PLAN.md +63 -0
- package/install.sh +54 -0
- package/omega/Agentik_Coding/README.md +21 -0
- package/omega/Agentik_Engine/README.md +58 -0
- package/omega/Agentik_Engine/omega_engine/__init__.py +58 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/__init__.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/audit.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/audit_arsenal.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/barrier.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/bus.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/cli.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/events.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/executor.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/mission.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/progress.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/project.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/provider.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/reducer.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/report.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/router.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/store.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/supervisor.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/task.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/telegram.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/audit.py +96 -0
- package/omega/Agentik_Engine/omega_engine/audit_arsenal.py +314 -0
- package/omega/Agentik_Engine/omega_engine/barrier.py +45 -0
- package/omega/Agentik_Engine/omega_engine/bus.py +45 -0
- package/omega/Agentik_Engine/omega_engine/cli.py +158 -0
- package/omega/Agentik_Engine/omega_engine/events.py +60 -0
- package/omega/Agentik_Engine/omega_engine/executor.py +167 -0
- package/omega/Agentik_Engine/omega_engine/mission.py +145 -0
- package/omega/Agentik_Engine/omega_engine/progress.py +75 -0
- package/omega/Agentik_Engine/omega_engine/project.py +92 -0
- package/omega/Agentik_Engine/omega_engine/provider.py +139 -0
- package/omega/Agentik_Engine/omega_engine/reducer.py +76 -0
- package/omega/Agentik_Engine/omega_engine/report.py +146 -0
- package/omega/Agentik_Engine/omega_engine/router.py +34 -0
- package/omega/Agentik_Engine/omega_engine/store.py +97 -0
- package/omega/Agentik_Engine/omega_engine/supervisor.py +69 -0
- package/omega/Agentik_Engine/omega_engine/task.py +91 -0
- package/omega/Agentik_Engine/omega_engine/telegram.py +115 -0
- package/omega/Agentik_Engine/pyproject.toml +31 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_audit_arsenal.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_executor.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_mission.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_progress.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_project.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_reducer.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_report.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/test_audit_arsenal.py +80 -0
- package/omega/Agentik_Engine/tests/test_executor.py +96 -0
- package/omega/Agentik_Engine/tests/test_mission.py +64 -0
- package/omega/Agentik_Engine/tests/test_progress.py +69 -0
- package/omega/Agentik_Engine/tests/test_project.py +61 -0
- package/omega/Agentik_Engine/tests/test_reducer.py +144 -0
- package/omega/Agentik_Engine/tests/test_report.py +88 -0
- package/omega/Agentik_Extra/README.md +37 -0
- package/omega/Agentik_Extra/etc/agentik.env.example +19 -0
- package/omega/Agentik_Extra/etc/structure.yaml +46 -0
- package/omega/Agentik_Orchestration/README.md +43 -0
- package/omega/Agentik_Orchestration/autonomous/README.md +29 -0
- package/omega/Agentik_Orchestration/autonomous/example-agents.yaml +85 -0
- package/omega/Agentik_Orchestration/educators/README.md +55 -0
- package/omega/Agentik_Orchestration/topologies/aisb-oracle-worker.yaml +42 -0
- package/omega/Agentik_Orchestration/verifier/audit-router.yaml +26 -0
- package/omega/Agentik_Providers/README.md +62 -0
- package/omega/Agentik_Providers/claude/accounts.example.yaml +28 -0
- package/omega/Agentik_Providers/registry.yaml +30 -0
- package/omega/Agentik_Runtime/README.md +30 -0
- package/omega/Agentik_SSOT/README.md +36 -0
- package/omega/Agentik_SSOT/VERSION +1 -0
- package/omega/Agentik_SSOT/audits/a11yaudit.yaml +69 -0
- package/omega/Agentik_SSOT/audits/apiaudit.yaml +71 -0
- package/omega/Agentik_SSOT/audits/automationaudit.yaml +77 -0
- package/omega/Agentik_SSOT/audits/codeaudit.yaml +63 -0
- package/omega/Agentik_SSOT/audits/copyaudit.yaml +68 -0
- package/omega/Agentik_SSOT/audits/dataaudit.yaml +76 -0
- package/omega/Agentik_SSOT/audits/debugaudit.yaml +75 -0
- package/omega/Agentik_SSOT/audits/dxaudit.yaml +78 -0
- package/omega/Agentik_SSOT/audits/featureaudit.yaml +73 -0
- package/omega/Agentik_SSOT/audits/flowaudit.yaml +72 -0
- package/omega/Agentik_SSOT/audits/logicaudit.yaml +75 -0
- package/omega/Agentik_SSOT/audits/motionaudit.yaml +67 -0
- package/omega/Agentik_SSOT/audits/perfaudit.yaml +71 -0
- package/omega/Agentik_SSOT/audits/refontaudit.yaml +77 -0
- package/omega/Agentik_SSOT/audits/retentionaudit.yaml +84 -0
- package/omega/Agentik_SSOT/audits/secaudit.yaml +73 -0
- package/omega/Agentik_SSOT/audits/seoaudit.yaml +75 -0
- package/omega/Agentik_SSOT/audits/uiuxaudit.yaml +61 -0
- package/omega/Agentik_SSOT/mcp/mcp-catalog.yaml +136 -0
- package/omega/Agentik_SSOT/rules/constitution.md +44 -0
- package/omega/Agentik_SSOT/schemas/event.schema.json +45 -0
- package/omega/Agentik_SSOT/schemas/task.schema.json +54 -0
- package/omega/Agentik_Tools/README.md +42 -0
- package/omega/Agentik_Tools/registry.json +15 -0
- package/package.json +43 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# apiaudit — OmegaOS Quality Arsenal definition.
|
|
2
|
+
# Compact + structured: the Gestalt-Popper shell lives in omega_engine.audit_arsenal;
|
|
3
|
+
# this file supplies only the domain — gather tools, phases, falsification rules.
|
|
4
|
+
|
|
5
|
+
id: apiaudit
|
|
6
|
+
domain: api
|
|
7
|
+
question: "Does the API work CORRECTLY, CONSISTENTLY and SAFELY for every caller?"
|
|
8
|
+
weight: 1.0
|
|
9
|
+
threshold: 85
|
|
10
|
+
|
|
11
|
+
applies_to:
|
|
12
|
+
roles: [worker]
|
|
13
|
+
changed: ["**/api/**", "**/routes/**", "**/resolvers/**", "**/handlers/**", "*.openapi.yaml", "openapi.yaml", "swagger.json", "schema.graphql", "convex/**"]
|
|
14
|
+
|
|
15
|
+
# GATHER — deterministic API/contract tools, run first, no LLM.
|
|
16
|
+
gather:
|
|
17
|
+
- name: openapi-validate
|
|
18
|
+
cmd: "npx --no-install @redocly/cli lint {path} --format json || npx --no-install swagger-cli validate {path} || true"
|
|
19
|
+
when: "openapi.yaml,*.openapi.yaml,swagger.json"
|
|
20
|
+
- name: spectral-lint
|
|
21
|
+
cmd: "npx --no-install spectral lint {path} -f json || true"
|
|
22
|
+
when: "openapi.yaml,*.openapi.yaml,swagger.json,schema.graphql"
|
|
23
|
+
- name: route-grep
|
|
24
|
+
cmd: "grep -rnE \"(app|router)\\.(get|post|put|patch|delete)|export (async )?function (GET|POST|PUT|PATCH|DELETE)|@(app\\.)?(route|get|post)\" {path} || true"
|
|
25
|
+
when: "*.ts,*.tsx,*.js,*.py,*.go"
|
|
26
|
+
- name: auth-import-scan
|
|
27
|
+
cmd: "grep -rnE \"(getAuth|auth\\(\\)|requireAuth|withAuth|verifyToken|ctx\\.auth|passport|clerkMiddleware)\" {path} || true"
|
|
28
|
+
when: "*.ts,*.tsx,*.js,*.py"
|
|
29
|
+
- name: tsc
|
|
30
|
+
cmd: "npx --no-install tsc --noEmit || true"
|
|
31
|
+
when: "*.ts,*.tsx"
|
|
32
|
+
|
|
33
|
+
# PHASES — the agentic falsification pass investigates each.
|
|
34
|
+
phases:
|
|
35
|
+
- id: endpoint-inventory
|
|
36
|
+
checks: "Enumerate every route with its HTTP method; classify public vs authenticated vs admin; flag debug/test routes live in prod, duplicate routes, and verbs-in-paths breaking REST nouns."
|
|
37
|
+
- id: hinge-authentication
|
|
38
|
+
checks: "HINGE — for EVERY endpoint verify auth is enforced BEFORE any data access; send no-token / expired / malformed / other-user's-token; any 200 with data instead of 401/403 is a critical breach. Catch routes accidentally public via missing middleware."
|
|
39
|
+
- id: hinge-authorization
|
|
40
|
+
checks: "HINGE — test every endpoint with every role; admin routes reject regular users, user routes reject guests; resource-level ownership enforced (no IDOR); no privilege escalation via body params; field-level authz on sensitive fields; no mass assignment."
|
|
41
|
+
- id: input-validation
|
|
42
|
+
checks: "Every parameter on every endpoint — type, boundary (min/max length, range, array size, nesting depth), format (email/url/uuid), enum whitelist; Content-Type matches body; injection chars (SQL, NoSQL $ops, ../, shell) rejected."
|
|
43
|
+
- id: contract-compliance
|
|
44
|
+
checks: "Response envelope identical across endpoints (data/errors/meta); ISO-8601 dates; consistent null-vs-missing handling; no breaking changes (field removal, type change, new required field); GraphQL depth/complexity limits, introspection off in prod."
|
|
45
|
+
- id: status-codes
|
|
46
|
+
checks: "Correct codes per outcome — 201+Location on create, 204 on delete, 400 validation, 401 unauthenticated, 403 unauthorised, 404 missing, 409 conflict, 422 semantic, 429 rate-limited; never 200 for errors, never 500 for client mistakes."
|
|
47
|
+
- id: error-format
|
|
48
|
+
checks: "Every error has status + machine-parseable code + message; validation errors list ALL invalid fields; no stack traces / DB errors / internal paths leaked; no user enumeration (same error for existing vs non-existing); Retry-After on 429."
|
|
49
|
+
- id: rate-limiting
|
|
50
|
+
checks: "Global per-IP/user limit plus per-endpoint limits on expensive and auth operations; X-RateLimit-* and Retry-After headers present; tiered fairness for authenticated/paid callers; limits not bypassable via header spoofing."
|
|
51
|
+
- id: pagination
|
|
52
|
+
checks: "Every list endpoint paginated with a sane default and enforced max page size; cursor- or offset-based consistently; page metadata (cursor/total/hasNext) returned; empty page returns [] not 404."
|
|
53
|
+
- id: idempotency
|
|
54
|
+
checks: "GET/HEAD/OPTIONS truly side-effect free; PUT and DELETE idempotent on repeat; POST supports idempotency keys for money/critical ops; timeout+retry never creates duplicates or corrupts state."
|
|
55
|
+
- id: n-plus-one-perf
|
|
56
|
+
checks: "Count DB queries per API call — find N+1 (list endpoint issuing one query per row); dataloader/batching for GraphQL, eager loading for ORM relations; no SELECT *; response times within p95<1s budget."
|
|
57
|
+
- id: cors-webhooks
|
|
58
|
+
checks: "CORS Allow-Origin is a specific allowlist (no wildcard with credentials), only needed methods/headers; webhooks verify HMAC signature, enforce HTTPS, include event type + timestamp, retry with backoff."
|
|
59
|
+
- id: versioning-deprecation
|
|
60
|
+
checks: "API version communicated consistently; backward compatibility preserved or sunset announced; deprecated endpoints emit Deprecation/Sunset headers, still function during the window, and point callers to the replacement."
|
|
61
|
+
|
|
62
|
+
falsification: >
|
|
63
|
+
"It works in Postman" proves nothing — Postman has the token, correct headers
|
|
64
|
+
and the happy path. Every PASS must cite >=3 concrete requests run (no auth,
|
|
65
|
+
wrong role, malformed body, boundary value, concurrent calls) with verbatim
|
|
66
|
+
status + body. Categorise findings as HAPPY-vs-EDGE, ADMIN-vs-USER,
|
|
67
|
+
SINGLE-vs-CONCURRENT, SPEC-vs-REALITY or POSTMAN-vs-PRODUCTION. A static scan
|
|
68
|
+
reporting an "unauthenticated endpoint" must be confirmed by reading the
|
|
69
|
+
handler — auth may live in middleware the scan cannot see. Bias toward FAIL.
|
|
70
|
+
|
|
71
|
+
fix_loop: true
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# automationaudit — OmegaOS Quality Arsenal definition.
|
|
2
|
+
# Compact + structured: the Gestalt-Popper shell lives in omega_engine.audit_arsenal;
|
|
3
|
+
# this file supplies only the domain — gather tools, phases, falsification rules.
|
|
4
|
+
|
|
5
|
+
id: automationaudit
|
|
6
|
+
domain: automation
|
|
7
|
+
question: "Every cron is a promise, every script a liability, every daemon a lie — do they hold?"
|
|
8
|
+
weight: 1.0
|
|
9
|
+
threshold: 85
|
|
10
|
+
|
|
11
|
+
applies_to:
|
|
12
|
+
roles: [worker]
|
|
13
|
+
changed: ["*.sh", "*.py", "*.service", "*.timer", "Dockerfile", "*.yml", "*.yaml", "crontab", "*cron*"]
|
|
14
|
+
|
|
15
|
+
# GATHER — deterministic tools, run first, no LLM. Machine-checkable findings.
|
|
16
|
+
gather:
|
|
17
|
+
- name: shellcheck
|
|
18
|
+
cmd: "shellcheck -f json {path} 2>/dev/null || true"
|
|
19
|
+
when: "*.sh"
|
|
20
|
+
- name: bash-syntax
|
|
21
|
+
cmd: "bash -n {path} 2>&1 || true"
|
|
22
|
+
when: "*.sh"
|
|
23
|
+
- name: crontab-dump
|
|
24
|
+
cmd: "crontab -l 2>/dev/null || true"
|
|
25
|
+
when: "*"
|
|
26
|
+
- name: systemd-timers
|
|
27
|
+
cmd: "systemctl list-timers --all --no-pager 2>/dev/null || true"
|
|
28
|
+
when: "*.service,*.timer"
|
|
29
|
+
- name: secret-scan
|
|
30
|
+
cmd: "gitleaks detect --no-git --no-banner --report-format json --source {path} 2>/dev/null || grep -rnEi '(api[_-]?key|secret|password|passwd|token)[\"'\\'' ]*[:=][\"'\\'' ]*[A-Za-z0-9/+_-]{12,}' {path} || true"
|
|
31
|
+
when: "*.sh,*.py,*.yml,*.yaml"
|
|
32
|
+
- name: silenced-output
|
|
33
|
+
cmd: "grep -nE '>\\s*/dev/null\\s+2>&1|2>&1\\s*>\\s*/dev/null' {path} || true"
|
|
34
|
+
when: "*.sh"
|
|
35
|
+
- name: missing-strict-mode
|
|
36
|
+
cmd: "for f in {path}; do grep -q 'set -[a-z]*e' \"$f\" 2>/dev/null || echo \"$f: no 'set -e' strict mode\"; done || true"
|
|
37
|
+
when: "*.sh"
|
|
38
|
+
|
|
39
|
+
# PHASES — the agentic falsification pass investigates each, domain-specific.
|
|
40
|
+
phases:
|
|
41
|
+
- id: cron-health
|
|
42
|
+
checks: "Cron expressions valid; DST/timezone traps; journalctl proves actual run count matches schedule (gaps = silent failures); output captured not '>/dev/null'; overlap-locked; failure alerts wired."
|
|
43
|
+
- id: script-quality
|
|
44
|
+
checks: "Shebang correct; 'set -euo pipefail' present; passes shellcheck; variables quoted; 'cd' guarded with '|| exit'; Python venv + imports valid; bare-except swallows nothing."
|
|
45
|
+
- id: dependency-order
|
|
46
|
+
checks: "Map the timeline — script B reading A's output must have an EXPLICIT dependency (not 'scheduled 5min later'); pipeline stages gate on SUCCESS not just completion; clock-skew safe."
|
|
47
|
+
- id: error-recovery
|
|
48
|
+
checks: "Transient failures retried with bounded exponential backoff; partial failures logged-and-continued not aborted; killed mid-run can resume from checkpoint; timeouts set on curl/ssh; reboot survival."
|
|
49
|
+
- id: idempotency
|
|
50
|
+
checks: "Running twice produces no duplicates / double notifications / lock-collision crash; catch-up after downtime is safe (24 missed runs ≠ 24 simultaneous API calls); INSERT vs UPSERT correct."
|
|
51
|
+
- id: logging-monitoring
|
|
52
|
+
checks: "Every automation writes a timestamped structured log; log rotation configured (no unbounded disk bomb); failure escalates log→monitor→alert→human; dead-man's-switch alerts on non-execution."
|
|
53
|
+
- id: secret-exposure
|
|
54
|
+
checks: "No hardcoded keys/passwords/connection-strings in scripts; gitleaks clean on history; secrets not echoed in logs or 'set -x' traces; .env files chmod 600 and gitignored; rotation plan exists."
|
|
55
|
+
- id: daemon-health
|
|
56
|
+
checks: "Daemon actually running and systemd-enabled; CPU/RSS/FD not leaking; output/heartbeat fresh; Restart=on-failure policy; SIGTERM flushes buffers and releases locks; no OOM-kill history."
|
|
57
|
+
- id: race-conditions
|
|
58
|
+
checks: "Automations sharing files/APIs/tables/repos are flock-protected; atomic write (.tmp then mv); concurrent git access locked; API schedules staggered to avoid combined rate-limit breach."
|
|
59
|
+
- id: dead-automations
|
|
60
|
+
checks: "Cron entries point to existing scripts; no scripts that never ran (no log, stale mtime); commented-out crons explained; no orphaned log files; no deprecated automation still running alongside its replacement."
|
|
61
|
+
- id: dispatch-chains
|
|
62
|
+
checks: "Every dispatch chain (trigger→worker→completion) verifies completion via done-signal/exit-code; failure propagates not fire-and-forget; backpressure caps concurrency; orphaned workers detected."
|
|
63
|
+
- id: failure-cascade
|
|
64
|
+
checks: "Build the dependency graph; identify SPOFs and blast radius; disk-full/network-down/token-expired common failure modes; circuit breakers back off instead of hammering; global freeze switch exists."
|
|
65
|
+
- id: lock-management
|
|
66
|
+
checks: "Lock files have a max-age/staleness check (PID alive via 'kill -0'); cleanup trap on EXIT and crash; reboot clears stale locks; granularity avoids deadlock between mutually-waiting scripts."
|
|
67
|
+
- id: backup-portability
|
|
68
|
+
checks: "Backups exist, offsite, integrity-verified, restore actually tested with documented RTO/RPO; scripts use full tool paths (cron's minimal PATH); correct shebang vs syntax; tool availability checked."
|
|
69
|
+
|
|
70
|
+
falsification: >
|
|
71
|
+
Every automation lies — the cron says "every 5min" (prove it with journalctl), the log
|
|
72
|
+
says "completed successfully" (prove the output file is stale/empty), the daemon "is alive"
|
|
73
|
+
(prove the heartbeat is stale). Exit code 0 is NOT success. Categorise findings as
|
|
74
|
+
SCHEDULE-vs-REALITY, LOG-vs-TRUTH, DEPENDENCY-vs-ORDER, IDEMPOTENT-vs-DESTRUCTIVE,
|
|
75
|
+
ALIVE-vs-ZOMBIE, or SECRET-vs-EXPOSED. Every PASS cites ≥3 concrete commands with output.
|
|
76
|
+
|
|
77
|
+
fix_loop: true
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# codeaudit — the reference Quality Arsenal definition for OmegaOS.
|
|
2
|
+
# Compact + structured: the Gestalt-Popper shell lives in omega_engine.audit_arsenal;
|
|
3
|
+
# this file supplies only the domain — gather tools, phases, falsification rules.
|
|
4
|
+
|
|
5
|
+
id: codeaudit
|
|
6
|
+
domain: code
|
|
7
|
+
question: "Is the code SOLID — does every claim the code makes hold at runtime?"
|
|
8
|
+
weight: 1.0
|
|
9
|
+
threshold: 85
|
|
10
|
+
|
|
11
|
+
applies_to:
|
|
12
|
+
roles: [worker]
|
|
13
|
+
changed: ["*.py", "*.ts", "*.tsx", "*.js", "*.jsx", "*.go", "*.rs"]
|
|
14
|
+
|
|
15
|
+
# GATHER — deterministic tools, run first, no LLM. Machine-checkable findings.
|
|
16
|
+
gather:
|
|
17
|
+
- name: ruff
|
|
18
|
+
cmd: "ruff check --output-format=json {path} || true"
|
|
19
|
+
when: "*.py"
|
|
20
|
+
- name: py-compile
|
|
21
|
+
cmd: "python3 -m compileall -q {path} || true"
|
|
22
|
+
when: "*.py"
|
|
23
|
+
- name: eslint
|
|
24
|
+
cmd: "npx --no-install eslint -f json {path} || true"
|
|
25
|
+
when: "*.ts,*.tsx,*.js,*.jsx"
|
|
26
|
+
- name: tsc
|
|
27
|
+
cmd: "npx --no-install tsc --noEmit || true"
|
|
28
|
+
when: "*.ts,*.tsx"
|
|
29
|
+
|
|
30
|
+
# PHASES — the agentic falsification pass investigates each.
|
|
31
|
+
phases:
|
|
32
|
+
- id: phantoms
|
|
33
|
+
checks: "Dead code, unreachable branches, unused exports, orphan files, commented-out blocks."
|
|
34
|
+
- id: contracts
|
|
35
|
+
checks: "Names vs behaviour — does `validate` validate? does `save` persist? does `delete` remove?"
|
|
36
|
+
- id: data-flow
|
|
37
|
+
checks: "Trace every external input to its sink — find untrusted data reaching a query, shell, path or render unguarded."
|
|
38
|
+
- id: state-mutation
|
|
39
|
+
checks: "Shared mutable state, hidden globals, mutation through aliases, unenforced ordering assumptions."
|
|
40
|
+
- id: concurrency
|
|
41
|
+
checks: "Races, missing locks/awaits, parent finishing before children, double-execution, lost updates."
|
|
42
|
+
- id: error-propagation
|
|
43
|
+
checks: "Swallowed exceptions, errors logged but not handled, failure paths that silently succeed."
|
|
44
|
+
- id: blast-radius
|
|
45
|
+
checks: "If this module breaks, what else dies? Identify the hinge point; prove its defenses exist."
|
|
46
|
+
- id: time-bombs
|
|
47
|
+
checks: "Hardcoded dates, expiring tokens, size limits, retry loops with no ceiling, resources never released."
|
|
48
|
+
- id: contract-vs-type
|
|
49
|
+
checks: "Type annotations vs runtime reality — a `str` param that receives `None`; a return shape the type denies."
|
|
50
|
+
- id: feature-verification
|
|
51
|
+
checks: "Does the feature the code claims actually work end to end, or is it a stub wired to nothing?"
|
|
52
|
+
- id: test-coverage
|
|
53
|
+
checks: "Are failure modes tested, or only the happy path? Do tests assert behaviour or merely run it?"
|
|
54
|
+
- id: resilience
|
|
55
|
+
checks: "Behaviour under bad input, network failure, empty data, concurrent callers — what breaks first?"
|
|
56
|
+
|
|
57
|
+
falsification: >
|
|
58
|
+
Every PASS must cite at least 3 concrete checks with their actual output.
|
|
59
|
+
Categorise every finding as CLAIM-vs-REALITY, PROMISE-vs-DELIVERY, or
|
|
60
|
+
CONTRACT-vs-BEHAVIOUR. Bias toward FAIL — a 100 is earned by finding zero
|
|
61
|
+
falsifiable claims, never assumed.
|
|
62
|
+
|
|
63
|
+
fix_loop: true
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# copyaudit — Quality Arsenal definition for OmegaOS.
|
|
2
|
+
# Compact + structured: the Gestalt-Popper shell lives in omega_engine.audit_arsenal;
|
|
3
|
+
# this file supplies only the domain — gather tools, phases, falsification rules.
|
|
4
|
+
|
|
5
|
+
id: copyaudit
|
|
6
|
+
domain: copy
|
|
7
|
+
question: "Is the copy CLEAR — does every word earn its place and every claim hold?"
|
|
8
|
+
weight: 1.0
|
|
9
|
+
threshold: 85
|
|
10
|
+
|
|
11
|
+
applies_to:
|
|
12
|
+
roles: [worker]
|
|
13
|
+
changed: ["*.tsx", "*.jsx", "*.html", "*.md", "*.mdx", "*.json"]
|
|
14
|
+
|
|
15
|
+
# GATHER — deterministic copy detectors, run first, no LLM. Machine-checkable findings.
|
|
16
|
+
gather:
|
|
17
|
+
- name: hardcoded-strings
|
|
18
|
+
cmd: "grep -rnE '>[A-Z][a-z]+[ A-Za-z]{6,}<|placeholder=\"[A-Z]' {path} || true"
|
|
19
|
+
when: "*.tsx,*.jsx"
|
|
20
|
+
- name: i18n-wrappers
|
|
21
|
+
cmd: "grep -rnE 't\\(|i18n|<Trans|useTranslation|__\\(' {path} || true"
|
|
22
|
+
when: "*.tsx,*.jsx,*.ts,*.js"
|
|
23
|
+
- name: banned-marketing-phrases
|
|
24
|
+
cmd: "grep -rniE 'something went wrong|click here|learn more|cutting-edge|revolutionary|blazing fast|world.?class|game.?changer' {path} || true"
|
|
25
|
+
when: "*"
|
|
26
|
+
- name: generic-cta-labels
|
|
27
|
+
cmd: "grep -rnE '>(Submit|Click here|Learn more|Get Started|Continue|OK)<' {path} || true"
|
|
28
|
+
when: "*.tsx,*.jsx,*.html"
|
|
29
|
+
|
|
30
|
+
# PHASES — the agentic falsification pass investigates each.
|
|
31
|
+
phases:
|
|
32
|
+
- id: headline-clarity
|
|
33
|
+
checks: "The 5-second test on every H1 — can a stranger answer what/who/why in 5 seconds? No 'Welcome to' or 'About Us' as H1."
|
|
34
|
+
- id: value-proposition
|
|
35
|
+
checks: "Is the value prop stated, consistent across pages, differentiated, and ACTUALLY deliverable in a new user's first session?"
|
|
36
|
+
- id: claim-verification
|
|
37
|
+
checks: "THE HINGE — every factual/subjective/social-proof/comparison claim falsified; PROMISE-vs-REALITY. 'fast' must be fast, 'secure' must have security."
|
|
38
|
+
- id: cta-effectiveness
|
|
39
|
+
checks: "Action+benefit labels not 'Submit'; CTA destination matches the label ('Get Started' goes to getting started, not pricing); one primary CTA per section."
|
|
40
|
+
- id: tone-consistency
|
|
41
|
+
checks: "One brand voice across marketing, product, errors, email — no 'fun and casual' marketing with 'cold and corporate' product copy."
|
|
42
|
+
- id: technical-accuracy
|
|
43
|
+
checks: "Every described feature exists and behaves as described; screenshots show current UI; comparison tables fair and current."
|
|
44
|
+
- id: grammar-spelling
|
|
45
|
+
checks: "Zero typos and grammatical errors in user-facing copy; consistent punctuation, capitalization, number and date formats; product name spelled correctly."
|
|
46
|
+
- id: reading-level
|
|
47
|
+
checks: "Flesch-Kincaid grade <=8 marketing / <=10 product; sentences <20 words; active voice; jargon simplified or explained; acronyms expanded on first use."
|
|
48
|
+
- id: microcopy
|
|
49
|
+
checks: "Button labels describe their action; error messages say what went wrong AND how to fix it; empty states teach; success states confirm and suggest next step."
|
|
50
|
+
- id: social-proof
|
|
51
|
+
checks: "Testimonials from real identifiable people; user counts and ratings accurate and current; 'as seen in' logos correspond to actual coverage."
|
|
52
|
+
- id: legal-compliance
|
|
53
|
+
checks: "Required disclaimers (pricing taxes/billing, trial auto-renewal); no deceptive dark patterns in copy; no false competitor claims; unsubscribe instructions clear."
|
|
54
|
+
- id: copy-accessibility
|
|
55
|
+
checks: "Link text makes sense out of context; inclusive non-ableist gender-neutral language; instructions simple and direct; diverse names in examples."
|
|
56
|
+
- id: brand-voice
|
|
57
|
+
checks: "Voice recognizable without seeing the brand, appropriate for the audience, never sacrificing clarity for personality."
|
|
58
|
+
- id: i18n-readiness
|
|
59
|
+
checks: "User-facing strings extractable via t()/_()/<Trans> when the project has i18n infrastructure; hardcoded English strings flagged."
|
|
60
|
+
|
|
61
|
+
falsification: >
|
|
62
|
+
Every claim is a hypothesis — attempt to disprove it. Every PASS must cite at
|
|
63
|
+
least 3 concrete checks with actual output. Categorise findings as
|
|
64
|
+
PROMISE-vs-REALITY, CLARITY-vs-CONFUSION, TONE-vs-AUDIENCE, CLAIM-vs-EVIDENCE,
|
|
65
|
+
or CTA-vs-ACTION. "Nobody reads the copy" is never the user's fault — it means
|
|
66
|
+
the copy failed. Bias toward FAIL — a claim without evidence is a lie until proven.
|
|
67
|
+
|
|
68
|
+
fix_loop: true
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# dataaudit — OmegaOS Quality Arsenal definition.
|
|
2
|
+
# Compact + structured: the Gestalt-Popper shell lives in omega_engine.audit_arsenal;
|
|
3
|
+
# this file supplies only the domain — gather tools, phases, falsification rules.
|
|
4
|
+
# DESTRUCTIVE-AWARE: any fix that mutates data must snapshot/backup first.
|
|
5
|
+
|
|
6
|
+
id: dataaudit
|
|
7
|
+
domain: data
|
|
8
|
+
question: "Is the data TRUTHFUL — every reference valid, every type correct, every transaction whole?"
|
|
9
|
+
weight: 1.0
|
|
10
|
+
threshold: 85
|
|
11
|
+
|
|
12
|
+
applies_to:
|
|
13
|
+
roles: [worker]
|
|
14
|
+
changed: ["**/schema.ts", "**/schema.prisma", "prisma/**", "**/migrations/**", "*.sql", "**/db/**", "convex/schema.ts", "**/models/**"]
|
|
15
|
+
|
|
16
|
+
# GATHER — deterministic schema/migration tools, run first, no LLM.
|
|
17
|
+
gather:
|
|
18
|
+
- name: prisma-validate
|
|
19
|
+
cmd: "npx --no-install prisma validate --schema {path} || true"
|
|
20
|
+
when: "schema.prisma,**/schema.prisma"
|
|
21
|
+
- name: drizzle-check
|
|
22
|
+
cmd: "npx --no-install drizzle-kit check || true"
|
|
23
|
+
when: "**/db/**,drizzle.config.ts"
|
|
24
|
+
- name: convex-schema-check
|
|
25
|
+
cmd: "npx --no-install convex dev --once --skip-push || true"
|
|
26
|
+
when: "convex/schema.ts"
|
|
27
|
+
- name: sql-ddl-scan
|
|
28
|
+
cmd: "grep -rncE \"CREATE TABLE|CREATE INDEX|FOREIGN KEY|REFERENCES|NOT NULL|ON DELETE\" {path} || true"
|
|
29
|
+
when: "*.sql"
|
|
30
|
+
- name: migration-inventory
|
|
31
|
+
cmd: "ls -la {path} 2>/dev/null || true"
|
|
32
|
+
when: "**/migrations/**"
|
|
33
|
+
- name: sqlite-integrity
|
|
34
|
+
cmd: "for f in $(find {path} -name '*.db' -o -name '*.sqlite' 2>/dev/null); do sqlite3 \"$f\" 'PRAGMA integrity_check; PRAGMA foreign_key_check;'; done || true"
|
|
35
|
+
when: "*"
|
|
36
|
+
|
|
37
|
+
# PHASES — the agentic falsification pass investigates each.
|
|
38
|
+
phases:
|
|
39
|
+
- id: schema-validation
|
|
40
|
+
checks: "Schema definitions match the TypeScript/Python types and the columns the code references; NOT NULL / UNIQUE / CHECK / DEFAULT constraints present where business logic demands; consistent naming; enums in schema match enums in code."
|
|
41
|
+
- id: migration-status
|
|
42
|
+
checks: "All migrations applied in order, none pending/failed/stuck; new columns backfilled for existing rows; renamed columns migrated; destructive migrations have a rollback path and were batched for large tables."
|
|
43
|
+
- id: hinge-orphaned-records
|
|
44
|
+
checks: "HINGE — for every foreign key/reference run the LEFT JOIN where the referenced row is NULL; count orphans, date when they appeared, find root cause (missing cascade, race, bug); include file/storage refs pointing to nothing and soft-delete orphans."
|
|
45
|
+
- id: hinge-referential-integrity
|
|
46
|
+
checks: "HINGE — FK constraints enforced at DB level not just app; cross-table aggregates match details (order_total = SUM(items)); temporal sanity (created_at <= updated_at, child not before parent); every business invariant holds in actual data."
|
|
47
|
+
- id: type-safety
|
|
48
|
+
checks: "Runtime values match declared types — string columns holding JSON/numbers, number columns holding strings, booleans as 0/1, dates as strings; Convex v.* validators and v.optional() match reality; coercion risks (string sort on numeric column)."
|
|
49
|
+
- id: null-handling
|
|
50
|
+
checks: "Null percentage per column; required fields containing nulls; nullable fields that should be required; consistent null semantics (not-set vs N/A vs unknown); empty-string-vs-null and 0-vs-null picked consistently; null behaviour in aggregates and joins."
|
|
51
|
+
- id: data-consistency
|
|
52
|
+
checks: "Denormalised/cached values match source of truth (full_name vs first+last, post_count vs COUNT); cross-service data matches (auth provider, payment provider, search index); enum values current, no deprecated values lingering; format consistency."
|
|
53
|
+
- id: duplicate-detection
|
|
54
|
+
checks: "Exact duplicates (same entity, different IDs), near-duplicates (casing/formatting differences in email/phone); unique indexes on natural keys; idempotency keys on writes; a defined merge strategy when duplicates exist."
|
|
55
|
+
- id: cascade-behavior
|
|
56
|
+
checks: "Parent deletion cascades correctly without creating orphans and without cascading too broadly; status/key changes propagate; RESTRICT/SET NULL/SET DEFAULT chosen deliberately per relationship; soft-delete cascade respected."
|
|
57
|
+
- id: transaction-integrity
|
|
58
|
+
checks: "Multi-step operations (payment+order, user+profile) wrapped in transactions; optimistic locking prevents lost updates; counter increments and inventory decrements atomic; failed transactions fully rolled back; webhook/import handlers idempotent."
|
|
59
|
+
- id: index-and-query
|
|
60
|
+
checks: "Columns in WHERE/JOIN/ORDER BY and all FK columns indexed; no unused or duplicate indexes; composite index column order matches query patterns; full table scans and N+1 query patterns identified."
|
|
61
|
+
- id: pii-lifecycle-backup
|
|
62
|
+
checks: "Inventory every PII column; PII encrypted at rest and masked in non-prod, not leaking into logs/errors/search indexes; TTL on sessions/tokens/logs; retention policy and GDPR right-to-deletion implemented; automated backups exist and a restore was actually tested."
|
|
63
|
+
- id: seed-data-separation
|
|
64
|
+
checks: "No seed/test data in production (test@example.com accounts, Lorem ipsum, default passwords); production data absent from dev DBs or anonymised; no production credentials in test fixtures."
|
|
65
|
+
|
|
66
|
+
falsification: >
|
|
67
|
+
"No errors in production" means nobody counted. Every PASS must cite >=3
|
|
68
|
+
concrete queries run (the orphan LEFT JOIN with row count, the invariant
|
|
69
|
+
check, the type cast attempt) with verbatim output — never assume integrity.
|
|
70
|
+
Categorise findings as SCHEMA-vs-REALITY, REFERENCE-vs-EXISTENCE,
|
|
71
|
+
TYPE-vs-VALUE, MIGRATION-vs-STATE or DEV-vs-PROD. A reported orphan must be
|
|
72
|
+
verified: confirm the FK was meant to cascade or that an actual user action
|
|
73
|
+
deleted the parent. Any data-mutating fix MUST snapshot the DB first; restore
|
|
74
|
+
on any post-fix check failure. Bias toward FAIL — data loss is permanent.
|
|
75
|
+
|
|
76
|
+
fix_loop: true
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# debugaudit — OmegaOS Quality Arsenal definition.
|
|
2
|
+
# Compact + structured: the Gestalt-Popper shell lives in omega_engine.audit_arsenal;
|
|
3
|
+
# this file supplies only the domain — gather tools, phases, falsification rules.
|
|
4
|
+
|
|
5
|
+
id: debugaudit
|
|
6
|
+
domain: runtime
|
|
7
|
+
question: "What is already BROKEN right now — and nobody noticed because it failed silently?"
|
|
8
|
+
weight: 1.0
|
|
9
|
+
threshold: 85
|
|
10
|
+
|
|
11
|
+
# Runtime bugs can hide behind any change — always run this audit.
|
|
12
|
+
applies_to:
|
|
13
|
+
roles: [worker]
|
|
14
|
+
changed: ["*"]
|
|
15
|
+
|
|
16
|
+
# GATHER — deterministic tools, run first, no LLM. Machine-checkable findings.
|
|
17
|
+
gather:
|
|
18
|
+
- name: tsc
|
|
19
|
+
cmd: "npx --no-install tsc --noEmit 2>&1 || true"
|
|
20
|
+
when: "*.ts,*.tsx"
|
|
21
|
+
- name: build
|
|
22
|
+
cmd: "npm run build 2>&1 | tail -60 || true"
|
|
23
|
+
when: "*.ts,*.tsx,*.js,*.jsx"
|
|
24
|
+
- name: py-syntax
|
|
25
|
+
cmd: "python3 -m compileall -q {path} 2>&1 || true"
|
|
26
|
+
when: "*.py"
|
|
27
|
+
- name: dep-vulns
|
|
28
|
+
cmd: "npm audit --json 2>/dev/null || true"
|
|
29
|
+
when: "package.json,*.ts,*.tsx,*.js,*.jsx"
|
|
30
|
+
- name: env-placeholders
|
|
31
|
+
cmd: "grep -rnEi '(TODO|change-?me|xxx+|your-?key-?here|placeholder)' .env .env.local .env.production 2>/dev/null || true"
|
|
32
|
+
when: "*"
|
|
33
|
+
- name: swallowed-errors
|
|
34
|
+
cmd: "grep -rnE 'catch *\\([a-zA-Z_]*\\) *\\{ *\\}|\\.catch\\(\\(\\) *=> *(null|undefined|\\{\\}|\\[\\])\\)' --include='*.ts' --include='*.tsx' --include='*.js' --include='*.jsx' {path} || true"
|
|
35
|
+
when: "*.ts,*.tsx,*.js,*.jsx"
|
|
36
|
+
|
|
37
|
+
# PHASES — the agentic falsification pass investigates each, domain-specific.
|
|
38
|
+
phases:
|
|
39
|
+
- id: console-errors
|
|
40
|
+
checks: "Load every page; capture console errors, warnings, unhandled rejections, framework errors (hydration, key warnings); separate load-time from interaction-time failures."
|
|
41
|
+
- id: network-failures
|
|
42
|
+
checks: "Capture all requests; flag 4xx/5xx, requests >3s, hung requests, duplicate fetches, CORS errors, mixed content, expected API calls that never fire."
|
|
43
|
+
- id: visual-regressions
|
|
44
|
+
checks: "Screenshot each page; detect horizontal overflow, overlapping elements, cut-off text, broken images, stuck loading states, misaligned/off-grid elements, FOUC."
|
|
45
|
+
- id: responsive-breakage
|
|
46
|
+
checks: "Test 320/375/768/1024/1440/1920; flag horizontal overflow, touch targets <44px, unreadable text, broken hamburger nav, modals overflowing the viewport."
|
|
47
|
+
- id: dead-features
|
|
48
|
+
checks: "Click every button/link — does the expected thing happen with feedback? Forms submit, validate, reset; nav links lead somewhere; no handlers wired to nothing."
|
|
49
|
+
- id: state-corruption
|
|
50
|
+
checks: "Create/update then refresh — does data persist? Two tabs stay consistent? Optimistic updates actually committed and reverted on failure? Sessions survive reload."
|
|
51
|
+
- id: race-conditions
|
|
52
|
+
checks: "Double-click submit/delete; rapid navigation; concurrent edits in two tabs; interrupt async ops mid-flight — find duplicate creation, stale data, orphan state."
|
|
53
|
+
- id: security-injection
|
|
54
|
+
checks: "XSS payloads in every input/param/hash (script, img onerror, template {{7*7}}); SQL/NoSQL injection in filters; IDOR via predictable IDs; CSRF token presence; open redirects."
|
|
55
|
+
- id: auth-bypass
|
|
56
|
+
checks: "Protected routes redirect unauthenticated; expired/tampered tokens rejected; role escalation blocked at API not just UI; sessions rotate on login and die on logout."
|
|
57
|
+
- id: api-contract-drift
|
|
58
|
+
checks: "Frontend types vs actual response shape; null/undefined/missing-field inconsistency; error format consistency across endpoints; HTTP status correctness (200-on-error is a lie)."
|
|
59
|
+
- id: data-integrity
|
|
60
|
+
checks: "Roundtrip: create then read back — special chars, unicode, numbers preserved exactly? Delete-parent cascade behaviour; created items immediately searchable."
|
|
61
|
+
- id: error-handling
|
|
62
|
+
checks: "Kill an API mid-request, return malformed JSON, force 500 — does the app degrade gracefully or white-screen? Error boundaries show recoverable messages? Offline handled?"
|
|
63
|
+
- id: log-forensics
|
|
64
|
+
checks: "Read the last 1000 log lines; repeated identical errors = systemic; retry storms; OOM/connection-pool warnings; verify logger level is INFO+ (WARNING-only = 80% blind)."
|
|
65
|
+
- id: chaos-edge-cases
|
|
66
|
+
checks: "Max file upload, 10k-char input, 1000 items; throttled 3G; empty strings and NULL in every field; epoch/far-future dates; 0.00 and MAX currency values — what crashes?"
|
|
67
|
+
|
|
68
|
+
falsification: >
|
|
69
|
+
The system lies — "no console errors" means errors are swallowed, "all green" means
|
|
70
|
+
monitoring missed the silent failure. Categorise findings as HEALTH-vs-REALITY,
|
|
71
|
+
LOG-vs-TRUTH, UI-vs-DATA, RESPONSE-vs-EXPECTATION, or SPEED-vs-ACCEPTABLE. For every
|
|
72
|
+
"healthy" claim construct a falsification test that COULD fail; if it cannot fail it is
|
|
73
|
+
useless. Bias toward finding the silent failure — loud failures were already caught.
|
|
74
|
+
|
|
75
|
+
fix_loop: true
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# dxaudit — Quality Arsenal definition for OmegaOS.
|
|
2
|
+
# Compact + structured: the Gestalt-Popper shell lives in omega_engine.audit_arsenal;
|
|
3
|
+
# this file supplies only the domain — gather tools, phases, falsification rules.
|
|
4
|
+
|
|
5
|
+
id: dxaudit
|
|
6
|
+
domain: dx
|
|
7
|
+
question: "Is the DX SMOOTH — can a new developer go from git clone to first contribution within a day?"
|
|
8
|
+
weight: 1.0
|
|
9
|
+
threshold: 85
|
|
10
|
+
|
|
11
|
+
applies_to:
|
|
12
|
+
roles: [worker]
|
|
13
|
+
changed: ["*"]
|
|
14
|
+
|
|
15
|
+
# GATHER — deterministic DX-surface detectors, run first, no LLM. Machine-checkable findings.
|
|
16
|
+
gather:
|
|
17
|
+
- name: readme-present
|
|
18
|
+
cmd: "ls -1 README.md README.rst readme.md 2>/dev/null && wc -l README.md 2>/dev/null || true"
|
|
19
|
+
when: "*"
|
|
20
|
+
- name: dx-docs
|
|
21
|
+
cmd: "ls -1 CONTRIBUTING.md CHANGELOG.md SECURITY.md CODE_OF_CONDUCT.md .env.example .env.template .editorconfig 2>/dev/null || true"
|
|
22
|
+
when: "*"
|
|
23
|
+
- name: tsconfig-strict
|
|
24
|
+
cmd: "grep -nE 'strict|noImplicitAny|strictNullChecks|noUncheckedIndexedAccess' tsconfig.json 2>/dev/null || true"
|
|
25
|
+
when: "*.ts,*.tsx"
|
|
26
|
+
- name: type-escape-hatches
|
|
27
|
+
cmd: "grep -rnE ': any\\b|@ts-ignore|@ts-nocheck|# type: ignore' {path} || true"
|
|
28
|
+
when: "*.ts,*.tsx,*.py"
|
|
29
|
+
- name: ci-config
|
|
30
|
+
cmd: "ls -1 .github/workflows/ .gitlab-ci.yml .circleci/ 2>/dev/null || true"
|
|
31
|
+
when: "*"
|
|
32
|
+
- name: lockfile-and-hooks
|
|
33
|
+
cmd: "ls -1 package-lock.json pnpm-lock.yaml bun.lockb yarn.lock poetry.lock .husky/ .pre-commit-config.yaml 2>/dev/null || true"
|
|
34
|
+
when: "*"
|
|
35
|
+
- name: dep-audit
|
|
36
|
+
cmd: "npm audit --json 2>/dev/null || true"
|
|
37
|
+
when: "*.ts,*.tsx,*.js,*.jsx"
|
|
38
|
+
|
|
39
|
+
# PHASES — the agentic falsification pass investigates each.
|
|
40
|
+
phases:
|
|
41
|
+
- id: readme-quality
|
|
42
|
+
checks: "THE HINGE — README has description, prerequisites, copy-pasteable install/run, env vars, architecture, troubleshooting; can a dev reach a running app in <10 min?"
|
|
43
|
+
- id: setup-complexity
|
|
44
|
+
checks: "THE HINGE — count manual steps from clone to running (target <5); .env.example exists with every var documented; Docker Compose for local services; one-command setup."
|
|
45
|
+
- id: error-messages
|
|
46
|
+
checks: "Build/runtime errors give actionable guidance — name the missing var/service/dependency and how to fix it, not 'ENOENT' or a raw stack trace."
|
|
47
|
+
- id: typescript-strictness
|
|
48
|
+
checks: "tsconfig strict:true (or mypy/clippy strict); no widespread 'any'; no @ts-ignore without a comment; explicit return types on exported functions."
|
|
49
|
+
- id: code-documentation
|
|
50
|
+
checks: "Exported functions have JSDoc/docstrings with params and returns; architecture documented; 'why' comments on non-obvious logic; docs match current code."
|
|
51
|
+
- id: testing-infrastructure
|
|
52
|
+
checks: "Test runner works with one command; coverage reported; tests deterministic, fast (<5min), independent; watch mode and single-test runnable."
|
|
53
|
+
- id: ci-cd-pipeline
|
|
54
|
+
checks: "All PRs run CI (lint+typecheck+test+build); CI <10min; CD automated on merge; main branch protected; no flaky CI."
|
|
55
|
+
- id: dependency-management
|
|
56
|
+
checks: "Lock file committed; no critical vulnerabilities; no abandoned deps (last release >2y); Renovate/Dependabot configured; pinning strategy defined."
|
|
57
|
+
- id: dev-tooling
|
|
58
|
+
checks: "Linter and formatter configured and run automatically; pre-commit hooks fast (<10s); .editorconfig present; recommended editor extensions documented."
|
|
59
|
+
- id: environment-parity
|
|
60
|
+
checks: "Dev/staging/prod differences documented; same runtime and DB versions; no hardcoded URLs/ports/credentials; config validated on startup (fail fast)."
|
|
61
|
+
- id: debug-tooling
|
|
62
|
+
checks: "Structured logging with levels; debugger config (launch.json) checked in; source maps work; DB queries and API requests visible in dev."
|
|
63
|
+
- id: monorepo-structure
|
|
64
|
+
checks: "Workspace config if monorepo with clear package boundaries and build cache; logical feature-organized directory structure; no circular deps; no utils dumping ground."
|
|
65
|
+
- id: migration-changelog
|
|
66
|
+
checks: "Major-version upgrade guides with breaking changes and fixes; CHANGELOG maintained in Keep-a-Changelog format; reversible versioned DB migrations."
|
|
67
|
+
- id: contribution-guide
|
|
68
|
+
checks: "CONTRIBUTING.md with bug/feature/PR process, branch and commit conventions; 'good first issue' path; architecture overview for newcomers."
|
|
69
|
+
|
|
70
|
+
falsification: >
|
|
71
|
+
The README lies until proven true — follow every setup instruction LITERALLY
|
|
72
|
+
on a fresh clone; any step that fails, is unclear, or is missing means the
|
|
73
|
+
README failed. Every PASS must cite at least 3 concrete checks with actual
|
|
74
|
+
output. Categorise findings as README-vs-REALITY, LOCAL-vs-CI, FIRST-vs-REPEAT,
|
|
75
|
+
HAPPY-vs-ERROR, or EXPERT-vs-NEWCOMER. "Ask in Slack" is not documentation —
|
|
76
|
+
if knowledge is not in the repo it does not exist. Bias toward FAIL.
|
|
77
|
+
|
|
78
|
+
fix_loop: true
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# featureaudit — Quality Arsenal definition for OmegaOS.
|
|
2
|
+
# Compact + structured: the Gestalt-Popper shell lives in omega_engine.audit_arsenal;
|
|
3
|
+
# this file supplies only the domain — gather tools, phases, falsification rules.
|
|
4
|
+
|
|
5
|
+
id: featureaudit
|
|
6
|
+
domain: features
|
|
7
|
+
question: "Is the product COMPLETE — does everything that SHOULD exist actually exist and run deep?"
|
|
8
|
+
weight: 1.0
|
|
9
|
+
threshold: 85
|
|
10
|
+
|
|
11
|
+
applies_to:
|
|
12
|
+
roles: [worker]
|
|
13
|
+
changed: ["*"]
|
|
14
|
+
|
|
15
|
+
# GATHER — deterministic stub/gap detectors, run first, no LLM. Machine-checkable findings.
|
|
16
|
+
gather:
|
|
17
|
+
- name: stub-markers
|
|
18
|
+
cmd: "grep -rnE 'coming soon|not implemented|not yet|placeholder|TODO|FIXME|XXX|HACK|WIP' {path} || true"
|
|
19
|
+
when: "*"
|
|
20
|
+
- name: noop-handlers
|
|
21
|
+
cmd: "grep -rnE 'on[A-Z][A-Za-z]+=\\{?\\(\\s*\\)\\s*=>\\s*\\{?\\s*\\}|return null|return NextResponse.json\\(\\{\\}\\)|return new Response\\(\\)' {path} || true"
|
|
22
|
+
when: "*.tsx,*.jsx,*.ts,*.js"
|
|
23
|
+
- name: mock-data
|
|
24
|
+
cmd: "grep -rnE 'mockData|fakeData|dummyData|MOCK_|FAKE_|TEST_DATA|lorem ipsum|hardcoded' {path} || true"
|
|
25
|
+
when: "*"
|
|
26
|
+
- name: feature-flags
|
|
27
|
+
cmd: "grep -rnE 'featureFlag|FEATURE_|isEnabled|flags\\.' {path} || true"
|
|
28
|
+
when: "*.ts,*.tsx,*.js,*.jsx,*.py"
|
|
29
|
+
- name: prd-sources
|
|
30
|
+
cmd: "ls -1 VISION.md PRD.md docs/PRD.md docs/prd.md README.md 2>/dev/null || true"
|
|
31
|
+
when: "*"
|
|
32
|
+
|
|
33
|
+
# PHASES — the agentic falsification pass investigates each.
|
|
34
|
+
phases:
|
|
35
|
+
- id: hinge-capability
|
|
36
|
+
checks: "Identify the ONE capability this product must do better than anything else; is it implemented end-to-end and deep, or shallow?"
|
|
37
|
+
- id: prd-compliance
|
|
38
|
+
checks: "For every feature promised in PRD/VISION/README, find a code trace; PROMISED-vs-BUILT — does it work AS described, not a different interpretation?"
|
|
39
|
+
- id: empty-implementation
|
|
40
|
+
checks: "Stub routes, no-op handlers, buttons that do nothing, handlers returning success but persisting nothing — visible but non-functional."
|
|
41
|
+
- id: feature-depth
|
|
42
|
+
checks: "For each feature score depth: happy path, edge cases, error handling, configuration, integration — SHALLOW-vs-DEEP."
|
|
43
|
+
- id: edge-case-coverage
|
|
44
|
+
checks: "The Universal 10 per feature — zero/one/many/overflow states, special chars, long text, concurrent, mobile, offline; does each non-happy input survive?"
|
|
45
|
+
- id: partial-crud
|
|
46
|
+
checks: "For each entity, do all of Create/Read/Update/Delete exist? Partial CRUD, partial export/import, partial search are LABELED-vs-CAPABLE gaps."
|
|
47
|
+
- id: competitive-parity
|
|
48
|
+
checks: "Table-stakes features all competitors have but this product lacks; differentiators hidden from the UI — MARKETED-vs-DELIVERED."
|
|
49
|
+
- id: discoverability
|
|
50
|
+
checks: "Clicks from main page to each feature, primary-nav presence, search/command-palette access, onboarding mention — a feature nobody finds is unused."
|
|
51
|
+
- id: feature-coherence
|
|
52
|
+
checks: "Do features share data and patterns, or are they silos with duplicate data entry and inconsistent interactions?"
|
|
53
|
+
- id: api-surface
|
|
54
|
+
checks: "CRUD coverage, query/filter/sort capability, bulk ops, webhook/event emission — if it is not in the API it does not exist for power users."
|
|
55
|
+
- id: permission-matrix
|
|
56
|
+
checks: "For every entity x operation x role, is access enforced? Missing permission checks, over-permissive defaults, missing role tiers."
|
|
57
|
+
- id: data-model-gaps
|
|
58
|
+
checks: "Schema gaps — missing tenancy field, audit trail, soft-delete, version field, indexes on filtered columns."
|
|
59
|
+
- id: scaling-readiness
|
|
60
|
+
checks: "Features that work now but break at 10x — unpaginated lists, full-table scans, sync ops that should be async, no rate limiting."
|
|
61
|
+
- id: feature-entropy
|
|
62
|
+
checks: "Terminology drift, verb drift, inconsistent confirm/save patterns, mixed modal/drawer/route for the same flow."
|
|
63
|
+
|
|
64
|
+
falsification: >
|
|
65
|
+
The product claims to be ready/launched/v1 — DISPROVE it. Every PASS must
|
|
66
|
+
cite at least 3 concrete checks with actual output (route renders non-placeholder
|
|
67
|
+
content, handler persists to real backend, sub-requirements have code branches).
|
|
68
|
+
Categorise findings as PROMISED-vs-BUILT, VISIBLE-vs-FUNCTIONAL, SHALLOW-vs-DEEP,
|
|
69
|
+
or LABELED-vs-CAPABLE. TODO comments, "coming soon" strings, permanently-off flags,
|
|
70
|
+
and routes returning 404/501 are NOT evidence of a feature. Bias toward FAIL —
|
|
71
|
+
the product is incomplete until proven complete.
|
|
72
|
+
|
|
73
|
+
fix_loop: true
|