@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.
Files changed (109) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +127 -0
  3. package/bin/omega-os.js +48 -0
  4. package/bootstrap/lib/common.sh +73 -0
  5. package/bootstrap/lib/steps.sh +153 -0
  6. package/bootstrap/manifest.example.yaml +45 -0
  7. package/docs/ACCOUNT-AND-BILLING.md +95 -0
  8. package/docs/ARCHITECTURE.md +225 -0
  9. package/docs/AUTONOMOUS-AGENTS.md +128 -0
  10. package/docs/ENGINE-SPEC.md +174 -0
  11. package/docs/INSTALL.md +106 -0
  12. package/docs/MCP-AND-PLUGINS.md +121 -0
  13. package/docs/RUNTIME-PLAN.md +63 -0
  14. package/install.sh +54 -0
  15. package/omega/Agentik_Coding/README.md +21 -0
  16. package/omega/Agentik_Engine/README.md +58 -0
  17. package/omega/Agentik_Engine/omega_engine/__init__.py +58 -0
  18. package/omega/Agentik_Engine/omega_engine/__pycache__/__init__.cpython-313.pyc +0 -0
  19. package/omega/Agentik_Engine/omega_engine/__pycache__/audit.cpython-313.pyc +0 -0
  20. package/omega/Agentik_Engine/omega_engine/__pycache__/audit_arsenal.cpython-313.pyc +0 -0
  21. package/omega/Agentik_Engine/omega_engine/__pycache__/barrier.cpython-313.pyc +0 -0
  22. package/omega/Agentik_Engine/omega_engine/__pycache__/bus.cpython-313.pyc +0 -0
  23. package/omega/Agentik_Engine/omega_engine/__pycache__/cli.cpython-313.pyc +0 -0
  24. package/omega/Agentik_Engine/omega_engine/__pycache__/events.cpython-313.pyc +0 -0
  25. package/omega/Agentik_Engine/omega_engine/__pycache__/executor.cpython-313.pyc +0 -0
  26. package/omega/Agentik_Engine/omega_engine/__pycache__/mission.cpython-313.pyc +0 -0
  27. package/omega/Agentik_Engine/omega_engine/__pycache__/progress.cpython-313.pyc +0 -0
  28. package/omega/Agentik_Engine/omega_engine/__pycache__/project.cpython-313.pyc +0 -0
  29. package/omega/Agentik_Engine/omega_engine/__pycache__/provider.cpython-313.pyc +0 -0
  30. package/omega/Agentik_Engine/omega_engine/__pycache__/reducer.cpython-313.pyc +0 -0
  31. package/omega/Agentik_Engine/omega_engine/__pycache__/report.cpython-313.pyc +0 -0
  32. package/omega/Agentik_Engine/omega_engine/__pycache__/router.cpython-313.pyc +0 -0
  33. package/omega/Agentik_Engine/omega_engine/__pycache__/store.cpython-313.pyc +0 -0
  34. package/omega/Agentik_Engine/omega_engine/__pycache__/supervisor.cpython-313.pyc +0 -0
  35. package/omega/Agentik_Engine/omega_engine/__pycache__/task.cpython-313.pyc +0 -0
  36. package/omega/Agentik_Engine/omega_engine/__pycache__/telegram.cpython-313.pyc +0 -0
  37. package/omega/Agentik_Engine/omega_engine/audit.py +96 -0
  38. package/omega/Agentik_Engine/omega_engine/audit_arsenal.py +314 -0
  39. package/omega/Agentik_Engine/omega_engine/barrier.py +45 -0
  40. package/omega/Agentik_Engine/omega_engine/bus.py +45 -0
  41. package/omega/Agentik_Engine/omega_engine/cli.py +158 -0
  42. package/omega/Agentik_Engine/omega_engine/events.py +60 -0
  43. package/omega/Agentik_Engine/omega_engine/executor.py +167 -0
  44. package/omega/Agentik_Engine/omega_engine/mission.py +145 -0
  45. package/omega/Agentik_Engine/omega_engine/progress.py +75 -0
  46. package/omega/Agentik_Engine/omega_engine/project.py +92 -0
  47. package/omega/Agentik_Engine/omega_engine/provider.py +139 -0
  48. package/omega/Agentik_Engine/omega_engine/reducer.py +76 -0
  49. package/omega/Agentik_Engine/omega_engine/report.py +146 -0
  50. package/omega/Agentik_Engine/omega_engine/router.py +34 -0
  51. package/omega/Agentik_Engine/omega_engine/store.py +97 -0
  52. package/omega/Agentik_Engine/omega_engine/supervisor.py +69 -0
  53. package/omega/Agentik_Engine/omega_engine/task.py +91 -0
  54. package/omega/Agentik_Engine/omega_engine/telegram.py +115 -0
  55. package/omega/Agentik_Engine/pyproject.toml +31 -0
  56. package/omega/Agentik_Engine/tests/__pycache__/test_audit_arsenal.cpython-313.pyc +0 -0
  57. package/omega/Agentik_Engine/tests/__pycache__/test_executor.cpython-313.pyc +0 -0
  58. package/omega/Agentik_Engine/tests/__pycache__/test_mission.cpython-313.pyc +0 -0
  59. package/omega/Agentik_Engine/tests/__pycache__/test_progress.cpython-313.pyc +0 -0
  60. package/omega/Agentik_Engine/tests/__pycache__/test_project.cpython-313.pyc +0 -0
  61. package/omega/Agentik_Engine/tests/__pycache__/test_reducer.cpython-313.pyc +0 -0
  62. package/omega/Agentik_Engine/tests/__pycache__/test_report.cpython-313.pyc +0 -0
  63. package/omega/Agentik_Engine/tests/test_audit_arsenal.py +80 -0
  64. package/omega/Agentik_Engine/tests/test_executor.py +96 -0
  65. package/omega/Agentik_Engine/tests/test_mission.py +64 -0
  66. package/omega/Agentik_Engine/tests/test_progress.py +69 -0
  67. package/omega/Agentik_Engine/tests/test_project.py +61 -0
  68. package/omega/Agentik_Engine/tests/test_reducer.py +144 -0
  69. package/omega/Agentik_Engine/tests/test_report.py +88 -0
  70. package/omega/Agentik_Extra/README.md +37 -0
  71. package/omega/Agentik_Extra/etc/agentik.env.example +19 -0
  72. package/omega/Agentik_Extra/etc/structure.yaml +46 -0
  73. package/omega/Agentik_Orchestration/README.md +43 -0
  74. package/omega/Agentik_Orchestration/autonomous/README.md +29 -0
  75. package/omega/Agentik_Orchestration/autonomous/example-agents.yaml +85 -0
  76. package/omega/Agentik_Orchestration/educators/README.md +55 -0
  77. package/omega/Agentik_Orchestration/topologies/aisb-oracle-worker.yaml +42 -0
  78. package/omega/Agentik_Orchestration/verifier/audit-router.yaml +26 -0
  79. package/omega/Agentik_Providers/README.md +62 -0
  80. package/omega/Agentik_Providers/claude/accounts.example.yaml +28 -0
  81. package/omega/Agentik_Providers/registry.yaml +30 -0
  82. package/omega/Agentik_Runtime/README.md +30 -0
  83. package/omega/Agentik_SSOT/README.md +36 -0
  84. package/omega/Agentik_SSOT/VERSION +1 -0
  85. package/omega/Agentik_SSOT/audits/a11yaudit.yaml +69 -0
  86. package/omega/Agentik_SSOT/audits/apiaudit.yaml +71 -0
  87. package/omega/Agentik_SSOT/audits/automationaudit.yaml +77 -0
  88. package/omega/Agentik_SSOT/audits/codeaudit.yaml +63 -0
  89. package/omega/Agentik_SSOT/audits/copyaudit.yaml +68 -0
  90. package/omega/Agentik_SSOT/audits/dataaudit.yaml +76 -0
  91. package/omega/Agentik_SSOT/audits/debugaudit.yaml +75 -0
  92. package/omega/Agentik_SSOT/audits/dxaudit.yaml +78 -0
  93. package/omega/Agentik_SSOT/audits/featureaudit.yaml +73 -0
  94. package/omega/Agentik_SSOT/audits/flowaudit.yaml +72 -0
  95. package/omega/Agentik_SSOT/audits/logicaudit.yaml +75 -0
  96. package/omega/Agentik_SSOT/audits/motionaudit.yaml +67 -0
  97. package/omega/Agentik_SSOT/audits/perfaudit.yaml +71 -0
  98. package/omega/Agentik_SSOT/audits/refontaudit.yaml +77 -0
  99. package/omega/Agentik_SSOT/audits/retentionaudit.yaml +84 -0
  100. package/omega/Agentik_SSOT/audits/secaudit.yaml +73 -0
  101. package/omega/Agentik_SSOT/audits/seoaudit.yaml +75 -0
  102. package/omega/Agentik_SSOT/audits/uiuxaudit.yaml +61 -0
  103. package/omega/Agentik_SSOT/mcp/mcp-catalog.yaml +136 -0
  104. package/omega/Agentik_SSOT/rules/constitution.md +44 -0
  105. package/omega/Agentik_SSOT/schemas/event.schema.json +45 -0
  106. package/omega/Agentik_SSOT/schemas/task.schema.json +54 -0
  107. package/omega/Agentik_Tools/README.md +42 -0
  108. package/omega/Agentik_Tools/registry.json +15 -0
  109. package/package.json +43 -0
@@ -0,0 +1,72 @@
1
+ # flowaudit — 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: flowaudit
6
+ domain: flows
7
+ question: "Does the experience WORK — can a user complete every journey without getting lost or stuck?"
8
+ weight: 1.0
9
+ threshold: 85
10
+
11
+ applies_to:
12
+ roles: [worker]
13
+ changed: ["*"]
14
+
15
+ # GATHER — deterministic flow-shape detectors, run first, no LLM. Machine-checkable signals.
16
+ gather:
17
+ - name: routes
18
+ cmd: "find {path} -type f \\( -path '*app/*page.tsx' -o -path '*app/*page.jsx' -o -path '*pages/*' \\) 2>/dev/null || true"
19
+ when: "*.tsx,*.jsx,*.ts,*.js"
20
+ - name: noop-handlers
21
+ cmd: "grep -rnE 'on(Click|Submit)=\\{?\\(\\s*\\)\\s*=>\\s*\\{?\\s*\\}|href=[\"'\\'']#[\"'\\'']' {path} || true"
22
+ when: "*.tsx,*.jsx"
23
+ - name: empty-state-markers
24
+ cmd: "grep -rnE 'No items|No results|Nothing (here|found)|empty|Empty' {path} || true"
25
+ when: "*.tsx,*.jsx"
26
+ - name: error-boundaries
27
+ cmd: "grep -rnE 'ErrorBoundary|error\\.tsx|not-found\\.tsx|catch\\s*\\(' {path} || true"
28
+ when: "*.tsx,*.jsx,*.ts"
29
+
30
+ # PHASES — the agentic falsification pass investigates each. Flow-prosecutor scrutiny.
31
+ phases:
32
+ - id: hinge-flow
33
+ checks: "Identify the ONE journey that — if broken — makes the product worthless (signup->activation, purchase->delivery); audit it with 10x scrutiny end-to-end."
34
+ - id: flow-completeness
35
+ checks: "Every flow has a reachable entry, every step a clear single CTA and visible progress, a confirmed success state, and a sane next action — no flow that starts but cannot finish."
36
+ - id: state-machines
37
+ checks: "Every entity's lifecycle states are explicit, transitions guarded (no draft->completed skip), invalid transitions rejected not silently corrupting, no entity can get permanently stuck."
38
+ - id: happy-path
39
+ checks: "Walk each primary journey — data entered in step 1 survives to step 5, every action acknowledged under 100ms, the result is visible afterward in the dashboard/list."
40
+ - id: error-paths
41
+ checks: "For every flow exercise the dark paths — empty/invalid/boundary input, API failure mid-flow, slow/garbage responses, permission loss, double-submit; each handled gracefully."
42
+ - id: dead-ends
43
+ checks: "No state with no way out — unclosable modals, error pages with no home link, success pages with no next step, 'Processing...' that never resolves, empty results with no guidance."
44
+ - id: permission-auth-gaps
45
+ checks: "Every protected route redirects unauthenticated users and denies wrong roles; no IDOR via URL ID tampering; admin checks enforced server-side not just hidden in UI; session expiry handled."
46
+ - id: onboarding
47
+ checks: "First-run shows a guided path not an empty dashboard; the shortest path to the activation 'aha' action; empty states teach the user to create their first item."
48
+ - id: data-integrity
49
+ checks: "Input -> storage -> display roundtrip is identical (special chars, emoji, numbers, timezones); data created in flow A visible in flow B; deletes clean up all references."
50
+ - id: cross-session-continuity
51
+ checks: "Close/reopen browser preserves state, long flows resume rather than restart, real-time sync across tabs/users, active flows survive a deploy or migration."
52
+ - id: error-recovery
53
+ checks: "After a validation/network/payment error — form values preserved, focus on the errored field, actionable message, retry without double-charge; destructive actions undoable."
54
+ - id: notification-feedback
55
+ checks: "Every action gets a proportional reaction — no silent success, no silent failure, no state change without notice; progress communicated for long/background operations."
56
+ - id: empty-and-loading-states
57
+ checks: "Every list/table/dashboard has a designed zero-data state with a CTA, a layout-shaped loading skeleton, a styled error state with retry — never a blank or collapsed layout."
58
+ - id: destructive-actions
59
+ checks: "Delete/cancel/disconnect have a consequence-explaining confirmation, the confirm button is not the default, reversibility or clear irreversible warning, cascade effects disclosed."
60
+ - id: flow-entropy
61
+ checks: "Similar flows structured alike, same action same verb everywhere, back always means back, one consistent pattern for success/error/loading, no terminology drift."
62
+
63
+ falsification: >
64
+ The user is always lost; every button is a promise — FALSIFY each. Click
65
+ "Save": was data actually persisted? "Cancel anytime": can you cancel at every
66
+ point? Every PASS must cite at least 3 concrete checks (the route walked, the
67
+ state in the DB, the screenshot of the step). Categorise findings as
68
+ LABEL-vs-ACTION, PROMISE-vs-EXPERIENCE, STATE-vs-DISPLAY, or FEEDBACK-vs-TRUTH.
69
+ Happy paths are marketing; error paths, edge cases and permission denials are
70
+ reality — an untested dark path is an untested flow. Bias toward FAIL.
71
+
72
+ fix_loop: true
@@ -0,0 +1,75 @@
1
+ # logicaudit — 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: logicaudit
6
+ domain: logic
7
+ question: "Where is the system fighting itself — wasted computation, redundant paths, the wrong amount of engineering?"
8
+ weight: 1.0
9
+ threshold: 85
10
+
11
+ applies_to:
12
+ roles: [worker]
13
+ changed: ["*.ts", "*.tsx", "*.js", "*.jsx", "*.py", "*.go", "*.rs", "*.sh"]
14
+
15
+ # GATHER — deterministic tools, run first, no LLM. Machine-checkable findings.
16
+ gather:
17
+ - name: complexity-census
18
+ cmd: "for f in {path}; do c=$(grep -cE '(if |else|switch|case |for |while |&&|\\|\\||try|catch|\\?)' \"$f\" 2>/dev/null); echo \"$c $f\"; done | sort -rn | head -30 || true"
19
+ when: "*.ts,*.tsx,*.js,*.jsx,*.py,*.sh"
20
+ - name: monster-files
21
+ cmd: "wc -l {path} 2>/dev/null | sort -rn | awk '$1>500' || true"
22
+ when: "*.ts,*.tsx,*.js,*.jsx,*.py,*.go,*.rs,*.sh"
23
+ - name: deep-nesting
24
+ cmd: "grep -nE '^[[:space:]]{20,}[^[:space:]]' {path} 2>/dev/null | head -25 || true"
25
+ when: "*.ts,*.tsx,*.js,*.jsx,*.py"
26
+ - name: dead-exports
27
+ cmd: "npx --no-install ts-prune 2>/dev/null || true"
28
+ when: "*.ts,*.tsx"
29
+ - name: deep-clone-misuse
30
+ cmd: "grep -rnE 'JSON\\.parse\\(JSON\\.stringify\\(' --include='*.ts' --include='*.tsx' --include='*.js' --include='*.jsx' {path} || true"
31
+ when: "*.ts,*.tsx,*.js,*.jsx"
32
+
33
+ # PHASES — the agentic falsification pass investigates each, domain-specific.
34
+ phases:
35
+ - id: redundant-logic
36
+ checks: "Semantically identical logic in 3+ places; checks repeated across middleware/handler/service (blurs who owns validation); overlapping modules; chained data transforms; self-defeating logic (cache invalidated before read)."
37
+ - id: algorithmic-efficiency
38
+ checks: "Real Big-O of every loop/recursion; O(n^2) hidden as Array.find inside Array.map; N+1 query/fetch patterns; unnecessary computation (sort just to test existence); string concat / regex compile in loops."
39
+ - id: pipeline-efficiency
40
+ checks: "Sum of step times vs total pipeline time — overhead >50% means the pipeline design IS the bug; sequential steps with no data dependency; stages producing output nobody reads; restart-from-stage-1 vs checkpoint."
41
+ - id: orchestration-overhead
42
+ checks: "Hop count user→result — which hops are essential vs ceremony; dispatch overhead vs task size (task < dispatch cost → do it in-place); intent preserved or diluted per hop; coordination tax in multi-agent work."
43
+ - id: abstraction-fit
44
+ checks: "Over-abstraction (factory with one type, plugin system with one plugin, GenericHandler<T> always string); under-abstraction (15 lines copy-pasted 8×); wrong abstraction (UserService doing auth+billing+notifications)."
45
+ - id: state-machines
46
+ checks: "Implicit state from combined booleans (isLoading+hasError+isReady = impossible combos); states that CAN be represented but are impossible WILL be reached; missing transitions (Loading with no path to Error)."
47
+ - id: data-flow-entropy
48
+ checks: "Single source of truth per datum (same data in DB + local state + URL = 3 truths); transformation chain length; data duplication without sync; prop drilling through components that never use it; stale-data patterns."
49
+ - id: caching-intelligence
50
+ checks: "Missing caches (pure function re-called with same inputs, static reference data re-queried); ineffective caches (2% hit rate = wrong key granularity); invalidation correctness; caching at the right layer."
51
+ - id: parallelization-gaps
52
+ checks: "Independent ops awaited serially instead of Promise.all; N individual calls that should be one batch; load-everything-then-process instead of streaming; worker pool sized wrong for wait/compute ratio."
53
+ - id: config-complexity
54
+ checks: "Total config surface vs how many values are EVER changed from default; same value defined in .env AND config AND CLI AND default with undocumented precedence; invalid config caught at startup not first request."
55
+ - id: error-logic
56
+ checks: "Swallowed errors (empty catch, .catch(()=>null)); error info loss (rethrow as generic 'something went wrong', logged at INFO); retry on non-transient 4xx; retry without backoff/idempotency/ceiling; wrong fallback values."
57
+ - id: decision-tree-pruning
58
+ checks: "Arrow anti-pattern (if→if→if→if→logic) — flatten with guard clauses; 40-case switch that should be a lookup map; feature flags always-ON or always-OFF; routing that could be a simple table."
59
+ - id: over-engineering
60
+ checks: "Unused flexibility (EventEmitter with one listener, strategy pattern with one strategy); premature optimization; architecture astronautics (microservices for one dev, event sourcing for CRUD); speculative generality."
61
+ - id: under-engineering
62
+ checks: "Missing validation at boundaries (user input reaches DB unsanitized); missing error boundaries (one component crash kills the page); missing observability on critical paths; complex algorithm with zero comments."
63
+ - id: dead-logic
64
+ checks: "Unreachable code after return/throw; branches guarded by always-true/false conditions; functions defined-never-called-not-exported; dead feature flags; commented-out code blocks; unused imports/variables."
65
+
66
+ falsification: >
67
+ Complexity is guilt until proven innocent — every abstraction, config layer and
68
+ indirection must justify its existence with measurement or be eliminated. Every
69
+ optimization claim is a hypothesis: "this cache speeds it up" → prove it with hit-rate
70
+ numbers; "this abstraction reduces complexity" → count lines/branches before and after.
71
+ Categorise findings as CLAIM-vs-MEASUREMENT, ABSTRACTION-vs-USAGE, CACHE-vs-FRESHNESS,
72
+ PARALLEL-vs-SEQUENTIAL, RETRY-vs-IDEMPOTENT, or CONFIG-vs-HARDCODE. An optimization with
73
+ no measurable improvement is a failed hypothesis — revert it.
74
+
75
+ fix_loop: true
@@ -0,0 +1,67 @@
1
+ # motionaudit — 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: motionaudit
6
+ domain: motion
7
+ question: "Does it MOVE with purpose — does every animation earn its place and run at 60fps?"
8
+ weight: 1.0
9
+ threshold: 85
10
+
11
+ applies_to:
12
+ roles: [worker]
13
+ changed: ["*.tsx", "*.jsx", "*.css", "*.ts"]
14
+
15
+ # GATHER — one cheap deterministic signal: properties animated. The compositor rule
16
+ # (only transform/opacity are free) IS machine-checkable. Everything else needs the LLM.
17
+ gather:
18
+ - name: layout-paint-animation
19
+ cmd: "grep -rnE 'transition[^;]*(width|height|margin|padding|top|left|right|bottom|font-size|box-shadow|background-color)|animation:[^;]*(width|height|margin|padding|top|left)' {path} || true"
20
+ when: "*.css,*.tsx,*.jsx"
21
+ - name: reduced-motion
22
+ cmd: "grep -rn 'prefers-reduced-motion' {path} || true"
23
+ when: "*.css,*.tsx,*.jsx,*.ts"
24
+
25
+ # PHASES — the agentic falsification pass investigates each. Motion-designer scrutiny.
26
+ phases:
27
+ - id: motion-inventory
28
+ checks: "Catalog every animation — CSS transitions/keyframes, JS-driven (rAF, Web Animations API, GSAP, Framer Motion), scroll-driven, canvas/WebGL — with element, trigger, properties, duration, easing."
29
+ - id: purpose-verification
30
+ checks: "The hinge — apply the Purpose Test to each animation: does it COMMUNICATE state/causality, ORIENT the user, or CREATE meaning? Remove it mentally — if nothing is lost, it is PURPOSELESS."
31
+ - id: easing-system
32
+ checks: "Easing as a vocabulary — enters decelerate (ease-out), exits accelerate (ease-in); count unique curves; are they named tokens or arbitrary per-component cubic-beziers?"
33
+ - id: duration-consistency
34
+ checks: "Durations on a systematic scale (tokens), each in its appropriate range — micro 80-150ms, entrances 200-400ms, exits faster than entrances; total entry choreography under 800ms."
35
+ - id: choreography
36
+ checks: "Page entrances introduce themselves as a sequence following content hierarchy with consistent stagger; exits are swift and directional; state transitions communicate spatial relationships."
37
+ - id: scroll-animations
38
+ checks: "No scroll hijacking, user controls pace, gentle parallax (10-30%), progress-linked not fire-and-forget, passive listeners, IntersectionObserver unobserved after firing."
39
+ - id: page-transitions
40
+ checks: "Route changes animate with directional logic rather than hard-cut, shared-element continuity where possible, View Transitions API where supported, no long blank screens."
41
+ - id: micro-interactions
42
+ checks: "Every interactive element responds to hover/focus/press with physical feedback (translate/scale, not color-only), consistent timing, popovers appear FROM their trigger."
43
+ - id: loading-skeleton
44
+ checks: "Loading states are skeletons matching final layout (not bare spinners), shimmer is CSS-only, progressive reveal, smooth skeleton-to-content transition."
45
+ - id: webgl-canvas
46
+ checks: "WebGL/P5 justified over CSS, 60fps desktop / 30fps mobile, tiered fallback (WebGL2/WebGL1/static), lazy-loaded, geometries/textures disposed on unmount, paused when off-screen."
47
+ - id: css-performance
48
+ checks: "Animations use ONLY transform and opacity — animating width/height/margin/box-shadow triggers layout or paint; will-change used sparingly; no read-write-read forced reflow in loops."
49
+ - id: reduced-motion
50
+ checks: "prefers-reduced-motion is a designed alternative not a nuclear kill-all — state changes still visible (modal still opens instantly), ambient motion pausable, interaction never blocked."
51
+ - id: mobile-motion
52
+ checks: "Touch-specific :active feedback (not repurposed hover), gesture physics with momentum, safe-area respect, rAF paused when hidden, 30fps minimum under 4x CPU throttle."
53
+ - id: motion-meaning-gap
54
+ checks: "The absence of motion is a finding — list added/removed, counter updates, tab switches, accordions, filtering, sorting that hard-cut where a transition should communicate the change."
55
+ - id: motion-excess
56
+ checks: "Animations that harm — competing simultaneous motion, entrances over 600ms, distracting loops near text, redundant nested animations, gratuitous WebGL that could be CSS."
57
+
58
+ falsification: >
59
+ Every animation is guilty until proven purposeful. "It looks cool" is not a
60
+ reason — FALSIFY each animation's justification: what does the user understand
61
+ faster because of this motion? Every PASS must cite at least 3 concrete checks
62
+ (the grepped property, the measured duration, the frame trace). Categorise
63
+ findings as PURPOSE-vs-DECORATION, SYSTEM-vs-RANDOM, COMPOSITED-vs-EXPENSIVE,
64
+ or PRESENT-vs-MISSING. A page with one perfectly timed animation beats a page
65
+ with twelve good ones. Bias toward FAIL.
66
+
67
+ fix_loop: true
@@ -0,0 +1,71 @@
1
+ # perfaudit — 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: perfaudit
6
+ domain: performance
7
+ question: "Is it FAST ENOUGH for humans to care — or does it bleed milliseconds nobody measured?"
8
+ weight: 1.0
9
+ threshold: 85
10
+
11
+ applies_to:
12
+ roles: [worker]
13
+ changed: ["*.ts", "*.tsx", "*.js", "*.jsx", "*.css", "*.scss", "*.html", "*.py", "*.sql", "*.png", "*.jpg", "*.jpeg", "*.svg"]
14
+
15
+ # GATHER — deterministic tools, run first, no LLM. Machine-checkable findings.
16
+ gather:
17
+ - name: lighthouse
18
+ cmd: "npx --no-install lighthouse {path} --only-categories=performance --output=json --quiet --chrome-flags='--headless --no-sandbox' || true"
19
+ when: "*.html,*.tsx,*.jsx"
20
+ - name: build-size
21
+ cmd: "du -sh .next dist build out 2>/dev/null | sort -rh || true"
22
+ when: "*"
23
+ - name: largest-bundles
24
+ cmd: "find .next dist build out -name '*.js' -type f 2>/dev/null -exec du -h {} + | sort -rh | head -25 || true"
25
+ when: "*.ts,*.tsx,*.js,*.jsx"
26
+ - name: heavy-assets
27
+ cmd: "find . -path ./node_modules -prune -o -type f \\( -name '*.png' -o -name '*.jpg' -o -name '*.jpeg' -o -name '*.gif' \\) -size +200k -print -exec du -h {} + 2>/dev/null | sort -rh | head -25 || true"
28
+ when: "*.png,*.jpg,*.jpeg,*.svg,*.tsx,*.jsx"
29
+ - name: barrel-imports
30
+ cmd: "grep -rnE \"import +(\\* as )?[A-Za-z_]+ +from +['\\\"](lodash|moment|date-fns|rxjs|@mui/material|antd)['\\\"]\" --include='*.ts' --include='*.tsx' --include='*.js' --include='*.jsx' {path} || true"
31
+ when: "*.ts,*.tsx,*.js,*.jsx"
32
+
33
+ # PHASES — the agentic falsification pass investigates each, domain-specific.
34
+ phases:
35
+ - id: core-web-vitals
36
+ checks: "Measure LCP (<2.5s), INP (<200ms), CLS (<0.1), TTFB (<800ms), FCP (<1.8s) on the hinge page; re-run throttled at 3G + 4x CPU and watch the score collapse."
37
+ - id: bundle-bloat
38
+ checks: "Total initial JS compressed (<200KB target); barrel imports pulling whole libraries; duplicate deps at multiple versions; source maps shipped to prod."
39
+ - id: render-path
40
+ checks: "Render-blocking CSS/scripts in the critical path; unnecessary React re-renders; layout thrashing (read-write-read); long tasks >50ms blocking interactivity."
41
+ - id: js-execution
42
+ checks: "Parse cost per bundle; hydration time and mismatch errors; un-throttled scroll/resize handlers; async waterfalls that should be Promise.all."
43
+ - id: image-optimization
44
+ checks: "PNG/JPEG where WebP/AVIF saves 60-80%; images larger than display size; missing width/height (CLS); missing lazy-loading below the fold; missing fetchpriority on the LCP image."
45
+ - id: font-loading
46
+ checks: "WOFF2 used and subset to used glyphs; font-display:swap to prevent FOIT; critical fonts preloaded; layout shift when the web font swaps in."
47
+ - id: caching-strategy
48
+ checks: "Cache-Control + immutable on fingerprinted assets; repeated identical API calls that should be memoized/SWR-cached; deploy invalidates stale CSS/JS hashes."
49
+ - id: ssr-ssg-strategy
50
+ checks: "Each route uses the right rendering mode (SSR/SSG/ISR/CSR); static pages wrongly rendered per-request; SSR data fetching serial instead of parallel; streaming used for TTFB."
51
+ - id: code-splitting
52
+ checks: "Route-based and component-based splitting working; vendor/framework chunks separated; heavy components (charts, editors, maps) lazy-loaded behind dynamic import."
53
+ - id: api-response-times
54
+ checks: "Per-endpoint average <200ms and P95 <1s; over-fetching unused fields; sequential dependent calls on page load; missing pagination on list endpoints."
55
+ - id: n-plus-one
56
+ checks: "Same query template fired in a loop with different params; ORM relationships lacking eager loading; SELECT * where columns suffice; total queries per page load >10."
57
+ - id: db-query-performance
58
+ checks: "Queries >100ms; full table scans from missing indexes; joins/sorts without supporting indexes; large result sets without LIMIT; connection pool sized for concurrency."
59
+ - id: memory-leaks
60
+ checks: "Heap growth over time; detached DOM nodes; event listeners/timers/intervals/sockets never cleaned on unmount; unbounded caches and history stacks."
61
+ - id: resource-hints-third-party
62
+ checks: "LCP image and critical fonts preloaded; preconnect/dns-prefetch for third-party origins; render-blocking third-party scripts that could be deferred or facade-loaded."
63
+
64
+ falsification: >
65
+ Lighthouse scores lie — every green score must be re-verified throttled (3G + 4x CPU,
66
+ cold cache) and twice to rule out a one-off blip. Categorise findings as SCORE-vs-REALITY,
67
+ LAB-vs-FIELD, FIRST-vs-REPEAT, or AVERAGE-vs-P95. Every PASS cites ≥3 concrete
68
+ measurements with actual numbers. "It's fast for me" (warm cache, fast machine) is not
69
+ evidence. Bias toward FAIL — a 100 is earned, never assumed.
70
+
71
+ fix_loop: true
@@ -0,0 +1,77 @@
1
+ # refontaudit — 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
+ # Note: refontaudit is a senior REDESIGN engine, not a defect hunter. It observes
6
+ # what exists, classifies every screen KEEP/IMPROVE/RETHINK/KILL, and proposes the
7
+ # 3-5 evolution changes that resolve 80% of friction. Evolution beats revolution —
8
+ # touch the least, impact the most. "PASS" here means a ship-ready, data-grounded,
9
+ # confidence-scored refonte plan, not zero findings.
10
+
11
+ id: refontaudit
12
+ domain: redesign
13
+ question: "Is there a ship-ready refonte plan — does it preserve what works and fix only what data proves broken?"
14
+ weight: 1.0
15
+ threshold: 85
16
+
17
+ applies_to:
18
+ roles: [worker]
19
+ changed: ["*.tsx", "*.jsx", "*.css", "*.html", "*.vue"]
20
+
21
+ # GATHER — git churn is a real deterministic hotspot signal (files changed most = most problematic).
22
+ # Component/route inventory grounds the Keep Audit. No tool can decide KEEP vs RETHINK — the LLM does.
23
+ gather:
24
+ - name: churn-hotspots
25
+ cmd: "git -C {path} log --since='6 months ago' --pretty=format: --name-only --diff-filter=M 2>/dev/null | grep -E 'app/|pages/|components/' | sort | uniq -c | sort -rn | head -30 || true"
26
+ when: "*"
27
+ - name: shadcn-usage
28
+ cmd: "grep -rl '@/components/ui' {path} 2>/dev/null || true"
29
+ when: "*.tsx,*.jsx"
30
+ - name: routes
31
+ cmd: "find {path} -type f \\( -path '*app/*page.tsx' -o -path '*pages/*' \\) 2>/dev/null || true"
32
+ when: "*.tsx,*.jsx,*.ts,*.js"
33
+
34
+ # PHASES — the agentic pass works each. Senior lead-dev + UX-designer judgment.
35
+ phases:
36
+ - id: inventory
37
+ checks: "Crawl every route in scope, screenshot at 1440/1024/375px, map shadcn usage, extract font stack and palette; under 3 routes or no shadcn means wrong project — abort."
38
+ - id: current-ia
39
+ checks: "Build the IA tree (sidebar -> pages -> sub-pages -> modals), classify each screen (list/detail/form/overview/settings/empty), flag orphaned screens and nav-to-nothing stubs."
40
+ - id: current-flows
41
+ checks: "Trace the top 5 user intents from dashboard to completed action; count clicks to primary action, context switches, waiting states; mark friction (>3 clicks, modal-in-modal, full reloads)."
42
+ - id: density-hierarchy
43
+ checks: "Per top-level screen measure items-per-viewport, visual hierarchy depth, primary-action clarity (yes/no/ambiguous), whitespace ratio — density is a feature only with clear hierarchy."
44
+ - id: data-collection
45
+ checks: "Read real data before redesigning — Linear ticket hotspots per page, console-error hotspots, analytics if configured, git-churn hotspots; the top 3 pages are the priority targets."
46
+ - id: user-story-mining
47
+ checks: "Extract 10 user stories (as-a/I-want/so-that) with frequency and friction; prioritize by frequency x friction into P1/P2/P3; this list drives every later proposal."
48
+ - id: keep-audit
49
+ checks: "The hinge of restraint — classify EVERY screen KEEP (works, untouchable) / IMPROVE (good bones, targeted change) / RETHINK (wrong approach) / KILL (no story, no traffic, orphan)."
50
+ - id: clarity-gate
51
+ checks: "5-second Gestalt test per screen — can the user answer 'what is this page for?' and 'what is the primary action?'; score pass/partial/fail; compute current clarity percentage."
52
+ - id: hypothesis-falsification
53
+ checks: "Generate 3 data-grounded hypotheses for why the design fails (worst ticket-hotspot page, worst-friction P1 story, worst clarity screen); only hypotheses that survive falsification become rationale."
54
+ - id: pattern-mapping
55
+ checks: "For each high-friction P1/P2 story match a proven pattern from real reference products (Linear/Vercel/Stripe), grounded in the user story it serves — not 'it looks nice'; flag gaps needing custom solutions."
56
+ - id: ia-proposal
57
+ checks: "The hinge — name the 3-5 specific evolution changes resolving 80% of friction (each citing a user story + data + reference); never change the nav model unless >50% of screens are RETHINK."
58
+ - id: workflow-redesign
59
+ checks: "For each P1 story show before/after click count and context switches with happy path plus 2 edge cases; redesign only flows touching IMPROVE/RETHINK screens, never KEEP screens."
60
+ - id: component-composition
61
+ checks: "Map each new/improved page to a real shadcn component tree with typed composite interfaces; KEEP screens get no new components — this prevents 'while we're here' scope creep."
62
+ - id: interaction-state-model
63
+ checks: "Define keyboard grammar, hover/focus rules, empty/loading/error patterns, and the state architecture (URL vs server vs UI vs selection) so shared links and the back button restore exact state."
64
+ - id: hinge-stress-test
65
+ checks: "Stress the top 3 proposed changes against 10 scenarios — new user/0 data, power user/10k items keyboard-only, mobile 375px, dark mode, long names, RTL, offline, interruption, screen reader, 1000-item lists."
66
+
67
+ falsification: >
68
+ A refonte without user stories is decoration; without data is guessing;
69
+ without a Keep Audit is vandalism. FALSIFY every proposal — it must trace to a
70
+ P1/P2 user story AND a measured hotspot, or its confidence collapses. Evolution
71
+ beats revolution: a senior never reaches for revolution first. Categorise gaps
72
+ as KEEP-TOUCHED (a working screen was redesigned — automatic fail),
73
+ STORYLESS-PROPOSAL (change serving no user story), or HINGE-UNPROVEN (the
74
+ 3-5 changes failed 2+ of the 10 scenarios). Every proposal carries an honest
75
+ confidence score — nothing is 100%, senior humility. Bias toward FAIL.
76
+
77
+ fix_loop: true
@@ -0,0 +1,84 @@
1
+ # retentionaudit — 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
+ # READ-ONLY: this audit PROPOSES retention opportunities (RICE x Fogg scored),
6
+ # it never edits source. fix_loop is false — output hands off to /planner.
7
+
8
+ id: retentionaudit
9
+ domain: retention
10
+ question: "What would the CPO of a $1B SaaS find that we MISSED to make users stay 3x longer?"
11
+ weight: 1.0
12
+ threshold: 85
13
+
14
+ applies_to:
15
+ roles: [worker]
16
+ changed: ["*"]
17
+
18
+ # GATHER — deterministic retention-surface detectors, run first, no LLM. Machine-checkable findings.
19
+ gather:
20
+ - name: routes
21
+ cmd: "find {path} -path '*/node_modules' -prune -o -type f \\( -name 'page.tsx' -o -name 'route.ts' -o -name '+page.svelte' \\) -print || true"
22
+ when: "*"
23
+ - name: empty-states
24
+ cmd: "grep -rnE 'isEmpty|hasNoData|emptyState|EmptyState|no items|nothing yet|aucun' {path} || true"
25
+ when: "*.tsx,*.jsx,*.vue,*.svelte"
26
+ - name: notification-triggers
27
+ cmd: "grep -rniE 'resend|sendgrid|onesignal|postmark|trigger\\.dev|sendNotification|sendEmail' {path} || true"
28
+ when: "*"
29
+ - name: hooked-mechanisms
30
+ cmd: "grep -rniE 'streak|achievement|milestone|reward|badge|digest|weekly report' {path} || true"
31
+ when: "*"
32
+ - name: invite-share
33
+ cmd: "grep -rniE 'invite|share|inviteLink|shareUrl|copyLink|referral' {path} || true"
34
+ when: "*"
35
+ - name: keyboard-shortcuts
36
+ cmd: "grep -rniE 'useHotkeys|cmdK|cmd\\+k|ctrl\\+|<kbd' {path} || true"
37
+ when: "*"
38
+
39
+ # PHASES — the agentic falsification pass investigates each.
40
+ # Four expert lenses are applied across the phases: Hooked (Eyal), JTBD
41
+ # (Christensen), Power of Moments (Heath), Fogg B=MAT.
42
+ phases:
43
+ - id: hinge-capability
44
+ checks: "THE HINGE — identify the ONE experience that must be world-class for users to stay; compare STATED hinge (copy) vs OBSERVED hinge (where code/commits invest); a divergence is the single most damaging retention bug."
45
+ - id: user-journey
46
+ checks: "Trace every screen from sign-up to power-user; map transitions, entry and exit conditions; this journey feeds the drop-off forensics."
47
+ - id: drop-off-forensics
48
+ checks: "Per screen identify likely churn triggers — unvalidated forms, loaders without progress, blank empty states, blocking modals, auth/pricing walls before perceived value."
49
+ - id: aha-moment-latency
50
+ checks: "Identify the moment a new user goes 'now I get it'; how many steps from signup to aha; what blocks the users who never reach it."
51
+ - id: hooked-loops
52
+ checks: "Eyal lens — for each retention-driving feature score the 4 elements Trigger/Action/Variable-Reward/Investment; 4/4 strong, <=2/4 no loop."
53
+ - id: jobs-to-be-done
54
+ checks: "Christensen lens — per persona surface 3-5 jobs ('When [situation] I want to [job] so I can [outcome]'); does the product serve each job, or does the user hire a competitor/workaround?"
55
+ - id: personalization-debt
56
+ checks: "Per screen/feed/list — is order user-specific or global, are recommendations history-based, are defaults adapted (timezone, recently-used); generic feed = anyone could leave."
57
+ - id: onboarding-completeness
58
+ checks: "The first 7 days set LTV — welcome/checklist, first-task guidance, teaching empty states, day-1/3/7 nudges, measurable activation criteria; onboarding must DELIVER value not teach the UI."
59
+ - id: empty-states
60
+ checks: "Every component that renders with no data must teach + invite + commit (3 elements); a blank rectangle is malpractice; empty-state CTAs must reach value in one step."
61
+ - id: power-of-moments
62
+ checks: "Heath lens — audit peaks (amplify), pits (fix/remove), transitions (mark with ceremony), plateaus (interrupt with surprise); 'fine but never memorable' products churn."
63
+ - id: network-effects
64
+ checks: "One-click invite of a teammate/friend; does the product get MORE valuable as N users join; public shareable artifacts/embeds; compounding UGC."
65
+ - id: monetization-hooks
66
+ checks: "Value-gate placed after aha and before commitment; upgrade trigger contextual (limit reached) not nag-banner; price anchor visible early; clear team-plan path."
67
+ - id: reactivation-flows
68
+ checks: "Win-back for dormant users — D3/D7/D14/D30/D90 email cadence, 'what you missed' digest, value-first re-engagement (never dark-pattern FOMO)."
69
+ - id: discoverability-and-power-user
70
+ checks: "Are powerful features hidden — command-palette completeness, settings organization, changelog visibility; for the top 1% propose keyboard shortcuts, bulk ops, API/export."
71
+ - id: prioritized-roadmap
72
+ checks: "Synthesise all proposals into a RICE-scored list, then Fogg B=MAT (M x A x T) on the top 15; priority = RICE_normalized x (1 + Fogg/27); flag high-RICE/low-Fogg ideas and anti-patterns (vanity hooks, dark patterns, shallow personalization, feature bloat)."
73
+
74
+ falsification: >
75
+ The product implicitly claims users will stick — DISPROVE it. Find every reason
76
+ a smart user would churn after week 1, month 1, month 3. Every claim and every
77
+ proposed opportunity must cite at least 3 concrete checks with actual output
78
+ (grep proving a drop-off friction exists, a competitor URL proving a parity gap).
79
+ "Probably broken" / "competitors all" / "users likely" without evidence is an
80
+ automatic FAIL of the finding. Engagement is not retention — score every proposal
81
+ against month-3 retention, not DAU. This audit is READ-ONLY: it proposes and
82
+ ranks, it never codes — implementation is a separate authorized mission.
83
+
84
+ fix_loop: false
@@ -0,0 +1,73 @@
1
+ # secaudit — 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: secaudit
6
+ domain: security
7
+ question: "Can an attacker make this system work AGAINST its users?"
8
+ weight: 1.0
9
+ threshold: 85
10
+
11
+ applies_to:
12
+ roles: [worker]
13
+ changed: ["*.py", "*.ts", "*.tsx", "*.js", "*.jsx", "*.go", "*.rs", "*.env*", "*.yml", "*.yaml", "Dockerfile", "package.json"]
14
+
15
+ # GATHER — deterministic security scanners, run first, no LLM.
16
+ gather:
17
+ - name: gitleaks
18
+ cmd: "gitleaks detect --source {path} --no-banner --redact -f json --report-path /dev/stdout || true"
19
+ when: "*"
20
+ - name: semgrep
21
+ cmd: "semgrep --config=p/security-audit --config=p/owasp-top-ten --json --quiet {path} || true"
22
+ when: "*.py,*.ts,*.tsx,*.js,*.jsx,*.go"
23
+ - name: npm-audit
24
+ cmd: "npm audit --json --prefix {path} || true"
25
+ when: "package.json"
26
+ - name: pip-audit
27
+ cmd: "pip-audit -f json --progress-spinner off || true"
28
+ when: "*.py"
29
+ - name: bandit
30
+ cmd: "bandit -r {path} -f json -q || true"
31
+ when: "*.py"
32
+ - name: trufflehog
33
+ cmd: "trufflehog filesystem {path} --json --no-update --fail || true"
34
+ when: "*"
35
+
36
+ # PHASES — the agentic falsification pass investigates each.
37
+ phases:
38
+ - id: hinge-auth-boundary
39
+ checks: "Identify THE auth/authz boundary gating every protected resource; prove it cannot be bypassed by direct URL, HTTP method switch, header injection (X-Forwarded-For, X-Original-URL), path normalisation or case variation."
40
+ - id: injection
41
+ checks: "Trace every user input to a SQL/NoSQL query, shell exec, template, LDAP or eval sink — find string-concatenated queries, missing parameterisation, unvalidated $ne/$gt operators, command injection via child_process."
42
+ - id: xss-output-encoding
43
+ checks: "Every input reflected or stored that reaches HTML/JS/URL/CSS output — find unescaped sinks: innerHTML, dangerouslySetInnerHTML, document.write, v-html; verify context-correct encoding and CSP without unsafe-inline/unsafe-eval."
44
+ - id: broken-access-control
45
+ checks: "IDOR — can user A reach user B's resource by changing an ID? Vertical escalation — can a regular user hit admin routes or self-promote via isAdmin/role params? Sequential IDs, mass assignment, missing per-mutation authz checks."
46
+ - id: secrets-exposure
47
+ checks: "Active secrets in repo, git history, CI config, client bundles or NEXT_PUBLIC_ vars; .env actually gitignored; high-entropy strings and known key prefixes (sk_live_, AKIA, AIza, ghp_); measure blast radius of each leaked secret."
48
+ - id: authn-session-jwt
49
+ checks: "Password hashing (bcrypt/argon2 cost), reset-token entropy and single-use, account enumeration, MFA bypass; JWT alg:none accepted, alg confusion RS256->HS256, weak secret, missing exp/iss/aud validation, tokens in localStorage/URL."
50
+ - id: session-cookies-csrf
51
+ checks: "Session cookies HttpOnly+Secure+SameSite; session rotation on login/privilege change, server-side invalidation on logout; CSRF protection (synchroniser token or SameSite) on every state-changing request."
52
+ - id: ssrf-open-redirect
53
+ checks: "User-controlled URLs reaching server-side fetches — can they hit 127.0.0.1, cloud metadata 169.254.169.254, internal services? Redirect params (next, returnUrl, redirect_uri) — protocol-relative // and @-host bypasses enabling phishing/token theft."
54
+ - id: cors-headers
55
+ checks: "Access-Control-Allow-Origin not wildcard (especially with credentials) and not blindly reflecting Origin; security headers present — HSTS, CSP, X-Frame-Options/frame-ancestors, X-Content-Type-Options nosniff, Referrer-Policy, Permissions-Policy."
56
+ - id: input-validation-uploads
57
+ checks: "Server-side type/length/range/format validation on every endpoint param (schema like Zod/Convex validators); file uploads validate magic bytes not just extension/MIME, store outside web root, block SVG-with-script and path traversal."
58
+ - id: rate-limit-bruteforce
59
+ checks: "Login, registration, password-reset and MFA-code endpoints rate-limited with account lockout; limits not bypassable via X-Forwarded-For rotation or endpoint case/method variation; ReDoS and unbounded pagination/batch as DoS vectors."
60
+ - id: dependency-cve
61
+ checks: "Critical/high CVEs in dependencies from npm/pip audit — verify the vulnerable code path is actually reachable; lockfile committed with integrity hashes; postinstall scripts, typosquats, missing SRI on CDN scripts."
62
+ - id: insecure-design-logging
63
+ checks: "Business-logic flaws (negative price, integer overflow, payment race conditions); insecure deserialization; auth/access failures logged without leaking PII or secrets; stack traces and DB errors not exposed to clients."
64
+
65
+ falsification: >
66
+ Do not check that a defense EXISTS — prove it can be BYPASSED. Every PASS must
67
+ cite >=3 concrete commands run (curl with the attack payload, grep for the sink,
68
+ the scanner finding) with verbatim output. Categorise each finding as
69
+ CLAIM-vs-REALITY, CLIENT-vs-SERVER, AUTH-vs-AUTHZ, CONFIG-vs-RUNTIME or
70
+ FRAMEWORK-vs-APPLICATION. A 401/403 from a probe is evidence of a defense, not
71
+ a failure to investigate. Bias hard toward FAIL — the attacker needs only one path.
72
+
73
+ fix_loop: true
@@ -0,0 +1,75 @@
1
+ # seoaudit — 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: seoaudit
6
+ domain: seo
7
+ question: "Is the site DISCOVERABLE — can search engines crawl, understand, and rank it?"
8
+ weight: 1.0
9
+ threshold: 85
10
+
11
+ applies_to:
12
+ roles: [worker]
13
+ changed: ["*.tsx", "*.jsx", "*.html", "*.astro", "*.vue", "*.svelte", "robots.txt", "sitemap.xml", "next.config.*"]
14
+
15
+ # GATHER — deterministic SEO-signal detectors, run first, no LLM. Machine-checkable findings.
16
+ gather:
17
+ - name: robots-sitemap
18
+ cmd: "ls -1 public/robots.txt public/sitemap.xml app/robots.ts app/sitemap.ts robots.txt sitemap.xml 2>/dev/null || true"
19
+ when: "*"
20
+ - name: meta-tags
21
+ cmd: "grep -rnE '<title>|name=\"description\"|property=\"og:|name=\"twitter:|rel=\"canonical\"|name=\"robots\"' {path} || true"
22
+ when: "*.tsx,*.jsx,*.html,*.astro,*.vue,*.svelte"
23
+ - name: schema-markup
24
+ cmd: "grep -rnE 'application/ld\\+json|schema.org|@type|JsonLd|itemtype' {path} || true"
25
+ when: "*.tsx,*.jsx,*.html,*.astro"
26
+ - name: heading-structure
27
+ cmd: "grep -rcnE '<h1|<h2|<h3' {path} || true"
28
+ when: "*.tsx,*.jsx,*.html"
29
+ - name: images-alt
30
+ cmd: "grep -rnE '<img|<Image' {path} | grep -vE 'alt=' || true"
31
+ when: "*.tsx,*.jsx,*.html"
32
+ - name: lighthouse-seo
33
+ cmd: "npx --no-install lighthouse {url} --only-categories=seo --quiet --chrome-flags='--headless' --output=json 2>/dev/null || true"
34
+ when: "*"
35
+
36
+ # PHASES — the agentic falsification pass investigates each.
37
+ phases:
38
+ - id: crawlability
39
+ checks: "robots.txt valid with no critical pages blocked; meta robots not accidentally noindex; X-Robots-Tag headers; crawl budget not wasted on filter/search URLs."
40
+ - id: indexability
41
+ checks: "THE HINGE — XML sitemap contains only indexable canonical pages; no orphan pages; no index bloat; duplicate content (HTTP/HTTPS, www, trailing slash) collapsed."
42
+ - id: canonical-tags
43
+ checks: "Every page has a self-referencing canonical; no canonical to non-existent URLs; no chain canonicals A->B->C; consistent across HTTP/HTTPS and www/non-www."
44
+ - id: core-web-vitals
45
+ checks: "THE HINGE — LCP <2.5s, INP <200ms, CLS <0.1 on every template; field (CrUX) data not worse than lab; tested on throttled mobile."
46
+ - id: schema-markup
47
+ checks: "Correct Schema.org JSON-LD per page type (Organization/WebSite homepage, Article blog, Product, FAQPage); validates with no missing required properties; matches visible content."
48
+ - id: meta-tags
49
+ checks: "Unique title 50-60 chars with keyword near start; unique meta description 150-160 chars; complete Open Graph (og:image 1200x630) and Twitter Card tags."
50
+ - id: heading-hierarchy
51
+ checks: "Exactly one H1 per page containing the primary keyword; H2s for sections; no skipped heading levels; headings reflect content hierarchy not styling."
52
+ - id: js-rendering
53
+ checks: "View-source vs rendered DOM contain the same content; critical content and meta tags in initial HTML; internal links as <a href> not onClick routers; SSR/SSG for key pages."
54
+ - id: mobile-friendliness
55
+ checks: "Responsive design with viewport meta; no horizontal scroll; text >=16px; touch targets >=48px; no mobile/desktop content divergence (mobile-first indexing)."
56
+ - id: image-and-url-seo
57
+ checks: "Alt text on every informative image; descriptive file names; WebP/AVIF; lazy-load below fold; short lowercase hyphenated keyword-containing URLs; no session IDs."
58
+ - id: content-quality-eeat
59
+ checks: "Experience/Expertise/Authoritativeness/Trust — author credentials visible, topical depth, external citations, HTTPS, privacy policy, unique value over SERP rivals."
60
+ - id: internal-external-links
61
+ checks: "Every page within 3 clicks of homepage; descriptive anchor text; breadcrumbs; no broken internal/external links; nofollow on sponsored/untrusted links."
62
+ - id: redirects-and-errors
63
+ checks: "No redirect chains or loops; 301 for permanent and 302 only for temporary; custom 404 returning real 404 status (not soft 404); 410 for removed content."
64
+ - id: geo-aeo
65
+ checks: "AI-search readiness — question-answer format, machine-parseable lists/tables, cited factual claims, llms.txt, entity optimization, passage-level citability."
66
+
67
+ falsification: >
68
+ A green Lighthouse SEO score lies — it passes 14 basic checks and says nothing
69
+ about indexation, content authority, or competitive position. Every PASS must
70
+ cite at least 3 concrete checks with actual output (fetch as Googlebot, view-source
71
+ vs rendered DOM, exact-phrase SERP search). Categorise findings as LAB-vs-FIELD,
72
+ DESKTOP-vs-MOBILE, CACHED-vs-RENDERED, TODAY-vs-TREND, or TECHNICAL-vs-CONTENT.
73
+ If Googlebot cannot reach or render a page, it does not exist. Bias toward FAIL.
74
+
75
+ fix_loop: true