kenaz 0.0.0-stage → 0.3.2
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/bin/kenaz.js +3 -0
- package/core/.agents/skills/remotion-best-practices/SKILL.md +61 -0
- package/core/.agents/skills/remotion-best-practices/rules/3d.md +86 -0
- package/core/.agents/skills/remotion-best-practices/rules/animations.md +27 -0
- package/core/.agents/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/core/.agents/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/core/.agents/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
- package/core/.agents/skills/remotion-best-practices/rules/assets.md +78 -0
- package/core/.agents/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
- package/core/.agents/skills/remotion-best-practices/rules/audio.md +169 -0
- package/core/.agents/skills/remotion-best-practices/rules/calculate-metadata.md +134 -0
- package/core/.agents/skills/remotion-best-practices/rules/can-decode.md +81 -0
- package/core/.agents/skills/remotion-best-practices/rules/charts.md +120 -0
- package/core/.agents/skills/remotion-best-practices/rules/compositions.md +154 -0
- package/core/.agents/skills/remotion-best-practices/rules/display-captions.md +184 -0
- package/core/.agents/skills/remotion-best-practices/rules/extract-frames.md +229 -0
- package/core/.agents/skills/remotion-best-practices/rules/ffmpeg.md +38 -0
- package/core/.agents/skills/remotion-best-practices/rules/fonts.md +152 -0
- package/core/.agents/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/core/.agents/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/core/.agents/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
- package/core/.agents/skills/remotion-best-practices/rules/gifs.md +141 -0
- package/core/.agents/skills/remotion-best-practices/rules/images.md +134 -0
- package/core/.agents/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
- package/core/.agents/skills/remotion-best-practices/rules/light-leaks.md +73 -0
- package/core/.agents/skills/remotion-best-practices/rules/lottie.md +70 -0
- package/core/.agents/skills/remotion-best-practices/rules/maps.md +412 -0
- package/core/.agents/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
- package/core/.agents/skills/remotion-best-practices/rules/measuring-text.md +140 -0
- package/core/.agents/skills/remotion-best-practices/rules/parameters.md +109 -0
- package/core/.agents/skills/remotion-best-practices/rules/sequencing.md +118 -0
- package/core/.agents/skills/remotion-best-practices/rules/sfx.md +30 -0
- package/core/.agents/skills/remotion-best-practices/rules/subtitles.md +36 -0
- package/core/.agents/skills/remotion-best-practices/rules/tailwind.md +11 -0
- package/core/.agents/skills/remotion-best-practices/rules/text-animations.md +20 -0
- package/core/.agents/skills/remotion-best-practices/rules/timing.md +179 -0
- package/core/.agents/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
- package/core/.agents/skills/remotion-best-practices/rules/transitions.md +197 -0
- package/core/.agents/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
- package/core/.agents/skills/remotion-best-practices/rules/trimming.md +51 -0
- package/core/.agents/skills/remotion-best-practices/rules/videos.md +171 -0
- package/core/.agents/skills/remotion-best-practices/rules/voiceover.md +99 -0
- package/core/.agents/skills/supabase-postgres-best-practices/AGENTS.md +90 -0
- package/core/.agents/skills/supabase-postgres-best-practices/CLAUDE.md +1 -0
- package/core/.agents/skills/supabase-postgres-best-practices/SKILL.md +64 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/query-index-types.md +45 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
- package/core/.agents/skills/supabase-postgres-best-practices/references/security-rls-performance.md +57 -0
- package/core/.agents/skills/typesafe-ai/LICENSE +21 -0
- package/core/.agents/skills/typesafe-ai/SKILL.md +149 -0
- package/core/.agents/skills/vercel-react-best-practices/AGENTS.md +2934 -0
- package/core/.agents/skills/vercel-react-best-practices/SKILL.md +136 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/core/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/core/.claude/agents/pcb-reviewer.md +146 -0
- package/core/.claude/commands/Amelia.md +5 -0
- package/core/.claude/commands/Ansuz.md +38 -0
- package/core/.claude/commands/Huginn.md +25 -0
- package/core/.claude/commands/agent-worker.md +168 -0
- package/core/.claude/commands/architect.md +24 -0
- package/core/.claude/commands/archive.md +24 -0
- package/core/.claude/commands/canary.md +17 -0
- package/core/.claude/commands/incident.md +15 -0
- package/core/.claude/commands/init.md +112 -0
- package/core/.claude/commands/legacy_dev.md +18 -0
- package/core/.claude/commands/product-review.md +131 -0
- package/core/.claude/commands/review.md +14 -0
- package/core/.claude/commands/security.md +15 -0
- package/core/.claude/commands/spec.md +22 -0
- package/core/.claude/commands/strategy.md +141 -0
- package/core/.claude/commands/sunny.md +1 -0
- package/core/.claude/commands//347/224/242/345/223/201.md +15 -0
- package/core/.claude/commands//347/224/242/345/223/201/346/252/242/350/246/226.md +129 -0
- package/core/.claude/commands//350/250/255/350/250/210.md +14 -0
- package/core/.claude/commands//350/251/225/344/274/260.md +16 -0
- package/core/.claude/commands//351/200/262/345/272/246.md +15 -0
- package/core/.claude/hooks/__tests__/substrate.test.js +122 -0
- package/core/.claude/hooks/__tests__/task-1866-cli-guard.test.js +193 -0
- package/core/.claude/hooks/__tests__/task-1977-dedupe-guard.test.js +125 -0
- package/core/.claude/hooks/__tests__/task-2087-mark-landed-idempotent.test.js +128 -0
- package/core/.claude/hooks/__tests__/task-2253-null-tip-marker-reuse.test.js +84 -0
- package/core/.claude/hooks/__tests__/task-2381-project-guard-walkup.test.js +53 -0
- package/core/.claude/hooks/_ansuz-conversation.js +183 -0
- package/core/.claude/hooks/_ansuz-conversation.test.js +90 -0
- package/core/.claude/hooks/_dedupe-guard.js +75 -0
- package/core/.claude/hooks/_peer-project-root.js +113 -0
- package/core/.claude/hooks/_peer-project-root.test.js +121 -0
- package/core/.claude/hooks/_peer-waiting-line.js +27 -0
- package/core/.claude/hooks/_project-guard.js +45 -0
- package/core/.claude/hooks/_run-user-prompt.js +134 -0
- package/core/.claude/hooks/_run-user-prompt.test.js +80 -0
- package/core/.claude/hooks/_session-identity.js +62 -0
- package/core/.claude/hooks/_session-pin.js +34 -0
- package/core/.claude/hooks/_session-pin.test.js +89 -0
- package/core/.claude/hooks/_signal-fence.js +17 -0
- package/core/.claude/hooks/_substrate-paths.js +95 -0
- package/core/.claude/hooks/_user-scope.js +23 -0
- package/core/.claude/hooks/ansuz-session-pin-via-turn-context.test.js +52 -0
- package/core/.claude/hooks/ansuz-session-pin.js +171 -0
- package/core/.claude/hooks/ansuz-session-pin.test.js +140 -0
- package/core/.claude/hooks/context-check.js +51 -0
- package/core/.claude/hooks/core-resolve.js +230 -0
- package/core/.claude/hooks/daemon-outbox-hook.js +139 -0
- package/core/.claude/hooks/fatigue-check.js +52 -0
- package/core/.claude/hooks/handoff-snapshot-on-commit.js +154 -0
- package/core/.claude/hooks/handoff-snapshot-on-decision.js +188 -0
- package/core/.claude/hooks/handoff-snapshot-on-question.js +158 -0
- package/core/.claude/hooks/handoff-staleness.js +197 -0
- package/core/.claude/hooks/jev-thalamus-context.js +17 -0
- package/core/.claude/hooks/jev-thalamus-context.test.js +41 -0
- package/core/.claude/hooks/lease-release.js +119 -0
- package/core/.claude/hooks/lease-touch.js +96 -0
- package/core/.claude/hooks/memory-guard.js +723 -0
- package/core/.claude/hooks/memory-guard.test.js +574 -0
- package/core/.claude/hooks/reflex-feedback.js +5 -0
- package/core/.claude/hooks/session-init.ps1 +49 -0
- package/core/.claude/hooks/sound-event.js +70 -0
- package/core/.claude/hooks/sound-event.sh +37 -0
- package/core/.claude/hooks/stream-delta.js +169 -0
- package/core/.claude/hooks/synapse-first-investigation.js +326 -0
- package/core/.claude/hooks/synapse-first-investigation.test.js +126 -0
- package/core/.claude/hooks/task-bridge.js +33 -0
- package/core/.claude/hooks/turn-context-peer.test.js +115 -0
- package/core/.claude/hooks/turn-context-session-line.test.js +69 -0
- package/core/.claude/hooks/turn-context.js +215 -0
- package/core/.claude/hooks/worktree-create.js +1232 -0
- package/core/.claude/hooks/worktree-remove.js +181 -0
- package/core/.claude/no-hooks.settings.json +3 -0
- package/core/.claude/settings.json +180 -0
- package/core/.claude/skills/adapt/SKILL.md +199 -0
- package/core/.claude/skills/animate/SKILL.md +190 -0
- package/core/.claude/skills/architect_agent/SKILL.md +408 -0
- package/core/.claude/skills/assessment_agent/SKILL.md +289 -0
- package/core/.claude/skills/audit/SKILL.md +129 -0
- package/core/.claude/skills/backend_agent/SKILL.md +407 -0
- package/core/.claude/skills/backend_engineer/SKILL.md +788 -0
- package/core/.claude/skills/bolder/SKILL.md +132 -0
- package/core/.claude/skills/clarify/SKILL.md +180 -0
- package/core/.claude/skills/code_reviewer/SKILL.md +305 -0
- package/core/.claude/skills/code_reviewer/patterns.yaml +85 -0
- package/core/.claude/skills/colorize/SKILL.md +158 -0
- package/core/.claude/skills/critique/SKILL.md +118 -0
- package/core/.claude/skills/delight/SKILL.md +317 -0
- package/core/.claude/skills/designer/SKILL.md +845 -0
- package/core/.claude/skills/dev_agent/SKILL.md +503 -0
- package/core/.claude/skills/developer/SKILL.md +792 -0
- package/core/.claude/skills/distill/SKILL.md +137 -0
- package/core/.claude/skills/extract/SKILL.md +95 -0
- package/core/.claude/skills/feature_agent/SKILL.md +303 -0
- package/core/.claude/skills/frontend-design/SKILL.md +127 -0
- package/core/.claude/skills/frontend-design/reference/color-and-contrast.md +132 -0
- package/core/.claude/skills/frontend-design/reference/interaction-design.md +123 -0
- package/core/.claude/skills/frontend-design/reference/motion-design.md +99 -0
- package/core/.claude/skills/frontend-design/reference/responsive-design.md +114 -0
- package/core/.claude/skills/frontend-design/reference/spatial-design.md +100 -0
- package/core/.claude/skills/frontend-design/reference/typography.md +131 -0
- package/core/.claude/skills/frontend-design/reference/ux-writing.md +107 -0
- package/core/.claude/skills/frontend_agent/SKILL.md +327 -0
- package/core/.claude/skills/harden/SKILL.md +358 -0
- package/core/.claude/skills/heimdall/SKILL.md +84 -0
- package/core/.claude/skills/huginn/SKILL.md +208 -0
- package/core/.claude/skills/incident_response/SKILL.md +315 -0
- package/core/.claude/skills/legacy_dev/SKILL.md +202 -0
- package/core/.claude/skills/normalize/SKILL.md +67 -0
- package/core/.claude/skills/onboard/SKILL.md +243 -0
- package/core/.claude/skills/optimization_agent/SKILL.md +340 -0
- package/core/.claude/skills/optimize/SKILL.md +269 -0
- package/core/.claude/skills/pcb-review/SKILL.md +39 -0
- package/core/.claude/skills/polish/SKILL.md +202 -0
- package/core/.claude/skills/product_manager/SKILL.md +1091 -0
- package/core/.claude/skills/qa_engineer/SKILL.md +1269 -0
- package/core/.claude/skills/quieter/SKILL.md +118 -0
- package/core/.claude/skills/remotion-best-practices/SKILL.md +61 -0
- package/core/.claude/skills/remotion-best-practices/rules/3d.md +86 -0
- package/core/.claude/skills/remotion-best-practices/rules/animations.md +27 -0
- package/core/.claude/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/core/.claude/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/core/.claude/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
- package/core/.claude/skills/remotion-best-practices/rules/assets.md +78 -0
- package/core/.claude/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
- package/core/.claude/skills/remotion-best-practices/rules/audio.md +169 -0
- package/core/.claude/skills/remotion-best-practices/rules/calculate-metadata.md +134 -0
- package/core/.claude/skills/remotion-best-practices/rules/can-decode.md +81 -0
- package/core/.claude/skills/remotion-best-practices/rules/charts.md +120 -0
- package/core/.claude/skills/remotion-best-practices/rules/compositions.md +154 -0
- package/core/.claude/skills/remotion-best-practices/rules/display-captions.md +184 -0
- package/core/.claude/skills/remotion-best-practices/rules/extract-frames.md +229 -0
- package/core/.claude/skills/remotion-best-practices/rules/ffmpeg.md +38 -0
- package/core/.claude/skills/remotion-best-practices/rules/fonts.md +152 -0
- package/core/.claude/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/core/.claude/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/core/.claude/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
- package/core/.claude/skills/remotion-best-practices/rules/gifs.md +141 -0
- package/core/.claude/skills/remotion-best-practices/rules/images.md +134 -0
- package/core/.claude/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
- package/core/.claude/skills/remotion-best-practices/rules/light-leaks.md +73 -0
- package/core/.claude/skills/remotion-best-practices/rules/lottie.md +70 -0
- package/core/.claude/skills/remotion-best-practices/rules/maps.md +412 -0
- package/core/.claude/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
- package/core/.claude/skills/remotion-best-practices/rules/measuring-text.md +140 -0
- package/core/.claude/skills/remotion-best-practices/rules/parameters.md +109 -0
- package/core/.claude/skills/remotion-best-practices/rules/sequencing.md +118 -0
- package/core/.claude/skills/remotion-best-practices/rules/sfx.md +30 -0
- package/core/.claude/skills/remotion-best-practices/rules/subtitles.md +36 -0
- package/core/.claude/skills/remotion-best-practices/rules/tailwind.md +11 -0
- package/core/.claude/skills/remotion-best-practices/rules/text-animations.md +20 -0
- package/core/.claude/skills/remotion-best-practices/rules/timing.md +179 -0
- package/core/.claude/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
- package/core/.claude/skills/remotion-best-practices/rules/transitions.md +197 -0
- package/core/.claude/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
- package/core/.claude/skills/remotion-best-practices/rules/trimming.md +51 -0
- package/core/.claude/skills/remotion-best-practices/rules/videos.md +171 -0
- package/core/.claude/skills/remotion-best-practices/rules/voiceover.md +99 -0
- package/core/.claude/skills/security_agent/SKILL.md +312 -0
- package/core/.claude/skills/spec_optimizer/SKILL.md +299 -0
- package/core/.claude/skills/sre_agent/SKILL.md +1347 -0
- package/core/.claude/skills/sunny/SKILL.md +74 -0
- package/core/.claude/skills/supabase-postgres-best-practices/AGENTS.md +90 -0
- package/core/.claude/skills/supabase-postgres-best-practices/CLAUDE.md +1 -0
- package/core/.claude/skills/supabase-postgres-best-practices/SKILL.md +64 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/query-index-types.md +45 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
- package/core/.claude/skills/supabase-postgres-best-practices/references/security-rls-performance.md +57 -0
- package/core/.claude/skills/synapse_maintain/SKILL.md +84 -0
- package/core/.claude/skills/ui-ux-pro-max/SKILL.md +377 -0
- package/core/.claude/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/core/.claude/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/core/.claude/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/core/.claude/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/core/.claude/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/core/.claude/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/core/.claude/skills/ui-ux-pro-max/data/styles.csv +68 -0
- package/core/.claude/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/core/.claude/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/core/.claude/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/core/.claude/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/core/.claude/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/core/.claude/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/core/.claude/skills/ui-ux-pro-max/scripts/search.py +106 -0
- package/core/.claude/skills/vercel-react-best-practices/AGENTS.md +2934 -0
- package/core/.claude/skills/vercel-react-best-practices/SKILL.md +136 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/core/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/core/.collaboration/README.md +258 -0
- package/core/.collaboration/cli/commands/assign.js +39 -0
- package/core/.collaboration/cli/commands/claim.js +33 -0
- package/core/.collaboration/cli/commands/complete.js +44 -0
- package/core/.collaboration/cli/commands/create.js +110 -0
- package/core/.collaboration/cli/commands/get.js +83 -0
- package/core/.collaboration/cli/commands/index.js +52 -0
- package/core/.collaboration/cli/commands/list.js +51 -0
- package/core/.collaboration/cli/commands/lock.js +45 -0
- package/core/.collaboration/cli/commands/rebuild.js +39 -0
- package/core/.collaboration/cli/commands/search.js +61 -0
- package/core/.collaboration/cli/commands/stats.js +61 -0
- package/core/.collaboration/cli/commands/transfer.js +41 -0
- package/core/.collaboration/cli/commands/unlock.js +48 -0
- package/core/.collaboration/cli/formatters/help-formatter.js +70 -0
- package/core/.collaboration/cli/formatters/index.js +7 -0
- package/core/.collaboration/cli/task-cli.js +46 -0
- package/core/.collaboration/cli/utils/arg-parser.js +74 -0
- package/core/.collaboration/cli/utils/git-user.js +25 -0
- package/core/.collaboration/cli/utils/index.js +9 -0
- package/core/.collaboration/cli/utils/output.js +10 -0
- package/core/.collaboration/config/default.yaml +189 -0
- package/core/.collaboration/core/conflict-resolver.js +461 -0
- package/core/.collaboration/core/conflict-resolver.test.js +389 -0
- package/core/.collaboration/core/id-generator.js +303 -0
- package/core/.collaboration/core/migrate-legacy.js +260 -0
- package/core/.collaboration/core/package.json +1 -0
- package/core/.collaboration/core/task-2257-estimated-hours.test.js +72 -0
- package/core/.collaboration/core/task-2260-dir-layout-move.test.js +60 -0
- package/core/.collaboration/core/task-2264-single-after-capture.test.js +61 -0
- package/core/.collaboration/core/task-2288-followups.test.js +121 -0
- package/core/.collaboration/core/task-api-json.js +211 -0
- package/core/.collaboration/core/task-api.js +3729 -0
- package/core/.collaboration/core/task-api.test.js +1268 -0
- package/core/.collaboration/docs/API.md +787 -0
- package/core/.collaboration/docs/ARCHITECTURE.md +596 -0
- package/core/.collaboration/docs/CLI.md +821 -0
- package/core/.collaboration/docs/FAQ.md +695 -0
- package/core/.collaboration/docs/MIGRATION.md +804 -0
- package/core/.collaboration/docs/examples/README.md +320 -0
- package/core/.collaboration/docs/examples/advanced-queries.js +261 -0
- package/core/.collaboration/docs/examples/basic-usage.js +184 -0
- package/core/.collaboration/docs/examples/team-workflow.js +352 -0
- package/core/.collaboration/hooks/README.md +70 -0
- package/core/.collaboration/hooks/config.json +10 -0
- package/core/.collaboration/hooks/install.js +400 -0
- package/core/.collaboration/hooks/post-merge.js +163 -0
- package/core/.collaboration/hooks/pre-commit.js +264 -0
- package/core/.collaboration/hooks/synapse-hook.js +486 -0
- package/core/.collaboration/hooks/synapse-hook.test.js +69 -0
- package/core/.failure/INDEX.yaml +231 -0
- package/core/.failure/agent-execution/FAIL-001-agent-no-output.yaml +391 -0
- package/core/.failure/agent-execution/FAIL-004_agent_platform_specific_commands.md +194 -0
- package/core/.failure/agent-execution/FAIL-005_background_agent_permission_denied.md +204 -0
- package/core/.failure/agent-execution/FAIL-007-pm-lead-wrong-team-invocation.yaml +0 -0
- package/core/.failure/agent-execution/FAIL-008-bypass-api-direct-yaml-write.yaml +94 -0
- package/core/.failure/agent-execution/FAIL-010-phase0-poem-format-skipped.yaml +28 -0
- package/core/.failure/agent-execution/FAIL-010-skipping-cognitive-checkpoint-after-verification.yaml +59 -0
- package/core/.failure/agent-execution/FAIL-012-grep-shortcut-during-investigation.yaml +85 -0
- package/core/.failure/agent-execution/FAIL-013-search-cwd-drift-and-case-mismatch.yaml +103 -0
- package/core/.failure/agent-execution/FAIL-014-shared-worktree-premature-death-verdict.yaml +35 -0
- package/core/.failure/agent-execution/FAIL-AUTO-TASK_1413.yaml +31 -0
- package/core/.failure/agent-execution/FAIL-AUTO-TASK_1427.yaml +41 -0
- package/core/.failure/agent-execution/FAIL-AUTO-TASK_904.yaml +30 -0
- package/core/.failure/agent-execution/README.md +68 -0
- package/core/.failure/architecture/FAIL-004_session_based_skill_recognition.md +128 -0
- package/core/.failure/architecture/FAIL-006-python-version-compatibility.yaml +445 -0
- package/core/.failure/architecture/README.md +87 -0
- package/core/.failure/code-quality/README.md +89 -0
- package/core/.failure/data-integrity/FAIL-002-json-bom.yaml +220 -0
- package/core/.failure/data-integrity/README.md +141 -0
- package/core/.failure/pipeline/FAIL-003-queue-pollution.yaml +335 -0
- package/core/.failure/pipeline/README.md +95 -0
- package/core/.failure/retired/FAIL-009-skipping-synapse-pulse-before-code-change.yaml +49 -0
- package/core/.failure/tools/README.md +230 -0
- package/core/.failure/tools/USAGE_GUIDE.md +323 -0
- package/core/.failure/tools/check_bom.js +101 -0
- package/core/.failure/tools/check_failures.ps1 +387 -0
- package/core/.failure/tools/fix_json.js +58 -0
- package/core/.failure/tools/log_failure.ps1 +474 -0
- package/core/.failure/tools/remove_bom.js +46 -0
- package/core/.failure/tools/validate_json.js +50 -0
- package/core/.formation/.episode-input.json +10 -0
- package/core/.formation/README.md +188 -0
- package/core/.formation/bifrost/CGDD_hook_lifecycle.js +575 -0
- package/core/.formation/bifrost/HOOK_PARITY_VERIFICATION.md +241 -0
- package/core/.formation/bifrost/README.md +71 -0
- package/core/.formation/bifrost/codex-doctor.js +106 -0
- package/core/.formation/bifrost/codex-doctor.test.js +51 -0
- package/core/.formation/bifrost/launch.js +510 -0
- package/core/.formation/bifrost/launch.test.js +217 -0
- package/core/.formation/bifrost/openai/codex-hook-shim.js +171 -0
- package/core/.formation/bifrost/openai/codex-hook-shim.test.js +107 -0
- package/core/.formation/bifrost/openai/models.json +36 -0
- package/core/.formation/bifrost/openai/relay.js +781 -0
- package/core/.formation/bifrost/openai/relay.test.js +71 -0
- package/core/.formation/bifrost/session.js +382 -0
- package/core/.formation/bifrost/session.test.js +121 -0
- package/core/.formation/bifrost/setup-codex.js +685 -0
- package/core/.formation/bifrost/setup-codex.test.js +102 -0
- package/core/.formation/bifrost/shared/ansuz-boot-policy.js +31 -0
- package/core/.formation/bifrost/shared/ansuz-boot-policy.test.js +40 -0
- package/core/.formation/bifrost/shared/boot-context.js +68 -0
- package/core/.formation/bifrost/shared/boot-context.test.js +67 -0
- package/core/.formation/bifrost/shared/codex-appserver.js +191 -0
- package/core/.formation/bifrost/shared/codex-injection.js +126 -0
- package/core/.formation/bifrost/shared/codex-session-registry.js +105 -0
- package/core/.formation/bifrost/shared/codex-session-registry.test.js +126 -0
- package/core/.formation/bifrost/shared/consolidate.js +286 -0
- package/core/.formation/bifrost/shared/stream-json.js +103 -0
- package/core/.formation/bifrost/shared/tools.js +278 -0
- package/core/.formation/bifrost/sync.js +142 -0
- package/core/.formation/briefs/scheduler-evolution.md +209 -0
- package/core/.formation/lead.yaml +118 -0
- package/core/.formation/legacy.bak/designer.yaml +57 -0
- package/core/.formation/legacy.bak/pm.yaml +57 -0
- package/core/.formation/legacy.bak/qa.yaml +57 -0
- package/core/.formation/legacy.bak/review.yaml +62 -0
- package/core/.formation/legacy.bak/scheduler.yaml +129 -0
- package/core/.formation/legacy.bak/sre.yaml +57 -0
- package/core/.formation/legion/forge.yaml +299 -0
- package/core/.formation/legion/hive.yaml +238 -0
- package/core/.formation/native/claude/README.md +61 -0
- package/core/.formation/native/claude/models.json +42 -0
- package/core/.formation/role-map.yaml +274 -0
- package/core/.formation/roles/_shared/modules/code_review.yaml +98 -0
- package/core/.formation/roles/_shared/modules/security.yaml +103 -0
- package/core/.formation/roles/_shared/modules/testing.yaml +14 -0
- package/core/.formation/roles/backend/role.yaml +93 -0
- package/core/.formation/roles/code_reviewer/role.yaml +102 -0
- package/core/.formation/roles/database_optimizer/role.yaml +107 -0
- package/core/.formation/roles/designer/role.yaml +66 -0
- package/core/.formation/roles/developer/role.yaml +75 -0
- package/core/.formation/roles/frontend/role.yaml +134 -0
- package/core/.formation/roles/incident_response/role.yaml +89 -0
- package/core/.formation/roles/qa/role.yaml +89 -0
- package/core/.formation/roles/security/role.yaml +87 -0
- package/core/.formation/roles/sre/role.yaml +66 -0
- package/core/.formation/skills/coordinator.yaml +52 -0
- package/core/.formation/solo/diagnosis.yaml +78 -0
- package/core/.formation/solo/strategy.yaml +121 -0
- package/core/.formation/spec/task_operations.parity.test.js +426 -0
- package/core/.formation/spec/task_operations.yaml +291 -0
- package/core/.formation/squad/blitz.yaml +192 -0
- package/core/.formation/squad/strategy-tribunal.yaml +354 -0
- package/core/.formation/squad/strategy.yaml +349 -0
- package/core/.formation/squad/sweep.yaml +208 -0
- package/core/.formation/tests/hello.txt +2 -0
- package/core/.formation/tools/__tests__/m1-claim-gate.test.js +175 -0
- package/core/.formation/tools/__tests__/m1-hmap-convid.test.js +216 -0
- package/core/.formation/tools/__tests__/release-lock.test.js +176 -0
- package/core/.formation/tools/__tests__/subagent-bifrost-guard.test.js +234 -0
- package/core/.formation/tools/__tests__/subagent-codex-harness.test.js +96 -0
- package/core/.formation/tools/__tests__/task-1863-claim-late-release.test.js +160 -0
- package/core/.formation/tools/__tests__/task-2265-singleton-identity.test.js +134 -0
- package/core/.formation/tools/__tests__/task-2281-singleton-readers.test.js +64 -0
- package/core/.formation/tools/__tests__/task2030-worktree-node-modules.test.js +221 -0
- package/core/.formation/tools/__tests__/task2067-worktree-branch-reuse.test.js +148 -0
- package/core/.formation/tools/alaya-gate.js +198 -0
- package/core/.formation/tools/analytics.js +172 -0
- package/core/.formation/tools/broadcast.js +103 -0
- package/core/.formation/tools/commit-sync.js +154 -0
- package/core/.formation/tools/coordinator.js +350 -0
- package/core/.formation/tools/dashboard-models-chain.test.js +60 -0
- package/core/.formation/tools/dispatch-cortex-context.test.js +52 -0
- package/core/.formation/tools/dispatch-detail/cross-project-worktree.md +40 -0
- package/core/.formation/tools/dispatch-detail/testing-module.md +53 -0
- package/core/.formation/tools/dispatch-detail/worktree-subagent-mode.md +72 -0
- package/core/.formation/tools/dispatch-dryrun.test.js +54 -0
- package/core/.formation/tools/dispatch-model-policy.test.js +165 -0
- package/core/.formation/tools/dispatch-notifier.js +84 -0
- package/core/.formation/tools/dispatch-registry.js +346 -0
- package/core/.formation/tools/dispatch.js +1931 -0
- package/core/.formation/tools/formations.js +1203 -0
- package/core/.formation/tools/forseti-verify.js +1170 -0
- package/core/.formation/tools/git-salvage.js +269 -0
- package/core/.formation/tools/guard-attribution.js +224 -0
- package/core/.formation/tools/headless-branch-recovery.test.js +64 -0
- package/core/.formation/tools/headless-dryrun.test.js +79 -0
- package/core/.formation/tools/headless-v2.js +659 -0
- package/core/.formation/tools/headless.js +1071 -0
- package/core/.formation/tools/integration.js +528 -0
- package/core/.formation/tools/jev-correction.js +214 -0
- package/core/.formation/tools/jev-correction.test.js +178 -0
- package/core/.formation/tools/legacy-scheduler.js +1994 -0
- package/core/.formation/tools/lib/exec-tree.js +92 -0
- package/core/.formation/tools/lib/exec-tree.test.js +82 -0
- package/core/.formation/tools/loader.js +190 -0
- package/core/.formation/tools/log-reader.js +232 -0
- package/core/.formation/tools/logger.js +273 -0
- package/core/.formation/tools/mcp-allowlist.test.js +40 -0
- package/core/.formation/tools/memory-loader.js +422 -0
- package/core/.formation/tools/merge-lock-heartbeat.test.js +35 -0
- package/core/.formation/tools/no-hooks.settings.json +3 -0
- package/core/.formation/tools/pool-status-push.js +121 -0
- package/core/.formation/tools/pool-status-push.test.js +165 -0
- package/core/.formation/tools/post-complete/bounded-http.js +102 -0
- package/core/.formation/tools/post-complete/bounded-http.test.js +130 -0
- package/core/.formation/tools/post-complete/cognitive.js +270 -0
- package/core/.formation/tools/post-complete/git-merge.js +2845 -0
- package/core/.formation/tools/post-complete/health.js +464 -0
- package/core/.formation/tools/post-complete/integration-gaps.js +98 -0
- package/core/.formation/tools/post-complete/outcome.js +874 -0
- package/core/.formation/tools/post-complete/staging.js +390 -0
- package/core/.formation/tools/post-complete/subagent-transcript-stats.js +460 -0
- package/core/.formation/tools/post-complete/subagent-transcript-stats.test.js +680 -0
- package/core/.formation/tools/post-complete/task1536.test.js +627 -0
- package/core/.formation/tools/post-complete/task1543.test.js +261 -0
- package/core/.formation/tools/post-complete/task1876.test.js +287 -0
- package/core/.formation/tools/post-complete/task1957.test.js +293 -0
- package/core/.formation/tools/post-complete/task1997.test.js +401 -0
- package/core/.formation/tools/post-complete/task2028.test.js +232 -0
- package/core/.formation/tools/post-complete/task2029.test.js +275 -0
- package/core/.formation/tools/post-complete/task2036.test.js +330 -0
- package/core/.formation/tools/post-complete/task2038.test.js +246 -0
- package/core/.formation/tools/post-complete/task2071.test.js +231 -0
- package/core/.formation/tools/post-complete/task2233.test.js +100 -0
- package/core/.formation/tools/post-complete/task2240.test.js +134 -0
- package/core/.formation/tools/post-complete/task2244.test.js +199 -0
- package/core/.formation/tools/post-complete/task2255.test.js +28 -0
- package/core/.formation/tools/post-complete/task2268.test.js +106 -0
- package/core/.formation/tools/post-complete/task2341.test.js +74 -0
- package/core/.formation/tools/post-complete/task2345.test.js +38 -0
- package/core/.formation/tools/post-complete/testing.js +482 -0
- package/core/.formation/tools/post-complete/wish.js +177 -0
- package/core/.formation/tools/post-complete/worktree-rescue.test.js +283 -0
- package/core/.formation/tools/post-complete.js +3660 -0
- package/core/.formation/tools/post-complete.test.js +1002 -0
- package/core/.formation/tools/pre-dispatch-snapshot.test.js +328 -0
- package/core/.formation/tools/process-state.js +33 -0
- package/core/.formation/tools/prompt.js +2183 -0
- package/core/.formation/tools/prompt.test.js +875 -0
- package/core/.formation/tools/remote-conflict.js +98 -0
- package/core/.formation/tools/revert-daemon-state.js +162 -0
- package/core/.formation/tools/route-audit.test.js +55 -0
- package/core/.formation/tools/runner.js +1332 -0
- package/core/.formation/tools/supabase-client.js +104 -0
- package/core/.formation/tools/task-sync.js +236 -0
- package/core/.formation/tools/task-utils.js +344 -0
- package/core/.formation/tools/task2028-headless-worktree.test.js +112 -0
- package/core/.formation/tools/test-drift.js +148 -0
- package/core/.formation/tools/tests/headless-mcp-args-plumbing.test.js +123 -0
- package/core/.formation/tools/tests/relay-mcp-overrides.test.js +112 -0
- package/core/.formation/tools/transcript-recorder.js +574 -0
- package/core/.formation/tools/utils-claude-cmd.test.js +28 -0
- package/core/.formation/tools/utils-worktree-config.test.js +44 -0
- package/core/.formation/tools/utils.js +1020 -0
- package/core/.formation/tools/verify-acceptance.js +585 -0
- package/core/.formation/tools/worktree-leak.test.js +162 -0
- package/core/.formation/tools/worktree-reclaim.js +259 -0
- package/core/.formation/tools/worktree-reclaim.test.js +182 -0
- package/core/.formation/tools/yggdrasil-local.js +97 -0
- package/core/.formation/unit/do.yaml +78 -0
- package/core/.formation/unit/heimdall.yaml +96 -0
- package/core/.formation/unit/plan.yaml +67 -0
- package/core/.formation/unit/think.yaml +58 -0
- package/core/.kenaz/MUNINN_SNAPSHOT9_EPISODE.json +32 -0
- package/core/.kenaz/MUNINN_SNAPSHOT9_RUNE.json +23 -0
- package/core/.kenaz/MUNINN_SNAPSHOT9_SUMMARY.md +89 -0
- package/core/.kenaz/ash_TASK_1428-20260507.json +14 -0
- package/core/.kenaz/cache/native-models/claude.json +42 -0
- package/core/.kenaz/claude-hooks-manifest.json +119 -0
- package/core/.kenaz/cortex.yaml +100 -0
- package/core/.kenaz/curator_state.json +7 -0
- package/core/.kenaz/dashboard-quick-prompts.json +9 -0
- package/core/.kenaz/designs/METAPLASTICITY_CONFIDENCE_DESIGN.md +537 -0
- package/core/.kenaz/designs/REFLEX_INITIATOR_DESIGN.md +501 -0
- package/core/.kenaz/designs/TASK_1385_handoff_mcp_design.md +426 -0
- package/core/.kenaz/designs/TASK_932_hippocampus_consolidation.md +103 -0
- package/core/.kenaz/designs/TASK_934_efe_signal_engine.md +97 -0
- package/core/.kenaz/designs/TASK_935_self_evolution_framework.md +154 -0
- package/core/.kenaz/designs/VISION_cognitive_architecture_roadmap.md +159 -0
- package/core/.kenaz/designs/metaplasticity_simulation_results.json +696 -0
- package/core/.kenaz/docs/INDEX.md +214 -0
- package/core/.kenaz/docs/README.md +290 -0
- package/core/.kenaz/docs/registry.json +962 -0
- package/core/.kenaz/docs/schema.json +144 -0
- package/core/.kenaz/docs/tools/GIT_HOOK_GUIDE.md +203 -0
- package/core/.kenaz/docs/tools/RAG_INTEGRATION_GUIDE.md +306 -0
- package/core/.kenaz/docs/tools/README.md +99 -0
- package/core/.kenaz/docs/tools/TIME_ESTIMATION_GUIDE.md +299 -0
- package/core/.kenaz/docs/tools/package-lock.json +618 -0
- package/core/.kenaz/docs/tools/package.json +34 -0
- package/core/.kenaz/docs/tools/src/cli.ts +365 -0
- package/core/.kenaz/docs/tools/src/field-extractor.ts +152 -0
- package/core/.kenaz/docs/tools/src/index.ts +14 -0
- package/core/.kenaz/docs/tools/src/registry.ts +664 -0
- package/core/.kenaz/docs/tools/src/search.ts +195 -0
- package/core/.kenaz/docs/tools/src/types.ts +88 -0
- package/core/.kenaz/docs/tools/test-git-hook.sh +79 -0
- package/core/.kenaz/docs/tools/tsconfig.json +20 -0
- package/core/.kenaz/docs/tools/verify.sh +106 -0
- package/core/.kenaz/episodes/SESSION_ansuz-prompt-1785087304784.yaml +68 -0
- package/core/.kenaz/huginn-exploration.json +8 -0
- package/core/.kenaz/knowledge/ladybug_2c51da1e_shadow_file_frame_group.patch +163 -0
- package/core/.kenaz/knowledge/ladybug_30cf85690e_shadow_page_read_during_checkpoint.patch +393 -0
- package/core/.kenaz/knowledge/ladybug_7a17858d3a_node_group_delete_lock.patch +102 -0
- package/core/.kenaz/knowledge/ladybug_926a0ba1_column_checkpoint.patch +412 -0
- package/core/.kenaz/knowledge/ladybug_a346c4c4b6_pk_index_header_pages.patch +144 -0
- package/core/.kenaz/knowledge/ladybug_ba5f38815b_csr_node_group.patch +86 -0
- package/core/.kenaz/main-memory/README.md +230 -0
- package/core/.kenaz/main-memory/kenaz/cortex/001_cortex_overview.md +168 -0
- package/core/.kenaz/main-memory/kenaz/cortex/001_rag_engine_overview.md +30 -0
- package/core/.kenaz/main-memory/kenaz/memory-system/001_three_tier_architecture.md +361 -0
- package/core/.kenaz/main-memory/kenaz/pipeline/001_task_execution_flow.md +117 -0
- package/core/.kenaz/main-memory/kenaz/pipeline/001_task_granularity.md +154 -0
- package/core/.kenaz/main-memory/kenaz/pipeline/002_team_priority.md +51 -0
- package/core/.kenaz/main-memory/kenaz/pipeline/003_feature_id_system.md +46 -0
- package/core/.kenaz/main-memory/kenaz/rules/001_gen_007_self_containment.md +108 -0
- package/core/.kenaz/main-memory/kenaz/rules/001_rule_priority_system.md +121 -0
- package/core/.kenaz/main-memory/kenaz/rules/002_agt_006_pre_check.md +0 -0
- package/core/.kenaz/main-memory/kenaz/rules/003_ppl_002_task_archival.md +48 -0
- package/core/.kenaz/main-memory/kenaz/system/001_dual_track_task_system.md +197 -0
- package/core/.kenaz/main-memory/knowledge/patterns/001_json_bom_issue.md +78 -0
- package/core/.kenaz/main-memory/knowledge/patterns/001_leader_worker_pattern.md +0 -0
- package/core/.kenaz/main-memory/knowledge/patterns/002_scope_path_conflict.md +115 -0
- package/core/.kenaz/main-memory/knowledge/patterns/002_task_dependency_resolution.md +223 -0
- package/core/.kenaz/main-memory/knowledge/patterns/003_question_protocol.md +242 -0
- package/core/.kenaz/main-memory/knowledge/patterns/004_user_insight_value.md +111 -0
- package/core/.kenaz/main-memory/knowledge/patterns/005_file_lock_pattern.md +274 -0
- package/core/.kenaz/main-memory/knowledge/references/001_ppl_rules.md +28 -0
- package/core/.kenaz/main-memory/knowledge/solutions/001_json_bom_issue.md +137 -0
- package/core/.kenaz/main-memory/knowledge/solutions/001_team_invocation.md +0 -0
- package/core/.kenaz/main-memory/knowledge/solutions/002_passive_monitoring.md +0 -0
- package/core/.kenaz/main-memory/knowledge/solutions/003_windows_file_race_condition.md +239 -0
- package/core/.kenaz/main-memory/registry.json +326 -0
- package/core/.kenaz/main-memory/version.yaml +58 -0
- package/core/.kenaz/muninn_episode_write.ps1 +17 -0
- package/core/.kenaz/muninn_snapshot11_rune_candidates.md +63 -0
- package/core/.kenaz/muninn_snapshot1_rune_candidates.md +49 -0
- package/core/.kenaz/orphan_audit_2026-05.md +181 -0
- package/core/.kenaz/ownership.yaml +155 -0
- package/core/.kenaz/peer.yaml +72 -0
- package/core/.kenaz/project.yaml +62 -0
- package/core/.kenaz/rune_ansuz_literature_validation_strategy.md +40 -0
- package/core/.kenaz/rune_efe_active_inference_validation.md +36 -0
- package/core/.kenaz/rune_yggdrasil_filesystem_scoped_project.md +41 -0
- package/core/.kenaz/rune_yggdrasil_project_identity_folder_name.md +41 -0
- package/core/.kenaz/rune_yggdrasil_relay_protocol_project_mismatch.md +39 -0
- package/core/.kenaz/runes_TASK_1428.json +57 -0
- package/core/.kenaz/specialist/ansuz_motivational_state.schema.json +138 -0
- package/core/.kenaz/specialist/ansuz_rules.yaml +241 -0
- package/core/.kenaz/specialist/ansuz_session_handoff.schema.json +128 -0
- package/core/.kenaz/specialist/chart_TASK_1657.json +50 -0
- package/core/.kenaz/specialist/cognitive-hub-e2e.test.js +494 -0
- package/core/.kenaz/specialist/daemon-manifest.yaml +168 -0
- package/core/.kenaz/specialist/empty_ac_audit_report.md +63 -0
- package/core/.kenaz/specialist/episode_muninn_completion_1785056865691.json +91 -0
- package/core/.kenaz/specialist/field_report_watermark.json +1 -0
- package/core/.kenaz/specialist/gc1826_driver.js +118 -0
- package/core/.kenaz/specialist/heimdall_proposal_1017c07f.json +13 -0
- package/core/.kenaz/specialist/heimdall_proposal_3dfaa8b9.json +12 -0
- package/core/.kenaz/specialist/heimdall_proposal_57af18f9.json +15 -0
- package/core/.kenaz/specialist/heimdall_proposal_57b1aa1b.json +14 -0
- package/core/.kenaz/specialist/heimdall_proposal_5a3c9473.json +13 -0
- package/core/.kenaz/specialist/identity_verdicts/TASK_1073.json +75 -0
- package/core/.kenaz/specialist/identity_verdicts/TASK_TEST.json +77 -0
- package/core/.kenaz/specialist/memory_guard_fired.json +1 -0
- package/core/.kenaz/specialist/memory_guard_trigger_cache.json +1 -0
- package/core/.kenaz/specialist/memory_source_priority.yaml +260 -0
- package/core/.kenaz/specialist/motivational_state.schema.json +62 -0
- package/core/.kenaz/specialist/prompt_1775.txt +317 -0
- package/core/.kenaz/specialist/prompt_1776.txt +326 -0
- package/core/.kenaz/specialist/prompt_1791.txt +320 -0
- package/core/.kenaz/specialist/prompt_1792.txt +320 -0
- package/core/.kenaz/specialist/prompt_1795.txt +281 -0
- package/core/.kenaz/specialist/prompt_1813.txt +332 -0
- package/core/.kenaz/specialist/prompt_1814.txt +401 -0
- package/core/.kenaz/specialist/prompt_1815.txt +394 -0
- package/core/.kenaz/specialist/prompt_1816.txt +437 -0
- package/core/.kenaz/specialist/prompt_1818.txt +361 -0
- package/core/.kenaz/specialist/prompt_1819.txt +421 -0
- package/core/.kenaz/specialist/prompt_1821.txt +345 -0
- package/core/.kenaz/specialist/prompt_1822.txt +313 -0
- package/core/.kenaz/specialist/prompt_1824.txt +348 -0
- package/core/.kenaz/specialist/prompt_1826.txt +388 -0
- package/core/.kenaz/specialist/retired_organs/README.md +58 -0
- package/core/.kenaz/specialist/rune_calibration_poc.md +175 -0
- package/core/.kenaz/specialist/rune_efe_salience_gap.md +21 -0
- package/core/.kenaz/specialist/rune_ember_autonomous_dispatch_gate.md +24 -0
- package/core/.kenaz/specialist/rune_post_dispatch_verification_pattern.md +31 -0
- package/core/.kenaz/specialist/rune_surprise_proxy_improvement.md +28 -0
- package/core/.kenaz/specialist/rune_worktree_dispatch_pattern.md +31 -0
- package/core/.kenaz/specialist/rune_yaml_filter_desync_fix.md +26 -0
- package/core/.kenaz/specialist/rune_yggdrasil_project_identity_folder_name.md +24 -0
- package/core/.kenaz/specialist/sessions/chart_TASK_1599.json +41 -0
- package/core/.kenaz/specialist/sessions/hmap_028aa781-aad2-48c0-9a61-5540565d4a7f.json +5 -0
- package/core/.kenaz/specialist/sessions/hmap_20210387-0c64-400c-9d0a-53042a0cbd89.json +5 -0
- package/core/.kenaz/specialist/sessions/hmap_c1375c5d-fd9f-44bd-a83e-353ecbb0392f.json +5 -0
- package/core/.kenaz/specialist/sessions/scratch_028aa781-aad2-48c0-9a61-5540565d4a7f.json +6 -0
- package/core/.kenaz/specialist/sessions/scratch_0acc0fb3-24f9-453f-9e92-6ef1cdf03a7c.json +6 -0
- package/core/.kenaz/specialist/sessions/scratch_20210387-0c64-400c-9d0a-53042a0cbd89.json +6 -0
- package/core/.kenaz/specialist/sessions/scratch_2f10623e-b7a1-4647-905e-9dc7c4d99f9c.json +6 -0
- package/core/.kenaz/specialist/sessions/scratch_5a38b62d-608a-488c-82f0-7e47e95e0905.json +6 -0
- package/core/.kenaz/specialist/sessions/scratch_5d9758ef-d9b6-4ffe-a017-3ed26d0a313b.json +6 -0
- package/core/.kenaz/specialist/sessions/scratch_c1375c5d-fd9f-44bd-a83e-353ecbb0392f.json +6 -0
- package/core/.kenaz/specialist/sessions/scratch_c9f3c711-b73d-4fcd-ad2a-7b2bc024ee77.json +6 -0
- package/core/.kenaz/specialist/sessions/scratch_e72e5274-1c81-4655-a05a-f87d1ecb2917.json +6 -0
- package/core/.kenaz/specialist/sessions/scratch_f740cdbe-f756-41fc-98fb-2b1413d51901.json +6 -0
- package/core/.kenaz/specialist/t1777_probe.txt +1 -0
- package/core/.kenaz/specialist/task1825_update.json +43 -0
- package/core/.kenaz/specialist/task1827_update.json +43 -0
- package/core/.kenaz/specialist/task1828_update.json +43 -0
- package/core/.kenaz/specialist/taskgen/consolidation_i.json +38 -0
- package/core/.kenaz/specialist/taskgen/csharp_a.json +44 -0
- package/core/.kenaz/specialist/taskgen/csharp_b.json +40 -0
- package/core/.kenaz/specialist/taskgen/embedding_e.json +34 -0
- package/core/.kenaz/specialist/taskgen/hygiene_fg.json +39 -0
- package/core/.kenaz/specialist/taskgen/pathology_h.json +36 -0
- package/core/.kenaz/specialist/taskgen/unity_noise_d.json +38 -0
- package/core/.kenaz/specialist/taskgen/visibility_c.json +38 -0
- package/core/.kenaz/specialist/verify_1837.js +302 -0
- package/core/.kenaz/specialist/verify_1838.js +124 -0
- package/core/.kenaz/tmp/heimdall_proposal_fc7e0944.json +10 -0
- package/core/.kenaz/tmp_heimdall_proposal_8d3e392.json +13 -0
- package/core/.kenaz/tmp_props.json +1 -0
- package/core/.kenaz/tmp_sounddrop_t1_prompt.txt +371 -0
- package/core/.kenaz/user_model.schema.json +107 -0
- package/core/.matrix/README.md +257 -0
- package/core/.matrix/index.matrix +5 -0
- package/core/.mcp.json +8 -0
- package/core/.prefrontal/.gitkeep +0 -0
- package/core/.prefrontal/proposals/.gitkeep +0 -0
- package/core/.rule/INDEX.yaml +99 -0
- package/core/.rule/MECHANIZED.md +61 -0
- package/core/.rule/code/README.md +211 -0
- package/core/.rule/code/backend.yaml +294 -0
- package/core/.rule/code/checklist.yaml +258 -0
- package/core/.rule/code/maintainability.yaml +227 -0
- package/core/.rule/code/naming.yaml +106 -0
- package/core/.rule/code/principles.yaml +71 -0
- package/core/.rule/code/reusability.yaml +192 -0
- package/core/.rule/code/structure.yaml +218 -0
- package/core/.rule/code/style.yaml +197 -0
- package/core/.rule/design/ui.yaml +79 -0
- package/core/.rule/general/agent-workflow.yaml +572 -0
- package/core/.rule/general/cortex-memory-recall.yaml +446 -0
- package/core/.rule/general/cortex-tools.yaml +181 -0
- package/core/.rule/general/cross-platform.yaml +107 -0
- package/core/.rule/general/ddx-synapse-stack.yaml +162 -0
- package/core/.rule/general/file-size-threshold.yaml +45 -0
- package/core/.rule/general/identity-contract.schema.yaml +251 -0
- package/core/.rule/general/memory-language.yaml +67 -0
- package/core/.rule/general/memory-source-priority.yaml +207 -0
- package/core/.rule/general/pipeline.yaml +246 -0
- package/core/.rule/general/principles.yaml +77 -0
- package/core/.rule/general/project-self-containment.yaml +253 -0
- package/core/.rule/general/rust-verify-target.yaml +80 -0
- package/core/.rule/general/specialist-identity-contract.yaml +153 -0
- package/core/.rule/general/sunny-access-control.yaml +60 -0
- package/core/.rule/general/synapse-code-intelligence.yaml +375 -0
- package/core/.rule/general/synapse-cognitive-fusion.yaml +301 -0
- package/core/.rule/general/system-invariants.yaml +248 -0
- package/core/.rule/general/task-pool-routing.yaml +102 -0
- package/core/.rule/general/worktree-isolation.yaml +79 -0
- package/core/.rule/pipeline/PPL-002-completed-task-archival.yaml +528 -0
- package/core/.rule/pipeline/auto-update.yaml +282 -0
- package/core/.rule/pipeline/task-execution.yaml +368 -0
- package/core/.rule/tools/check-permissions.js +197 -0
- package/core/.specialist/Amelia/README.md +329 -0
- package/core/.specialist/Amelia/capability.yaml +386 -0
- package/core/.specialist/Amelia/knowledge.yaml +217 -0
- package/core/.specialist/Amelia/principles.yaml +10 -0
- package/core/.specialist/Amelia/rule.yaml +79 -0
- package/core/.specialist/Amelia/workflow.yaml +241 -0
- package/core/.specialist/Ansuz/HEURISTIC_BOOT_ROUTING.md +39 -0
- package/core/.specialist/Ansuz/ROUTING.md +35 -0
- package/core/.specialist/Ansuz/RULES.md +79 -0
- package/core/.specialist/Ansuz/SYSTEM_DOC.md +611 -0
- package/core/.specialist/Ansuz/VERIFY.md +38 -0
- package/core/.specialist/Ansuz/capability.yaml +338 -0
- package/core/.specialist/Ansuz/cognitive_principles.yaml +62 -0
- package/core/.specialist/Ansuz/concepts/agent_types.yaml +22 -0
- package/core/.specialist/Ansuz/concepts/autonomous_agenda.yaml +170 -0
- package/core/.specialist/Ansuz/concepts/autonomy_contract.yaml +126 -0
- package/core/.specialist/Ansuz/concepts/boot_ritual.yaml +107 -0
- package/core/.specialist/Ansuz/concepts/boot_rules_summary.yaml +16 -0
- package/core/.specialist/Ansuz/concepts/capability_pointers.yaml +21 -0
- package/core/.specialist/Ansuz/concepts/cognitive_fluency_contract.yaml +264 -0
- package/core/.specialist/Ansuz/concepts/cognitive_systems_competence_map.yaml +14 -0
- package/core/.specialist/Ansuz/concepts/cognitive_systems_hippocampus.yaml +14 -0
- package/core/.specialist/Ansuz/concepts/cognitive_systems_overview.yaml +27 -0
- package/core/.specialist/Ansuz/concepts/cognitive_systems_serendipity.yaml +14 -0
- package/core/.specialist/Ansuz/concepts/cognitive_systems_turn_context.yaml +13 -0
- package/core/.specialist/Ansuz/concepts/commitment_layer.yaml +150 -0
- package/core/.specialist/Ansuz/concepts/completion_tracking.yaml +29 -0
- package/core/.specialist/Ansuz/concepts/deep_knowledge_pointers.yaml +28 -0
- package/core/.specialist/Ansuz/concepts/evolvable_guardrails.yaml +20 -0
- package/core/.specialist/Ansuz/concepts/fatigue_handoff.yaml +84 -0
- package/core/.specialist/Ansuz/concepts/formation_quick_ref.yaml +28 -0
- package/core/.specialist/Ansuz/concepts/guardrails_immutable.yaml +31 -0
- package/core/.specialist/Ansuz/concepts/identity.yaml +48 -0
- package/core/.specialist/Ansuz/concepts/interaction_protocol.yaml +42 -0
- package/core/.specialist/Ansuz/concepts/meta_evolvable_tier.yaml +28 -0
- package/core/.specialist/Ansuz/concepts/mindset.yaml +18 -0
- package/core/.specialist/Ansuz/concepts/phase9_verification.yaml +21 -0
- package/core/.specialist/Ansuz/concepts/phase_protocol.yaml +66 -0
- package/core/.specialist/Ansuz/concepts/principles.yaml +65 -0
- package/core/.specialist/Ansuz/concepts/self_evolution_overview.yaml +53 -0
- package/core/.specialist/Ansuz/concepts/task_first_protocol.yaml +7 -0
- package/core/.specialist/Ansuz/concepts/task_pool.yaml +119 -0
- package/core/.specialist/Ansuz/concepts/task_system.yaml +22 -0
- package/core/.specialist/Ansuz/concepts/write_verification.yaml +26 -0
- package/core/.specialist/Ansuz/core.yaml +224 -0
- package/core/.specialist/Ansuz/decisions/ADR-requirement-graph-layer.md +390 -0
- package/core/.specialist/Ansuz/elixir.yaml +70 -0
- package/core/.specialist/Ansuz/exo_cortex_tools.yaml +13 -0
- package/core/.specialist/Ansuz/experiments/boot_ablation_replay.js +197 -0
- package/core/.specialist/Ansuz/guards/blind_spot_guards.yaml +28 -0
- package/core/.specialist/Ansuz/guards/lesson_guards.yaml +203 -0
- package/core/.specialist/Ansuz/identity_contract.yaml +375 -0
- package/core/.specialist/Ansuz/knowledge.yaml +284 -0
- package/core/.specialist/Ansuz/modules/amelia_review.yaml +112 -0
- package/core/.specialist/Ansuz/modules/ddx.yaml +47 -0
- package/core/.specialist/Ansuz/modules/design_checks.yaml +47 -0
- package/core/.specialist/Ansuz/modules/identity_verification.yaml +119 -0
- package/core/.specialist/Ansuz/modules/loop_guard.yaml +36 -0
- package/core/.specialist/Ansuz/modules/prevention.yaml +84 -0
- package/core/.specialist/Ansuz/modules/prophecy.yaml +95 -0
- package/core/.specialist/Ansuz/modules/pulse_empty.yaml +36 -0
- package/core/.specialist/Ansuz/modules/qa_intake.yaml +29 -0
- package/core/.specialist/Ansuz/modules/recall.yaml +45 -0
- package/core/.specialist/Ansuz/principles.yaml +31 -0
- package/core/.specialist/Ansuz/research/EMBER_architecture_comparison.md +142 -0
- package/core/.specialist/Ansuz/rule.yaml +97 -0
- package/core/.specialist/Ansuz/self_model_seed.backup.json +100 -0
- package/core/.specialist/Ansuz/self_model_seed.json +100 -0
- package/core/.specialist/Ansuz/self_model_seed.sha256 +1 -0
- package/core/.specialist/Ansuz/tools/ansuz-handoff-snapshot.js +626 -0
- package/core/.specialist/Ansuz/tools/ansuz-handoff.js +437 -0
- package/core/.specialist/Ansuz/tools/ansuz-sdk-runner.js +1254 -0
- package/core/.specialist/Ansuz/tools/ansuz-sdk-runner.test.js +137 -0
- package/core/.specialist/Ansuz/tools/ansuz-state.js +288 -0
- package/core/.specialist/Ansuz/tools/bootstrap-anchors.js +289 -0
- package/core/.specialist/Ansuz/tools/handoff-freshness-milestone.test.js +73 -0
- package/core/.specialist/Ansuz/tools/handoff-resolver.js +207 -0
- package/core/.specialist/Ansuz/tools/handoff-session-identity.test.js +333 -0
- package/core/.specialist/Ansuz/tools/handoff-snapshot-args.test.js +25 -0
- package/core/.specialist/Ansuz/tools/install-claude-hooks.js +354 -0
- package/core/.specialist/Ansuz/tools/install-claude-hooks.test.js +110 -0
- package/core/.specialist/Ansuz/tools/package.json +16 -0
- package/core/.specialist/Ansuz/tools/preservation-coordinator.js +504 -0
- package/core/.specialist/Ansuz/tools/verify-and-land.js +1012 -0
- package/core/.specialist/Ansuz/tools/verify-and-land.test.js +1099 -0
- package/core/.specialist/Ansuz/workflow.yaml +1273 -0
- package/core/.specialist/Forseti/capability.yaml +210 -0
- package/core/.specialist/Forseti/core.yaml +176 -0
- package/core/.specialist/Forseti/principles.yaml +88 -0
- package/core/.specialist/Forseti/rule.yaml +86 -0
- package/core/.specialist/Heimdall/SKILL.md +65 -0
- package/core/.specialist/Heimdall/capability.yaml +134 -0
- package/core/.specialist/Heimdall/core.yaml +275 -0
- package/core/.specialist/Heimdall/principles.yaml +66 -0
- package/core/.specialist/Heimdall/rule.yaml +68 -0
- package/core/.specialist/Huginn/capability.yaml +234 -0
- package/core/.specialist/Huginn/core.yaml +482 -0
- package/core/.specialist/Huginn/principles.yaml +57 -0
- package/core/.specialist/Huginn/rule.yaml +121 -0
- package/core/.specialist/REFLECTION_TO_CONTROL.md +347 -0
- package/core/.specialist/ansuz_session_handoff.json +96 -0
- package/core/.specialist/experiments/rg_benchmark.js +523 -0
- package/core/.specialist/experiments/rg_benchmark_results.json +27 -0
- package/core/.specialist/shared/cognitive-primer.md +15 -0
- package/core/.specialist/shared/guard_schema.json +290 -0
- package/core/.specialist/shared/principles.yaml +213 -0
- package/core/.specialist/tests/runtime-discovery/README.md +224 -0
- package/core/.specialist/tests/runtime-discovery/active-project-polling.test.js +495 -0
- package/core/.specialist/tests/runtime-discovery/port-binding.test.js +418 -0
- package/core/.specialist/tests/runtime-discovery/resolver-priority.test.js +693 -0
- package/core/.specialist/tests/runtime-discovery/resolver-skip-on-invalid.test.js +467 -0
- package/core/.specialist/tests/runtime-discovery/resolver-symmetry.test.js +679 -0
- package/core/.specialist/tests/runtime-discovery/tail-cli-project-path.test.js +231 -0
- package/core/.specialist/tools/MEMORY_RECALL_TRIGGERS.md +156 -0
- package/core/.specialist/tools/README.md +129 -0
- package/core/.specialist/tools/__tests__/freya-cli-contract.test.js +156 -0
- package/core/.specialist/tools/__tests__/task-1863-boot-lease-reuse.test.js +99 -0
- package/core/.specialist/tools/__tests__/task-1917-orphan-detection.test.js +175 -0
- package/core/.specialist/tools/__tests__/task-1977-banner-cap.test.js +129 -0
- package/core/.specialist/tools/__tests__/task-1983-lease-project-path.test.js +96 -0
- package/core/.specialist/tools/__tests__/task-2218-boot-session-id.test.js +118 -0
- package/core/.specialist/tools/__tests__/task-2222-session-identity-interleave.test.js +203 -0
- package/core/.specialist/tools/__tests__/task-2246-reap-honesty.test.js +96 -0
- package/core/.specialist/tools/__tests__/task-2254-handoff-archive-contract.test.js +60 -0
- package/core/.specialist/tools/__tests__/task-2272-open-card-status-quote.test.js +26 -0
- package/core/.specialist/tools/__tests__/task-2374-usage-counter.test.js +34 -0
- package/core/.specialist/tools/ansuz-boot-fast.js +1120 -0
- package/core/.specialist/tools/ansuz-boot-fast.test.js +705 -0
- package/core/.specialist/tools/canary.js +501 -0
- package/core/.specialist/tools/context-injection.js +395 -0
- package/core/.specialist/tools/design-reasoning.js +493 -0
- package/core/.specialist/tools/discovery-fixtures.js +308 -0
- package/core/.specialist/tools/discovery-runner.js +460 -0
- package/core/.specialist/tools/failure-detector.js +1132 -0
- package/core/.specialist/tools/identity-scorer.js +714 -0
- package/core/.specialist/tools/jev-optional-context.js +107 -0
- package/core/.specialist/tools/jev-optional-context.test.js +152 -0
- package/core/.specialist/tools/lesson-guard.js +1084 -0
- package/core/.specialist/tools/lib/chart-path.js +159 -0
- package/core/.specialist/tools/lib/chart-path.test.js +171 -0
- package/core/.specialist/tools/lib/project-resolver.js +200 -0
- package/core/.specialist/tools/lib/project-resolver.test.js +241 -0
- package/core/.specialist/tools/memory-action-log.js +839 -0
- package/core/.specialist/tools/phase-gate.js +3754 -0
- package/core/.specialist/tools/phase-gate.test.js +85 -0
- package/core/.specialist/tools/phase9-policy.test.js +109 -0
- package/core/.specialist/tools/precompute-runner.js +444 -0
- package/core/.specialist/tools/prompt-files.test.js +169 -0
- package/core/.specialist/tools/replay-detectors.js +290 -0
- package/core/.specialist/tools/rule-engine.js +621 -0
- package/core/.specialist/tools/session-boot-ownership.test.js +117 -0
- package/core/.specialist/tools/session-project-state.test.js +65 -0
- package/core/.specialist/tools/session.js +1866 -0
- package/core/.specialist/tools/stream-lease.js +263 -0
- package/core/.specialist/tools/task-bridge-jev.test.js +170 -0
- package/core/.specialist/tools/task-bridge.js +765 -0
- package/core/.specialist/tools/verify-identity.js +453 -0
- package/core/.specialist/tools/wish-mandate-delivery.test.js +76 -0
- package/core/.system/README.md +555 -0
- package/core/.system/agent-skills/README.md +724 -0
- package/core/.system/archive/README.md +499 -0
- package/core/.system/assessment/README.md +645 -0
- package/core/.system/cli-tools/README.md +724 -0
- package/core/.system/collaboration/KNOWLEDGE.md +65 -0
- package/core/.system/collaboration/README.md +570 -0
- package/core/.system/cortex/MODULES.md +1046 -0
- package/core/.system/dashboard/FRONTEND.md +812 -0
- package/core/.system/dashboard/README.md +737 -0
- package/core/.system/external-skills/README.md +522 -0
- package/core/.system/failure/README.md +723 -0
- package/core/.system/formation/LEGACY_SKILLS.md +972 -0
- package/core/.system/formation/POST_COMPLETE.md +600 -0
- package/core/.system/formation/README.md +1092 -0
- package/core/.system/formation/TOOLS_REFERENCE.md +1145 -0
- package/core/.system/githooks/README.md +846 -0
- package/core/.system/kenaz/README.md +787 -0
- package/core/.system/memory/README.md +716 -0
- package/core/.system/pipeline/README.md +712 -0
- package/core/.system/rule/README.md +794 -0
- package/core/.system/specialist/README.md +669 -0
- package/core/.system/specialist/STRUCTURE.md +262 -0
- package/core/.system/sunny/README.md +476 -0
- package/core/.system/sunny/RULES.json +89 -0
- package/core/.system/sunny/knowledge/INDEX.md +37 -0
- package/core/.system/sunny/knowledge/agent-teams-api.md +0 -0
- package/core/.system/sunny/knowledge/ansuz-specialist.md +500 -0
- package/core/.system/sunny/knowledge/claude-cli-spawn.md +177 -0
- package/core/.system/sunny/knowledge/collaboration-api.md +925 -0
- package/core/.system/sunny/teammates/README.md +107 -0
- package/core/.system/sunny/teammates/how_to_use.yaml +101 -0
- package/core/.system/sunny/teammates/tools/headless/launcher.js +318 -0
- package/core/.system/sunny/teammates/tools/powershell/launcher.js +241 -0
- package/core/.system/sunny/teammates/tools/powershell/start.bat +50 -0
- package/core/.system/sunny/teammates/tools/utils/env.js +96 -0
- package/core/.system/sunny/teammates/tools/utils/format-output.js +329 -0
- package/core/.system/sunny/tools.json +101 -0
- package/core/.vendor/js-yaml.cjs +2795 -0
- package/core/.vendor/require-yaml.cjs +8 -0
- package/core/CLAUDE.md +172 -0
- package/core/KENAZ_CORE_VERSION +1 -0
- package/core/dev/ALAYA_FIELD_FEEDBACK_DESIGN.md +126 -0
- package/core/dev/ANSUZ_SCAFFOLD_DIET_2026-09-20.md +231 -0
- package/core/dev/ANSUZ_STARTUP_INJECTION_REVIEW.md +355 -0
- package/core/dev/ANSUZ_WORKFLOW_MODERNIZATION.md +143 -0
- package/core/dev/CORTEX_META_GRAPH_ASSESSMENT.md +99 -0
- package/core/dev/FREYA_DOWNSTREAM_BUGS_2026-09-19.md +44 -0
- package/core/dev/GLOBAL_MEMORY_IDENTITY_CONSOLIDATION.md +263 -0
- package/core/dev/GUARD_EFFECTIVENESS_DESIGN.md +180 -0
- package/core/dev/HEALTH_GATE_VARIANCE_ASSESSMENT.md +271 -0
- package/core/dev/HOOK_DIET_2026-09-21.md +126 -0
- package/core/dev/JEV_INTEGRATION_PLAN.md +189 -0
- package/core/dev/KENAZ_AGENT_CONNECT_v1_SPEC.md +139 -0
- package/core/dev/MOBILE_DESIGN_SPEC.md +569 -0
- package/core/dev/MULTI_ANSUZ_SPEC.md +136 -0
- package/core/dev/MUNINN_RETIREMENT.md +115 -0
- package/core/dev/PHASE3_ATTRIBUTION_POPULATION_DIAGNOSIS.md +211 -0
- package/core/dev/PHASE3_P3-2B_TASKLEVEL_PROBE.md +83 -0
- package/core/dev/PHASE3_P3-2_POPULATION_DISJOINTNESS.md +83 -0
- package/core/dev/PHASE3_P3-2_REMEASURE_REPORT.md +231 -0
- package/core/dev/PREDICTION_GROUNDING_DESIGN.md +376 -0
- package/core/dev/PRODUCT_SPEC.md +317 -0
- package/core/dev/PRODUCT_SPEC_FOR_AI_tepmlate.md +716 -0
- package/core/dev/PROJECT_REGISTRY_DUPLICATE_ASSESSMENT.md +86 -0
- package/core/dev/STARTUP_TIMELINE_TASK_1995.md +181 -0
- package/core/dev/SYNAPSE_WORKER_PER_PROJECT.md +881 -0
- package/core/dev/TASK_1680_P3-3_DISPATCH_SPEC.md +96 -0
- package/core/dev/TASK_1684_CALIBRATION_IMPACT_ANALYSIS.md +170 -0
- package/core/dev/TASK_1684_FORK_A_GOODHART_DESIGN.md +171 -0
- package/core/dev/TASK_1684_P3_2_REMEASURE_VALIDATION.md +262 -0
- package/core/dev/TASK_1903_SIGNAL_AUC_MEASUREMENT.md +207 -0
- package/core/dev/TASK_1904_BRANCH_INTEGRITY_AUDIT.md +146 -0
- package/core/dev/ansuz-eval/README.md +38 -0
- package/core/dev/ansuz-eval/build-fixtures.js +87 -0
- package/core/dev/ansuz-eval/grade.js +96 -0
- package/core/dev/ansuz-eval/grader.test.js +117 -0
- package/core/dev/ansuz-eval/tasks.md +32 -0
- package/core/dev/archive/ansuz/BOOT_FULL.md +141 -0
- package/core/dev/archive/ansuz/agents/ansuz-boot.md +176 -0
- package/core/dev/archive/ansuz/designs/alaya-passive-surfacing.md +84 -0
- package/core/dev/archive/ansuz/designs/cc_memory_indexing.md +307 -0
- package/core/dev/archive/ansuz/designs/check_guard.md +322 -0
- package/core/dev/archive/ansuz/designs/consequence_loop.md +227 -0
- package/core/dev/archive/ansuz/designs/mcp_kuzudb_lock_architecture.md +312 -0
- package/core/dev/archive/ansuz/designs/phase0_git_enrichment.md +278 -0
- package/core/dev/archive/ansuz/designs/refactor_mcp_tools_synapse.md +490 -0
- package/core/dev/archive/ansuz/designs/semantic_markdown_extraction.md +167 -0
- package/core/dev/archive/ansuz/designs/task_1372_prompt_injects_into.md +193 -0
- package/core/dev/archive/ansuz/designs/thought_stack.md +286 -0
- package/core/dev/archive/ansuz/investigations/reachability_unified_api_2026-04-11.md +330 -0
- package/core/dev/archive/ansuz/investigations/synapse_orphans_indexing_bug_2026-04-11.md +352 -0
- package/core/dev/archive/ansuz/investigations/synapse_orphans_reindex_verification_2026-04-11.md +48 -0
- package/core/dev/archive/ansuz/investigations/synapse_orphans_verification_2026-04-11.md +170 -0
- package/core/dev/archive/ansuz/legacy/kernel.yaml +399 -0
- package/core/dev/archive/ansuz/legacy/phases/phase_0.yaml +418 -0
- package/core/dev/archive/ansuz/legacy/phases/phase_1.yaml +376 -0
- package/core/dev/archive/ansuz/legacy/phases/phase_10.yaml +35 -0
- package/core/dev/archive/ansuz/legacy/phases/phase_11.yaml +582 -0
- package/core/dev/archive/ansuz/legacy/phases/phase_2.yaml +94 -0
- package/core/dev/archive/ansuz/legacy/phases/phase_3.yaml +274 -0
- package/core/dev/archive/ansuz/legacy/phases/phase_4.yaml +67 -0
- package/core/dev/archive/ansuz/legacy/phases/phase_5.yaml +32 -0
- package/core/dev/archive/ansuz/legacy/phases/phase_6.yaml +91 -0
- package/core/dev/archive/ansuz/legacy/phases/phase_7.yaml +58 -0
- package/core/dev/archive/ansuz/legacy/phases/phase_8.yaml +146 -0
- package/core/dev/archive/ansuz/legacy/phases/phase_9.yaml +424 -0
- package/core/dev/archive/ansuz/specs/INDEX_bifrost_hook_parity.yaml +92 -0
- package/core/dev/archive/ansuz/specs/active-inference-formation.yaml +453 -0
- package/core/dev/archive/ansuz/specs/brief_TASK_1228_userpromptsubmit.yaml +191 -0
- package/core/dev/archive/ansuz/specs/brief_TASK_1229_pretooluse_posttooluse.yaml +250 -0
- package/core/dev/archive/ansuz/specs/brief_TASK_1230_sessionstart_stop.yaml +301 -0
- package/core/dev/archive/ansuz/specs/brief_TASK_1231_verification.yaml +272 -0
- package/core/dev/design/PHASE4_DESIGN.md +559 -0
- package/core/dev/design/dashboard_docs_integration_PLAN.md +388 -0
- package/core/dev/design/matrix_format_ABBREVIATIONS.md +655 -0
- package/core/dev/design/matrix_format_DESIGN_SPEC.md +601 -0
- package/core/dev/design/matrix_format_DISCUSSION_SUMMARY.md +484 -0
- package/core/dev/design/matrix_format_EXAMPLE_memory.matrix +13 -0
- package/core/dev/design/matrix_format_EXAMPLE_project_status.matrix +9 -0
- package/core/dev/design/matrix_format_EXAMPLE_tasks.matrix +14 -0
- package/core/dev/design/matrix_format_SYNTAX_BNF.md +754 -0
- package/core/dev/design/matrix_format_TOKEN_COMPARISON.md +484 -0
- package/core/dev/design/matrix_v2_COGNITIVE_DESIGN.md +503 -0
- package/core/dev/design/matrix_v2_DISCUSSION_SUMMARY.md +414 -0
- package/core/dev/design/matrix_v2_EXAMPLE.matrix +67 -0
- package/core/dev/designs/EXPANDABLE_CARD_DESIGN_SPEC.md +509 -0
- package/core/dev/jev-eval/ACTIVE_CORRECTION.md +52 -0
- package/core/dev/jev-eval/ANNOTATION_GUIDE.md +68 -0
- package/core/dev/jev-eval/BASELINE_COMPARISON.md +45 -0
- package/core/dev/jev-eval/CONTEXT_REVIEW.md +31 -0
- package/core/dev/jev-eval/EVALUATION_STATUS.md +39 -0
- package/core/dev/jev-eval/HISTORICAL_CORPUS.md +33 -0
- package/core/dev/jev-eval/PACKAGING_VERIFICATION.md +42 -0
- package/core/dev/jev-eval/README.md +101 -0
- package/core/dev/jev-eval/THALAMUS_RANKING.md +58 -0
- package/core/dev/jev-eval/VALIDATION_PROGRESS.md +54 -0
- package/core/dev/jev-eval/cli.mjs +50 -0
- package/core/dev/jev-eval/context.mjs +183 -0
- package/core/dev/jev-eval/corpus.mjs +186 -0
- package/core/dev/jev-eval/fixtures/conversation-review.seed.jsonl +6 -0
- package/core/dev/jev-eval/fixtures/synthetic.jsonl +11 -0
- package/core/dev/jev-eval/metrics.mjs +67 -0
- package/core/dev/jev-eval/muninn-baseline.mjs +119 -0
- package/core/dev/jev-eval/providers.mjs +95 -0
- package/core/dev/jev-eval/reports/annotation-pilot-2026-09-20.json +32 -0
- package/core/dev/jev-eval/reports/context-review-2026-09-20.json +48 -0
- package/core/dev/jev-eval/reports/conversation-review.pending.json +151 -0
- package/core/dev/jev-eval/reports/history-corpus-2026-09-20.json +52 -0
- package/core/dev/jev-eval/reports/length-probe-2026-09-20.json +133 -0
- package/core/dev/jev-eval/reports/live-smoke-2026-09-20.json +616 -0
- package/core/dev/jev-eval/reports/muninn-baseline-2026-09-20.json +52 -0
- package/core/dev/jev-eval/reports/resilience-2026-09-20.json +520 -0
- package/core/dev/jev-eval/reports/rules-baseline.json +197 -0
- package/core/dev/jev-eval/reports/synthetic-review.pending.json +357 -0
- package/core/dev/jev-eval/resilience.mjs +71 -0
- package/core/dev/jev-eval/review.mjs +78 -0
- package/core/dev/jev-eval/schema.mjs +87 -0
- package/core/dev/jev-eval/test/context.test.mjs +95 -0
- package/core/dev/jev-eval/test/corpus.test.mjs +102 -0
- package/core/dev/jev-eval/test/eval.test.mjs +146 -0
- package/core/dev/jev-eval/test/muninn-baseline.test.mjs +71 -0
- package/core/dev/jev-eval/test/resilience.test.mjs +72 -0
- package/core/dev/jev-eval/test/review.test.mjs +61 -0
- package/core/dev/pipeline/LOCK_STATE.json +4 -0
- package/core/dev/pipeline/OPTIMIZATION_PROPOSALS.json +32 -0
- package/core/dev/pipeline/PHASE3_PLANNING_SUMMARY.md +338 -0
- package/core/dev/pipeline/PIPELINE_CONFIG.json +46 -0
- package/core/dev/pipeline/PROGRESS.md +113 -0
- package/core/dev/pipeline/PROGRESS_template.md +860 -0
- package/core/dev/pipeline/QA_REPORT_F008.md +431 -0
- package/core/dev/pipeline/QA_REPORT_LOCAL_CLAUDE_DIAGNOSIS.md +583 -0
- package/core/dev/pipeline/README.md +210 -0
- package/core/dev/pipeline/SELF_ENHANCEMENT_STATUS.json.bak +47 -0
- package/core/dev/pipeline/TASK_QUEUE.json +192 -0
- package/core/dev/pipeline/WORKFLOW_GUIDE.md +824 -0
- package/core/dev/pipeline/archived/TASK_015_tauri_init.yaml +53 -0
- package/core/dev/pipeline/archived/TASK_016_tauri_commands.yaml +54 -0
- package/core/dev/pipeline/archived/TASK_017_rust_pty.yaml +54 -0
- package/core/dev/pipeline/archived/TASK_018_tauri_bundle.yaml +53 -0
- package/core/dev/pipeline/archived/TASK_019_release_workflow.yaml +56 -0
- package/core/dev/pipeline/archived/TASK_020_update_ui.yaml +54 -0
- package/core/dev/pipeline/archived/TASK_021_update_notification_ui.yaml +55 -0
- package/core/dev/pipeline/archived/TASK_022_remove_node_pty.yaml +65 -0
- package/core/dev/pipeline/archived/TASK_023_api_routes_migration.yaml +86 -0
- package/core/dev/pipeline/archived/TASK_024_feature_id_system.yaml +51 -0
- package/core/dev/pipeline/archived/TASK_025_executable_acceptance.yaml +66 -0
- package/core/dev/pipeline/archived/TASK_026_spec_versioning.yaml +56 -0
- package/core/dev/pipeline/archived/TASK_027_drift_detection.yaml +60 -0
- package/core/dev/pipeline/archived/TASK_028_tauri_pty_manager.yaml +60 -0
- package/core/dev/pipeline/archived/TASK_029_tauri_pty_commands.yaml +62 -0
- package/core/dev/pipeline/archived/TASK_030_frontend_session_adapter.yaml +54 -0
- package/core/dev/pipeline/archived/TASK_031_terminal_tauri_events.yaml +56 -0
- package/core/dev/pipeline/archived/TASK_041_scheduler_data_models.yaml +54 -0
- package/core/dev/pipeline/archived/TASK_042_path_lock_manager.yaml +53 -0
- package/core/dev/pipeline/archived/TASK_043_process_manager.yaml +57 -0
- package/core/dev/pipeline/archived/TASK_044_git_integration.yaml +85 -0
- package/core/dev/pipeline/archived/TASK_045_task_queue_manager.yaml +54 -0
- package/core/dev/pipeline/archived/TASK_046_scheduler_dispatcher.yaml +60 -0
- package/core/dev/pipeline/archived/TASK_047_tauri_scheduler_commands.yaml +55 -0
- package/core/dev/pipeline/archived/TASK_048_realtime_status_push.yaml +92 -0
- package/core/dev/pipeline/archived/TASK_049_frontend_scheduler_integration.yaml +58 -0
- package/core/dev/pipeline/archived/TASK_050_error_recovery.yaml +56 -0
- package/core/dev/pipeline/archived/TASK_051_optimization_proposals_backend.yaml +53 -0
- package/core/dev/pipeline/archived/TASK_052_optimization_proposals_ui.yaml +58 -0
- package/core/dev/pipeline/archived/TASK_053_optimization_proposals_diff_view.yaml +54 -0
- package/core/dev/pipeline/archived/TASK_054_multi_project_scheduler_state.yaml +76 -0
- package/core/dev/pipeline/archived/TASK_055_scheduler_api_project_scope.yaml +64 -0
- package/core/dev/pipeline/archived/TASK_056_frontend_scheduler_project_scope.yaml +62 -0
- package/core/dev/pipeline/archived/TASK_057_scheduler_module_structure.yaml +54 -0
- package/core/dev/pipeline/archived/TASK_058_scheduler_models_extract.yaml +51 -0
- package/core/dev/pipeline/archived/TASK_059_scheduler_core_extract.yaml +51 -0
- package/core/dev/pipeline/archived/TASK_060_scheduler_commands_extract.yaml +51 -0
- package/core/dev/pipeline/archived/TASK_061_scheduler_specialized_commands.yaml +53 -0
- package/core/dev/pipeline/archived/TASK_062_process_manager_module_structure.yaml +56 -0
- package/core/dev/pipeline/archived/TASK_063_process_manager_core_extract.yaml +56 -0
- package/core/dev/pipeline/archived/TASK_064_recovery_module_structure.yaml +57 -0
- package/core/dev/pipeline/archived/TASK_065_recovery_core_extract.yaml +56 -0
- package/core/dev/pipeline/archived/TASK_066_self_enhancement_scheduler_models.yaml +60 -0
- package/core/dev/pipeline/archived/TASK_067_agents_section_quick_actions.yaml +53 -0
- package/core/dev/pipeline/archived/TASK_067_self_enhancement_scheduler_core.yaml +65 -0
- package/core/dev/pipeline/archived/TASK_068_agent_workflow_rule_enhancement.yaml +46 -0
- package/core/dev/pipeline/archived/TASK_068_self_enhancement_tauri_commands.yaml +61 -0
- package/core/dev/pipeline/archived/TASK_069_agent_wizard_responsive.yaml +46 -0
- package/core/dev/pipeline/archived/TASK_069_self_enhancement_ui.yaml +62 -0
- package/core/dev/pipeline/archived/TASK_070_preview_panel_redesign.yaml +62 -0
- package/core/dev/pipeline/archived/TASK_070_self_enhancement_integration.yaml +57 -0
- package/core/dev/pipeline/archived/TASK_071_preview_panel_qa.yaml +98 -0
- package/core/dev/pipeline/archived/TASK_071_single_agent_config.yaml +57 -0
- package/core/dev/pipeline/archived/TASK_072_preview_modal_esc_fix.yaml +71 -0
- package/core/dev/pipeline/archived/TASK_072_product_review_module.yaml +57 -0
- package/core/dev/pipeline/archived/TASK_073_agents_page_component_refactor.yaml +68 -0
- package/core/dev/pipeline/archived/TASK_073_rename_single_agent.yaml +64 -0
- package/core/dev/pipeline/archived/TASK_074_preview_mode_ui_diagnosis.yaml +71 -0
- package/core/dev/pipeline/archived/TASK_074_single_agent_ui_toggle.yaml +56 -0
- package/core/dev/pipeline/archived/TASK_075_agents_page_component_refactor.yaml +69 -0
- package/core/dev/pipeline/archived/TASK_075_single_agent_integration_test.yaml +75 -0
- package/core/dev/pipeline/archived/TASK_076_preview_mode_ui_diagnosis.yaml +70 -0
- package/core/dev/pipeline/archived/TASK_076_single_agent_continuous_mode.yaml +65 -0
- package/core/dev/pipeline/archived/TASK_077_failure_directory_structure.yaml +51 -0
- package/core/dev/pipeline/archived/TASK_077_single_agent_typescript_types.yaml +59 -0
- package/core/dev/pipeline/archived/TASK_078_fail_001_agent_no_output.yaml +53 -0
- package/core/dev/pipeline/archived/TASK_078_single_agent_ui_simplify.yaml +74 -0
- package/core/dev/pipeline/archived/TASK_079_dashboard_rwd_responsive.yaml +63 -0
- package/core/dev/pipeline/archived/TASK_079_fail_002_json_bom.yaml +56 -0
- package/core/dev/pipeline/archived/TASK_080_fail_003_queue_pollution.yaml +56 -0
- package/core/dev/pipeline/archived/TASK_080_http_server_module.yaml +55 -0
- package/core/dev/pipeline/archived/TASK_081_failure_logging_tools.yaml +57 -0
- package/core/dev/pipeline/archived/TASK_081_http_api_routes.yaml +62 -0
- package/core/dev/pipeline/archived/TASK_082_frontend_api_adapter.yaml +51 -0
- package/core/dev/pipeline/archived/TASK_082_integrate_failure_to_workflow.yaml +60 -0
- package/core/dev/pipeline/archived/TASK_083_cleanup_nextjs_api.yaml +48 -0
- package/core/dev/pipeline/archived/TASK_083_task_queue_cleanup.yaml +67 -0
- package/core/dev/pipeline/archived/TASK_084_rust_dead_code_cleanup.yaml +66 -0
- package/core/dev/pipeline/archived/TASK_084_scheduler_sync_logic_fix.yaml +68 -0
- package/core/dev/pipeline/archived/TASK_085_http_api_web_mode_fixes.yaml +46 -0
- package/core/dev/pipeline/archived/TASK_085_memory_consolidation_0204_0205.yaml +98 -0
- package/core/dev/pipeline/archived/TASK_086_collapsible_preview_panel.yaml +161 -0
- package/core/dev/pipeline/archived/TASK_086_web_mode_feature_parity.yaml +62 -0
- package/core/dev/pipeline/archived/TASK_087_manual_memory_archival.yaml +163 -0
- package/core/dev/pipeline/archived/TASK_087_mobile_http_control.yaml +68 -0
- package/core/dev/pipeline/archived/TASK_088_fail_003_to_ppl_002_rule.yaml +63 -0
- package/core/dev/pipeline/archived/TASK_088_mobile_http_qa.yaml +121 -0
- package/core/dev/pipeline/archived/TASK_089_agent_collaboration_topic.yaml +60 -0
- package/core/dev/pipeline/archived/TASK_089_web_mode_monitor_fix.yaml +58 -0
- package/core/dev/pipeline/archived/TASK_090_cli_detection_fix.yaml +61 -0
- package/core/dev/pipeline/archived/TASK_090_ui_ux_lessons_topic.yaml +63 -0
- package/core/dev/pipeline/archived/TASK_091_expandable_card_design.yaml +56 -0
- package/core/dev/pipeline/archived/TASK_091_move_agent_section_components.yaml +65 -0
- package/core/dev/pipeline/archived/TASK_092_expandable_card_component.yaml +60 -0
- package/core/dev/pipeline/archived/TASK_092_refactor_agent_create_wizard.yaml +84 -0
- package/core/dev/pipeline/archived/TASK_093_taskcard_detail_integration.yaml +57 -0
- package/core/dev/pipeline/archived/TASK_093_update_barrel_exports_test.yaml +84 -0
- package/core/dev/pipeline/archived/TASK_094_ai_agent_generation_enhancement.yaml +115 -0
- package/core/dev/pipeline/archived/TASK_094_proposalcard_detail_integration.yaml +55 -0
- package/core/dev/pipeline/archived/TASK_095_preview_fixes.yaml +129 -0
- package/core/dev/pipeline/archived/TASK_095_single_agent_task_selector.yaml +60 -0
- package/core/dev/pipeline/archived/TASK_096_agents_page_ux_improvements.yaml +163 -0
- package/core/dev/pipeline/archived/TASK_096_single_agent_status_sync.yaml +60 -0
- package/core/dev/pipeline/archived/TASK_097_local_claude_error_logging.yaml +59 -0
- package/core/dev/pipeline/archived/TASK_097_single_agent_monitor_events.yaml +59 -0
- package/core/dev/pipeline/archived/TASK_098_product_manager_team_phase2.yaml +60 -0
- package/core/dev/pipeline/archived/TASK_098_single_agent_refactor_test.yaml +58 -0
- package/core/dev/pipeline/archived/TASK_099_backend_team_creation.yaml +258 -0
- package/core/dev/pipeline/archived/TASK_100_frontend_team_creation.yaml +61 -0
- package/core/dev/pipeline/archived/TASK_101_orchestrator_system.yaml +403 -0
- package/core/dev/pipeline/archived/TASK_102_designer_sre_teams.yaml +90 -0
- package/core/dev/pipeline/archived/TASK_103_integration_testing.yaml +86 -0
- package/core/dev/pipeline/archived/TASK_128_integration_testing.yaml +83 -0
- package/core/dev/pipeline/archived/TASK_134_cortex_v2_phase3_file_watcher.yaml +65 -0
- package/core/dev/pipeline/archived/TASK_134_team_http_api.yaml +96 -0
- package/core/dev/pipeline/archived/TASK_135_cortex_v2_phase3_git_monitor.yaml +63 -0
- package/core/dev/pipeline/archived/TASK_136_cortex_v2_phase3_change_analyzer.yaml +69 -0
- package/core/dev/pipeline/archived/TASK_137_cortex_v2_phase3_cache_invalidator.yaml +67 -0
- package/core/dev/pipeline/archived/TASK_137_team_orchestrator_integration.yaml +93 -0
- package/core/dev/pipeline/archived/TASK_138_cortex_v2_phase3_distributed_cache.yaml +68 -0
- package/core/dev/pipeline/archived/TASK_138_matrix_folder_structure.yaml +61 -0
- package/core/dev/pipeline/archived/TASK_139_cortex_v2_phase3_cache_prewarming.yaml +65 -0
- package/core/dev/pipeline/archived/TASK_146_unified_documentation.yaml +141 -0
- package/core/dev/pipeline/archived/TASK_147_pipeline_execution_rules.yaml +76 -0
- package/core/dev/pipeline/archived/TASK_148_update_claude_md.yaml +77 -0
- package/core/dev/pipeline/archived/TASK_149_fix_nextjs_mdx_serialization.yaml +63 -0
- package/core/dev/pipeline/archived/TASK_149_update_team_docs.yaml +77 -0
- package/core/dev/pipeline/archived/TASK_150_pipeline_workflow_guide.yaml +82 -0
- package/core/dev/pipeline/archived/TASK_164_fix_smart_context_switch.yaml +49 -0
- package/core/dev/pipeline/archived/TASK_165_ctags_symbol_index.yaml +53 -0
- package/core/dev/pipeline/archived/TASK_166_symbol_search_mcp_tool.yaml +48 -0
- package/core/dev/pipeline/archived/TASK_167_llm_module_summary.yaml +55 -0
- package/core/dev/pipeline/archived/TASK_168_map_reduce_context.yaml +51 -0
- package/core/dev/pipeline/archived/TASK_169_v2_integration_testing.yaml +52 -0
- package/core/dev/pipeline/backups/archive_2026-02-04T22-07-22/TASK_QUEUE_backup.json +95 -0
- package/core/dev/pipeline/docs/multi-agent-coordination.md +446 -0
- package/core/dev/pipeline/docs/overview.md +406 -0
- package/core/dev/pipeline/docs/task-management.md +412 -0
- package/core/dev/pipeline/docs/workflows.md +32 -0
- package/core/dev/pipeline/orchestrator/schemas/task_queue_schema.json +58 -0
- package/core/dev/pipeline/orchestrator/schemas/task_schema.json +139 -0
- package/core/dev/pipeline/plans/PLAN_task_cli_refactor.md +281 -0
- package/core/dev/pipeline/tasks/.gitkeep +1 -0
- package/core/dev/pipeline/test_results/TASK_TEST_PARALLEL_002_result.txt +27 -0
- package/core/dev/plans/CLI_FIRST_INSTALL_FLOW.md +128 -0
- package/core/dev/plans/FORMATION_RETIREMENT_PLAN.md +313 -0
- package/core/dev/plans/KUZU_REPLACEMENT_PLAN.md +126 -0
- package/core/dev/schemas/PRODUCT_SPEC.example.yaml +382 -0
- package/core/dev/schemas/PRODUCT_SPEC.schema.json +800 -0
- package/core/dev/schemas/README.md +517 -0
- package/core/dev/schemas/TASK.schema.json +226 -0
- package/core/dev/schemas/dataflows_ground_truth.yaml +173 -0
- package/core/dev/schemas/dataflows_spec.yaml +160 -0
- package/core/dev/schemas/extends_ground_truth.yaml +66 -0
- package/core/dev/schemas/extends_spec.yaml +121 -0
- package/core/dev/schemas/implements_ground_truth.yaml +77 -0
- package/core/dev/schemas/implements_spec.yaml +140 -0
- package/core/dev/scripts/CRASH_DIAGNOSIS.md +47 -0
- package/core/dev/scripts/README.md +142 -0
- package/core/dev/scripts/RUN_ONCE.bat +40 -0
- package/core/dev/scripts/START_DEV_AGENT.bat +63 -0
- package/core/dev/scripts/START_MULTI_AGENT.bat +80 -0
- package/core/dev/scripts/check-alaya-report-isolation.js +255 -0
- package/core/dev/scripts/check-file-size.js +268 -0
- package/core/dev/scripts/ci-feedback.js +251 -0
- package/core/dev/scripts/clean-verify-targets.js +132 -0
- package/core/dev/scripts/cleanup-queue.js +184 -0
- package/core/dev/scripts/cleanup_queue.js +86 -0
- package/core/dev/scripts/dev_agent_scheduler.ps1 +536 -0
- package/core/dev/scripts/dispatch-stats.js +384 -0
- package/core/dev/scripts/dispatch-stats.test.js +162 -0
- package/core/dev/scripts/gc-agent-worktrees.js +461 -0
- package/core/dev/scripts/gc-agent-worktrees.test.js +48 -0
- package/core/dev/scripts/hooks/README.md +148 -0
- package/core/dev/scripts/init_git.ps1 +396 -0
- package/core/dev/scripts/init_git.sh +337 -0
- package/core/dev/scripts/init_project.ps1 +851 -0
- package/core/dev/scripts/init_project.sh +477 -0
- package/core/dev/scripts/js-yaml-resolution.test.js +48 -0
- package/core/dev/scripts/kenaz-session.js +354 -0
- package/core/dev/scripts/kenaz-session.test.js +234 -0
- package/core/dev/scripts/legacy/README.md +39 -0
- package/core/dev/scripts/legacy/dev_agent_scheduler.ps1.bak +536 -0
- package/core/dev/scripts/legacy/multi_agent_scheduler.ps1.bak +1978 -0
- package/core/dev/scripts/matrix/CLI_README.md +214 -0
- package/core/dev/scripts/matrix/README.md +310 -0
- package/core/dev/scripts/matrix/package-lock.json +4266 -0
- package/core/dev/scripts/matrix/package.json +55 -0
- package/core/dev/scripts/matrix/src/abbreviations.ts +295 -0
- package/core/dev/scripts/matrix/src/cli/commands/convert.ts +211 -0
- package/core/dev/scripts/matrix/src/cli/commands/create.ts +95 -0
- package/core/dev/scripts/matrix/src/cli/commands/delete.ts +102 -0
- package/core/dev/scripts/matrix/src/cli/commands/list-tags.ts.wip +140 -0
- package/core/dev/scripts/matrix/src/cli/commands/manage-tags.ts.wip +173 -0
- package/core/dev/scripts/matrix/src/cli/commands/query.ts +261 -0
- package/core/dev/scripts/matrix/src/cli/commands/read.ts +77 -0
- package/core/dev/scripts/matrix/src/cli/commands/stats.ts.wip +168 -0
- package/core/dev/scripts/matrix/src/cli/commands/tokens.ts.wip +126 -0
- package/core/dev/scripts/matrix/src/cli/commands/update.ts +147 -0
- package/core/dev/scripts/matrix/src/cli/commands/validate.ts +275 -0
- package/core/dev/scripts/matrix/src/cli/index.ts +350 -0
- package/core/dev/scripts/matrix/src/cli/utils/file-handler.ts +72 -0
- package/core/dev/scripts/matrix/src/cli/utils/logger.ts +65 -0
- package/core/dev/scripts/matrix/src/index.ts +62 -0
- package/core/dev/scripts/matrix/src/indexer/tag-indexer.ts +165 -0
- package/core/dev/scripts/matrix/src/parser.ts +281 -0
- package/core/dev/scripts/matrix/src/serializer.ts +151 -0
- package/core/dev/scripts/matrix/src/validator.ts +301 -0
- package/core/dev/scripts/matrix/tests/abbreviations.test.ts +122 -0
- package/core/dev/scripts/matrix/tests/cli.test.ts +177 -0
- package/core/dev/scripts/matrix/tests/convert.test.ts +143 -0
- package/core/dev/scripts/matrix/tests/parser.test.ts +203 -0
- package/core/dev/scripts/matrix/tests/query.test.ts +85 -0
- package/core/dev/scripts/matrix/tests/serializer.test.ts +197 -0
- package/core/dev/scripts/matrix/tests/validate.test.ts +141 -0
- package/core/dev/scripts/matrix/tests/validator.test.ts +167 -0
- package/core/dev/scripts/matrix/tsconfig.json +20 -0
- package/core/dev/scripts/matrix/types/index.d.ts +111 -0
- package/core/dev/scripts/matrix/types/index.d.ts.map +1 -0
- package/core/dev/scripts/matrix/types/index.js +8 -0
- package/core/dev/scripts/matrix/types/index.js.map +1 -0
- package/core/dev/scripts/matrix/types/index.ts +124 -0
- package/core/dev/scripts/memory-guard-eval.js +330 -0
- package/core/dev/scripts/memory-usage-report.js +152 -0
- package/core/dev/scripts/migrate-task-dependencies.js +198 -0
- package/core/dev/scripts/multi_agent_scheduler.ps1 +2021 -0
- package/core/dev/scripts/multi_agent_scheduler.sh +1344 -0
- package/core/dev/scripts/probe/ansuz-scaffold-ablation.js +579 -0
- package/core/dev/scripts/probe/ansuz-scaffold-ablation.test.js +244 -0
- package/core/dev/scripts/probe/hippocampus-concurrency.js +247 -0
- package/core/dev/scripts/probe/hook-latency-probe.js +315 -0
- package/core/dev/scripts/probe/hook-latency-probe.test.js +105 -0
- package/core/dev/scripts/probe/prediction-signal-auc.js +483 -0
- package/core/dev/scripts/probe/prediction-signal-auc.test.js +200 -0
- package/core/dev/scripts/reset_tasks.js +99 -0
- package/core/dev/scripts/run-rust-tests.js +207 -0
- package/core/dev/scripts/run-rust-tests.test.js +154 -0
- package/core/dev/scripts/run_once.sh +47 -0
- package/core/dev/scripts/rust-verify-worktree.js +591 -0
- package/core/dev/scripts/rust-verify-worktree.test.js +574 -0
- package/core/dev/scripts/seh_probe.rs +26 -0
- package/core/dev/scripts/setup_mcp.ps1 +192 -0
- package/core/dev/scripts/setup_mcp.sh +159 -0
- package/core/dev/scripts/setup_rag.ps1 +304 -0
- package/core/dev/scripts/setup_rag.sh +230 -0
- package/core/dev/scripts/start_dev_agent.sh +137 -0
- package/core/dev/scripts/start_multi_agent.sh +41 -0
- package/core/dev/scripts/sync_task_queue.ps1 +505 -0
- package/core/dev/scripts/sync_task_queue.sh +392 -0
- package/core/dev/scripts/task1961/RUNBOOK.md +300 -0
- package/core/dev/scripts/task1961/fixtures/never-listens.server.js +54 -0
- package/core/dev/scripts/task1961/fixtures/slow-serve.server.js +134 -0
- package/core/dev/scripts/task1961/run-fixture.js +659 -0
- package/core/dev/scripts/task1961/selftest.js +247 -0
- package/core/dev/scripts/test-pty-ws-tunnel.js +229 -0
- package/core/dev/scripts/validate_pipeline.js +197 -0
- package/core/dev/scripts/verify-isbar-capture.js +100 -0
- package/core/dev/scripts/verify-target-dir.js +69 -0
- package/core/dev/scripts/verify-task-1839.js +141 -0
- package/core/dev/specs/agent-connect/PROTOCOL.md +177 -0
- package/core/dev/specs/agent-connect/SDK_GUIDE.md +915 -0
- package/core/dev/specs/agent-connect/examples/minimal-site/README.md +137 -0
- package/core/dev/specs/agent-connect/examples/minimal-site/package.json +12 -0
- package/core/dev/specs/agent-connect/examples/minimal-site/public/index.html +116 -0
- package/core/dev/specs/agent-connect/examples/minimal-site/public/install-redirect.js +73 -0
- package/core/dev/specs/agent-connect/examples/minimal-site/server.js +516 -0
- package/core/dev/specs/agent-connect/examples/minimal-site/test/smoke.test.mjs +263 -0
- package/core/dev/specs/agent-connect/history/DEFECT_REPORT_kenaz-agent-hub_2026-09-09_v0.4-empty-prompt-no-first-turn.md +77 -0
- package/core/dev/specs/agent-connect/history/DEFECT_REPORT_kenaz-agent-hub_2026-09-09_v0.4-prompt-mojibake.md +90 -0
- package/core/dev/specs/agent-connect/history/FEATURE_REQUEST_kenaz-agent-hub_2026-09-07.md +61 -0
- package/core/dev/specs/agent-connect/history/FEATURE_REQUEST_kenaz-agent-hub_2026-09-08_relay-v1-conformance.md +76 -0
- package/core/dev/specs/agent-connect/history/FEATURE_REQUEST_kenaz-agent-hub_2026-09-09_v0.4-session-channel.md +87 -0
- package/core/dev/specs/agent-connect/history/FLOWPIX_REPLY_agent-hub_2026-09-08_relay-v1-answers.md +68 -0
- package/core/dev/specs/agent-connect/history/FLOWPIX_bridge_CONTRACT.md +642 -0
- package/core/dev/specs/agent-connect/history/FLOWPIX_spikes_relay_spike_relay.mjs +244 -0
- package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-07.md +77 -0
- package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-08_direction-change-v0.3.md +44 -0
- package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-08_relay-v1-answers-ack.md +37 -0
- package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-08_relay-v1-conformance.md +56 -0
- package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_annotations-install-coldstart.md +44 -0
- package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_empty-prompt-first-turn.md +56 -0
- package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_prompt-mojibake-fixed.md +48 -0
- package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_session-channel.md +57 -0
- package/core/dev/specs/agent-connect/history/PROTOCOL_v0.3_snapshot.md +379 -0
- package/core/dev/specs/agent-connect/history/README.md +47 -0
- package/core/dev/specs/peer/CODEX_INTERACTIVE_PUSH.md +65 -0
- package/core/dev/specs/peer/CODEX_PEER_PULL_SPIKE.md +54 -0
- package/core/dev/specs/peer/MODS_SPIKE.md +133 -0
- package/core/dev/specs/peer/PER_PROJECT_ADDRESSING.md +143 -0
- package/core/dev/specs/peer/SWARM_PROTOCOLS.md +256 -0
- package/core/dev/specs/peer/codex-hook-shim-peer.test.js +101 -0
- package/core/dev/specs/peer/codex-push-launcher.test.js +142 -0
- package/core/dev/specs/peer/setup-codex-hooks.test.js +22 -0
- package/core/dev/specs/peer-ansuz/DELIVERY_SPIKE.md +397 -0
- package/core/dev/specs/peer-ansuz/DESIGN.md +109 -0
- package/core/dev/specs/peer-ansuz/spike/claude_poke.js +129 -0
- package/core/dev/specs/peer-ansuz/spike/claude_session_start_hook.js +37 -0
- package/core/dev/specs/peer-ansuz/spike/claude_settings_hook.json +14 -0
- package/core/dev/specs/peer-ansuz/spike/codex_appserver_client.js +105 -0
- package/core/dev/specs/peer-ansuz/spike/codex_appserver_query.js +29 -0
- package/core/dev/specs/peer-ansuz/spike/extract_timeline.js +26 -0
- package/core/dev/specs/synapse/SYMBOL_IDENTITY.md +305 -0
- package/core/dev/spikes/A4-cypher-varlen.md +176 -0
- package/core/dev/spikes/bloat-rounds.sh +25 -0
- package/core/dev/spikes/mods/clean-claude.js +9 -0
- package/core/dev/spikes/mods/drive-probe.js +29 -0
- package/core/dev/spikes/mods/e2e-peer.js +71 -0
- package/core/dev/spikes/mods/evidence/e2e-peer-control.json +17 -0
- package/core/dev/spikes/mods/evidence/e2e-peer-mod.json +17 -0
- package/core/dev/spikes/mods/evidence/probe-006a6e65-d807-4bc1-b648-fd7d1edfe0b4.jsonl +4 -0
- package/core/dev/spikes/mods/evidence/probe-cebdf1f7-f9c4-47a8-83cd-7c0786177404.jsonl +12 -0
- package/core/dev/spikes/mods/evidence/probe-eb21147d-10ce-4c32-93ed-37ca37d88d5a.jsonl +11 -0
- package/core/dev/spikes/mods/evidence/stream-cebdf1f7.jsonl +18 -0
- package/core/dev/spikes/mods/kenaz-mod-probe/.claude-plugin/plugin.json +1 -0
- package/core/dev/spikes/mods/kenaz-mod-probe/hooks/hooks.json +1 -0
- package/core/dev/spikes/mods/kenaz-mod-probe/hooks/register.ts +65 -0
- package/core/dev/spikes/mods/kenaz-mod-probe/tsconfig.json +3 -0
- package/core/k-cli/README.md +423 -0
- package/core/k-cli/package.json +21 -0
- package/core/k-cli/templates/k-cli.md +91 -0
- package/core/k-cli/test/TEST_SPEC.md +134 -0
- package/core/k-cli/test/run.sh +469 -0
- package/core/plugins/kenaz/.claude-plugin/plugin.json +1 -0
- package/core/plugins/kenaz/.mcp.json +5 -0
- package/core/plugins/kenaz/INVENTORY.md +48 -0
- package/core/plugins/kenaz/README.md +55 -0
- package/core/plugins/kenaz/commands/Amelia.md +5 -0
- package/core/plugins/kenaz/commands/Ansuz.md +38 -0
- package/core/plugins/kenaz/commands/architect.md +24 -0
- package/core/plugins/kenaz/commands/incident.md +15 -0
- package/core/plugins/kenaz/commands/kenaz.md +12 -0
- package/core/plugins/kenaz/commands/review.md +14 -0
- package/core/plugins/kenaz/commands/security.md +15 -0
- package/core/plugins/kenaz/commands/spec.md +22 -0
- package/core/plugins/kenaz/commands/strategy.md +141 -0
- package/core/plugins/kenaz/commands//347/224/242/345/223/201.md +15 -0
- package/core/plugins/kenaz/commands//350/250/255/350/250/210.md +14 -0
- package/core/plugins/kenaz/commands//350/251/225/344/274/260.md +16 -0
- package/core/plugins/kenaz/guidance.md +5 -0
- package/core/plugins/kenaz/hooks/core-resolve.js +230 -0
- package/core/plugins/kenaz/hooks/hooks.json +31 -0
- package/core/plugins/kenaz/hooks/kenaz-hook.js +112 -0
- package/core/plugins/kenaz/hooks/mode.js +39 -0
- package/core/plugins/kenaz/scripts/kenaz-mode.js +46 -0
- package/core/plugins/kenaz/scripts/kenaz.test.js +123 -0
- package/core/plugins/kenaz/scripts/sync.js +45 -0
- package/core/plugins/kenaz/scripts/ygg.js +157 -0
- package/core/plugins/kenaz/skills/adapt/SKILL.md +199 -0
- package/core/plugins/kenaz/skills/animate/SKILL.md +190 -0
- package/core/plugins/kenaz/skills/architect_agent/SKILL.md +408 -0
- package/core/plugins/kenaz/skills/assessment_agent/SKILL.md +289 -0
- package/core/plugins/kenaz/skills/audit/SKILL.md +129 -0
- package/core/plugins/kenaz/skills/backend_agent/SKILL.md +407 -0
- package/core/plugins/kenaz/skills/backend_engineer/SKILL.md +788 -0
- package/core/plugins/kenaz/skills/bolder/SKILL.md +132 -0
- package/core/plugins/kenaz/skills/clarify/SKILL.md +180 -0
- package/core/plugins/kenaz/skills/code_reviewer/SKILL.md +305 -0
- package/core/plugins/kenaz/skills/code_reviewer/patterns.yaml +85 -0
- package/core/plugins/kenaz/skills/colorize/SKILL.md +158 -0
- package/core/plugins/kenaz/skills/critique/SKILL.md +118 -0
- package/core/plugins/kenaz/skills/delight/SKILL.md +317 -0
- package/core/plugins/kenaz/skills/designer/SKILL.md +845 -0
- package/core/plugins/kenaz/skills/dev_agent/SKILL.md +503 -0
- package/core/plugins/kenaz/skills/developer/SKILL.md +792 -0
- package/core/plugins/kenaz/skills/distill/SKILL.md +137 -0
- package/core/plugins/kenaz/skills/extract/SKILL.md +95 -0
- package/core/plugins/kenaz/skills/feature_agent/SKILL.md +303 -0
- package/core/plugins/kenaz/skills/frontend-design/SKILL.md +127 -0
- package/core/plugins/kenaz/skills/frontend-design/reference/color-and-contrast.md +132 -0
- package/core/plugins/kenaz/skills/frontend-design/reference/interaction-design.md +123 -0
- package/core/plugins/kenaz/skills/frontend-design/reference/motion-design.md +99 -0
- package/core/plugins/kenaz/skills/frontend-design/reference/responsive-design.md +114 -0
- package/core/plugins/kenaz/skills/frontend-design/reference/spatial-design.md +100 -0
- package/core/plugins/kenaz/skills/frontend-design/reference/typography.md +131 -0
- package/core/plugins/kenaz/skills/frontend-design/reference/ux-writing.md +107 -0
- package/core/plugins/kenaz/skills/frontend_agent/SKILL.md +327 -0
- package/core/plugins/kenaz/skills/harden/SKILL.md +358 -0
- package/core/plugins/kenaz/skills/incident_response/SKILL.md +315 -0
- package/core/plugins/kenaz/skills/normalize/SKILL.md +67 -0
- package/core/plugins/kenaz/skills/onboard/SKILL.md +243 -0
- package/core/plugins/kenaz/skills/optimize/SKILL.md +269 -0
- package/core/plugins/kenaz/skills/polish/SKILL.md +202 -0
- package/core/plugins/kenaz/skills/product_manager/SKILL.md +1091 -0
- package/core/plugins/kenaz/skills/qa_engineer/SKILL.md +1269 -0
- package/core/plugins/kenaz/skills/quieter/SKILL.md +118 -0
- package/core/plugins/kenaz/skills/security_agent/SKILL.md +312 -0
- package/core/plugins/kenaz/skills/spec_optimizer/SKILL.md +299 -0
- package/core/plugins/kenaz/skills/sre_agent/SKILL.md +1347 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/SKILL.md +377 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/styles.csv +68 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/search.py +106 -0
- package/core/plugins/kenaz-peer/.claude-plugin/plugin.json +1 -0
- package/core/plugins/kenaz-peer/hooks/hooks.json +1 -0
- package/core/plugins/kenaz-peer/hooks/register.test.ts +62 -0
- package/core/plugins/kenaz-peer/hooks/register.ts +146 -0
- package/core/plugins/kenaz-peer/tsconfig.json +3 -0
- package/lib/cli.js +251 -0
- package/lib/cli.test.js +59 -0
- package/lib/dashboard.js +80 -0
- package/lib/dashboard.test.js +59 -0
- package/package.json +28 -4
- package/vendor/install-kenaz-cli.js +268 -0
- package/README.md +0 -3
|
@@ -0,0 +1,881 @@
|
|
|
1
|
+
# Synapse Worker Per Project — Design + PoC (TASK_1984)
|
|
2
|
+
|
|
3
|
+
Status: **ON by default (TASK_1999, 2026-09-22).** Feature flag
|
|
4
|
+
`KENAZ_SYNAPSE_WORKERS` defaults ON everywhere, including installed builds —
|
|
5
|
+
`KENAZ_SYNAPSE_WORKERS=0` opts out. See §10 for the decision, the R1 status
|
|
6
|
+
aggregation and R5 auto-regulation that were the prerequisites, and the
|
|
7
|
+
rollback lever.
|
|
8
|
+
|
|
9
|
+
Base: main @ `c6ad8ec83` (includes TASK_1983 `active_project_paths()`,
|
|
10
|
+
TASK_1958/1960/1980).
|
|
11
|
+
|
|
12
|
+
DDx this card resolves: `rune_d7a57528a7a94868b1b2a9e16931aa2b` (2026-09-21,
|
|
13
|
+
user + Ansuz). Crash-floor evidence: `rune_2c28a731b02c4d2594a6478719f8adbb`
|
|
14
|
+
(3+ live `kuzu::Database` instances in one process → ACCESS_VIOLATION,
|
|
15
|
+
`CRASH_INVESTIGATION_2026-04-18.md`), `rune_e3ddf1b76b8f45bf90a11a84d2674515`
|
|
16
|
+
(cross-project concurrency fails from ~6 concurrent calls; **sequential**
|
|
17
|
+
cross-project access is cheap, 85-112ms/call — concurrency is what breaks,
|
|
18
|
+
not project count).
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 0. Problem restated
|
|
23
|
+
|
|
24
|
+
Users run several projects at once (several Ansuz sessions, one per
|
|
25
|
+
project). Today the Dashboard backend is **one process** with
|
|
26
|
+
`MAX_DB_POOL_SIZE=2` KuzuDB instances, one of which is permanently pinned to
|
|
27
|
+
the cortex cross-project graph (`meta_graph` is excluded from eviction
|
|
28
|
+
candidates). That leaves **one** project slot. Switching the Dashboard's
|
|
29
|
+
current project evicts whatever was resident (drain ≤30s + CHECKPOINT), so a
|
|
30
|
+
second live session's Synapse tools go cold or block.
|
|
31
|
+
|
|
32
|
+
The cap cannot be raised: 3+ live `kuzu::Database` instances in **one
|
|
33
|
+
process** crash on Windows regardless of buffer-pool size (confirmed against
|
|
34
|
+
the kuzu 0.11.3 fork). The cap is a **per-process** floor. The only way to
|
|
35
|
+
keep N projects resident and reachable at once is **N processes**.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 1. R1 — Measurements
|
|
40
|
+
|
|
41
|
+
All measured 2026-09-21 on the live dev backend (`kenaz-dashboard.exe`,
|
|
42
|
+
pid 32900, port 18080), one project (KenazAI) already resident, via
|
|
43
|
+
read-only `Get-Process`/`tasklist` and one MCP call. No live session was
|
|
44
|
+
disrupted (Synapse tool calls only; no rebuild, no restart).
|
|
45
|
+
|
|
46
|
+
| Measurement | Value | Method |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| Backend RSS, 1 project resident, idle | **834,124 KB** (~815 MB) | `tasklist /FI "PID eq 32900"` |
|
|
49
|
+
| Backend RSS immediately after a `synapse_status` call for a **second, non-current** project (esp32) | **923,212 KB** (~902 MB) | same, after `POST /api/mcp` `synapse_status` with `projectPath=.../esp32` |
|
|
50
|
+
| **Delta for opening a second project's KuzuDB pool slot** | **+89,088 KB (~87 MB)** | difference of the above |
|
|
51
|
+
| Call wall time for that cross-project call | 211 ms | `time curl` |
|
|
52
|
+
| ONNX embedding model on disk (arctic-embed-xs, the variant actually deployed — SFR-400M/bge-m3 are unused fallbacks, confirmed no files present for either) | **87 MB** (`model.onnx`) + tokenizer.json | `du -h` on `%LOCALAPPDATA%\Kenaz Dashboard\resources\onnx\arctic-embed-xs\model.onnx` |
|
|
53
|
+
| ONNX runtime DLL | 12 MB (`onnxruntime.dll`) | same dir |
|
|
54
|
+
| Is the embedding model loaded per-process or per-project? | **Per-process.** `INDEX_ENGINE` and `QUERY_ENGINE` (`features/synapse/embedding.rs:103-104`) are `static OnceLock<Result<EmbeddingEngine, String>>` — process-global singletons, keyed by nothing project-specific. One process pays the ONNX load cost exactly once no matter how many projects it touches (today, or in a pool large enough not to evict). | Source read: `resolve_model_dir()` / `create_engine()` take no project argument; the OnceLocks are declared at module scope. |
|
|
55
|
+
|
|
56
|
+
**RSS delta interpretation.** +87 MB for a second project's KuzuDB slot
|
|
57
|
+
almost exactly matches the on-disk ONNX model size — that is very likely
|
|
58
|
+
coincidence, not causation: the embedding engines are process-global
|
|
59
|
+
OnceLocks that were already initialized before this call (this backend had
|
|
60
|
+
already served searches for the resident project), so this call could not
|
|
61
|
+
have triggered a *second* embedding-engine load. The ~87 MB is far more
|
|
62
|
+
likely KuzuDB opening a second buffer pool + catalog + mmap'd pages for the
|
|
63
|
+
esp32 graph database. Both numbers happening to be ~87 MB is the kind of
|
|
64
|
+
coincidence that deserves a second, cleaner measurement before being relied
|
|
65
|
+
on (see "Honest limits" below) — but it does not change the qualitative
|
|
66
|
+
conclusion.
|
|
67
|
+
|
|
68
|
+
**The N-worker RAM math this implies (structural, not measured per-worker —
|
|
69
|
+
no worker existed to measure until this PoC):**
|
|
70
|
+
|
|
71
|
+
- Per-worker fixed cost ≈ ONNX model (~87 MB on disk, ~100-180 MB resident
|
|
72
|
+
once ORT allocates its session arena — two engines, INDEX + QUERY, each
|
|
73
|
+
`create_engine()`'d independently, so treat 180-250 MB as the realistic
|
|
74
|
+
per-worker floor for the embedding half alone) **+** one KuzuDB instance's
|
|
75
|
+
buffer pool for that project (~87 MB, this run's measured delta) **+**
|
|
76
|
+
axum/tokio/reqwest runtime overhead (tens of MB, no WebView — a worker has
|
|
77
|
+
no Tauri window, so it should sit well below the 815 MB measured for the
|
|
78
|
+
full GUI process).
|
|
79
|
+
- **Estimated floor per worker: ~250-400 MB.** This is a structural estimate
|
|
80
|
+
from measured components, not a measured worker RSS (R4 must replace it
|
|
81
|
+
with a real number — the runbook below asks for exactly that).
|
|
82
|
+
- 16 GB machine, ~8 GB realistically available to background work after OS +
|
|
83
|
+
browser + IDE: **~20-30 concurrent workers** before RAM pressure, i.e. more
|
|
84
|
+
than any single user plausibly has active projects — but each worker
|
|
85
|
+
**duplicates the ONNX cost that a single process pays once.** N=5 active
|
|
86
|
+
projects costs ~5× the embedding RAM that one resident process pays today.
|
|
87
|
+
- 32 GB machine: proportionally higher, same duplication tax.
|
|
88
|
+
- **This duplication is the central trade-off for R5**, not raw worker
|
|
89
|
+
count: worker-per-project trades a hard crash floor (unfixable in-process)
|
|
90
|
+
for a RAM tax that scales with concurrently-active project count, paid
|
|
91
|
+
once per worker regardless of how many tools that worker serves.
|
|
92
|
+
|
|
93
|
+
**Honest limits of R1.** This is one measurement on one machine with one
|
|
94
|
+
warm backend; it is a lower bound / plausibility check, not a
|
|
95
|
+
production capacity model. The 87 MB/87 MB coincidence above should be
|
|
96
|
+
treated with suspicion until R4 measures an actual standalone worker's RSS
|
|
97
|
+
after `/health` goes ready (with and without a prior search, to separate
|
|
98
|
+
ORT init cost from KuzuDB open cost). No native-exception or crash was
|
|
99
|
+
observed during this measurement.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 2. R2 — Design
|
|
104
|
+
|
|
105
|
+
### 2.1 Process model
|
|
106
|
+
|
|
107
|
+
| Runs in **main backend** (Tauri process, port 18080) | Runs in **a worker** (one per active project, `--synapse-worker`) |
|
|
108
|
+
|---|---|
|
|
109
|
+
| cortex (cross-project `meta_graph`, `global_memory`) | that project's KuzuDB graph + FTS5 + embedding index |
|
|
110
|
+
| Alaya (built on cortex) | that project's heat/pulse/co-change caches (already per-project files under `<project>/.synapse/`) |
|
|
111
|
+
| hippocampus for the **current** project only (see 2.6 — no per-connection session identity exists yet, so "current" is still the Dashboard's global selection for tools that omit `projectPath`) | that project's inscribe spool (`memory/inscribe.rs`, already per-project dir — TASK_1959) |
|
|
112
|
+
| the forwarder (routing table + on-demand spawn) | that project's `IS_INDEXING` / `index_jobs` / `CONNECTION_GATE` state (all become per-**worker**-process automatically — no code change needed, they are already process statics; a worker just doesn't share them with the main process or other workers) |
|
|
113
|
+
| the axum router's non-synapse routes (agents, scheduler, tasks, git status, dispatch-log, ...) — unaffected, always local | its own embedding OnceLocks (ONNX loaded once per worker — the R1 duplication cost) |
|
|
114
|
+
| the Job Object that owns every worker's lifecycle | nothing cross-project; a worker never talks to another worker or to cortex |
|
|
115
|
+
|
|
116
|
+
The worker binary is **the same `kenaz-dashboard.exe`**, launched with
|
|
117
|
+
`--synapse-worker --project <path> --port <n>` (see 2.7 — deliberately not
|
|
118
|
+
the existing `bin/synapse-headless.rs`, which is a dev-only cargo bin target
|
|
119
|
+
not present in an installed bundle). A worker starts no Tauri `Builder`, no
|
|
120
|
+
WebView, no plugin manager, no scheduler — just the existing axum
|
|
121
|
+
`HttpServer` bound to `127.0.0.1:<port>` with a fresh `HttpAppState`, i.e.
|
|
122
|
+
exactly the subset of routes `routes::build_api_router` already builds
|
|
123
|
+
(`/api/mcp`, `/api/synapse/*`, `/api/synapse/temporal/*`, `/health`), unused
|
|
124
|
+
routes present but inert (no scheduler ever runs since nothing calls it).
|
|
125
|
+
|
|
126
|
+
### 2.2 Forwarding layer
|
|
127
|
+
|
|
128
|
+
Hook point: `mcp.rs::execute_tool_inner`, immediately before the tool-name
|
|
129
|
+
`match`. Every MCP `tools/call` already carries (or, per TASK_1983, is
|
|
130
|
+
expected to carry) an explicit `projectPath` for project-scoped tools —
|
|
131
|
+
`is_project_scoped_tool()` already defines that prefix set
|
|
132
|
+
(`synapse_*` / `hippocampus_*` / `cortex_*`).
|
|
133
|
+
|
|
134
|
+
Rule: **forward iff** (a) `KENAZ_SYNAPSE_WORKERS=1`, (b) the tool is in the
|
|
135
|
+
forwardable set, (c) `projectPath` is present and non-empty, and (d) the
|
|
136
|
+
resolved project is **not** the Dashboard's current project. The current
|
|
137
|
+
project always stays local — no loopback hop for the common case, and it is
|
|
138
|
+
also the one case the main process is guaranteed to already have a live
|
|
139
|
+
pool slot for.
|
|
140
|
+
|
|
141
|
+
**Resolution failure: serve locally, never forward (TASK_1986 R2).** The
|
|
142
|
+
decision above is factored into a pure `forward_decision(flag_on,
|
|
143
|
+
tool_forwardable, current, requested) -> ServeLocally(reason) | Forward` in
|
|
144
|
+
`synapse_worker.rs`. When the Dashboard's current project cannot be resolved
|
|
145
|
+
(`current: None` — e.g. `projects.json` missing/unparseable), the decision
|
|
146
|
+
is always `ServeLocally("current_unresolved")`, never `Forward` — a forward
|
|
147
|
+
target cannot be validated as "not the current project" if there is no
|
|
148
|
+
resolved current project to compare against, so the fail-safe direction is
|
|
149
|
+
local execution, not a blind hop to whatever worker the request asked for.
|
|
150
|
+
Logged once per process at `warn` level under the `synapse_worker` tracing
|
|
151
|
+
target (not per call — a broken `projects.json` must not spam the log).
|
|
152
|
+
|
|
153
|
+
At backend startup (before the reaper is armed), the resolved current
|
|
154
|
+
project is logged once under the `synapse_worker` tracing target:
|
|
155
|
+
`tracing::info!(target: "synapse_worker", workers_enabled, current_project =
|
|
156
|
+
%path_or_"<unresolved>", "synapse worker forwarder configuration")` — or,
|
|
157
|
+
when `KENAZ_SYNAPSE_WORKERS` is not `1`, a single line noting the forwarder
|
|
158
|
+
is disabled (no project resolution attempted in that case).
|
|
159
|
+
|
|
160
|
+
The REST surface (`/api/synapse/*`, used directly by the frontend, not
|
|
161
|
+
through MCP) needs the same treatment at its own resolution point — out of
|
|
162
|
+
scope for this PoC (R3 only forwards MCP `tools/call`), called out
|
|
163
|
+
explicitly as a gap below (2.8).
|
|
164
|
+
|
|
165
|
+
**Error semantics:**
|
|
166
|
+
|
|
167
|
+
- Worker not yet running → spawned on demand; the calling request blocks on
|
|
168
|
+
the HTTP readiness probe (bounded — see 2.3) rather than failing fast.
|
|
169
|
+
First-touch latency = spawn-to-ready time (R4 measures this).
|
|
170
|
+
- Worker spawn fails (can't find exe, can't write log dir, OS refuses
|
|
171
|
+
`Command::spawn`) → tool call returns `McpToolResult::error(...)`
|
|
172
|
+
immediately, with the underlying OS error in the message. No silent
|
|
173
|
+
fallback to local execution — a silent fallback would service the request
|
|
174
|
+
against the WRONG process's — actually the current process has no data for
|
|
175
|
+
a project it never opened, so this would just surface as a different
|
|
176
|
+
error downstream; failing at the forward boundary keeps the error close to
|
|
177
|
+
its cause.
|
|
178
|
+
- Worker crashes mid-flight (native exception, panic) → the forwarder's
|
|
179
|
+
`reqwest` call returns a connection error, surfaced as
|
|
180
|
+
`McpToolResult::error`. The PoC does **not** retry or respawn
|
|
181
|
+
automatically (R5 gap — production needs the crash-restart-with-backoff
|
|
182
|
+
from the requirements, not implemented here).
|
|
183
|
+
- Timeout: the PoC forward call uses a 120s client timeout (headroom for a
|
|
184
|
+
first-touch spawn + a slow `synapse_index full`); the readiness probe
|
|
185
|
+
itself uses a ~15s budget (50 × 300ms) that R4 should replace with a
|
|
186
|
+
measured number rather than this guess.
|
|
187
|
+
|
|
188
|
+
### 2.3 Worker lifecycle
|
|
189
|
+
|
|
190
|
+
- **Spawn trigger (PoC):** first forwarded call for a project with no
|
|
191
|
+
tracked worker. **Production** should instead spawn from
|
|
192
|
+
`active_project_paths()` (TASK_1983 — the live-session-lease set) on a
|
|
193
|
+
timer/watcher, so a worker is warm *before* the first tool call needs it,
|
|
194
|
+
not on the request's own critical path. The PoC's on-demand spawn was
|
|
195
|
+
chosen because it needs no background task and is enough to prove R4's
|
|
196
|
+
numbers; the production version trades a warm-start guarantee for a
|
|
197
|
+
standing idle-RAM cost per active session even if that session's Synapse
|
|
198
|
+
tools are never called — a real trade-off, not a free upgrade.
|
|
199
|
+
- **Readiness:** HTTP probe against the worker's own `/health` route
|
|
200
|
+
(TASK_1961 lesson — never a bare TCP-connect: the listener binds long
|
|
201
|
+
before axum, embedding init, or the first KuzuDB open are actually able to
|
|
202
|
+
answer, so a TCP-only probe would report "ready" while the first real
|
|
203
|
+
request still queues behind slow init).
|
|
204
|
+
- **Idle reaper:** not implemented in the PoC (`WORKERS` map only grows).
|
|
205
|
+
Production needs one — same shape as the pool's own missing "nothing
|
|
206
|
+
tracks last_used, no idle release" gap (rune on hippocampus concurrency,
|
|
207
|
+
2026-09-04) that TASK_1925 addressed for in-process pooling; a
|
|
208
|
+
worker-level reaper is the direct analogue, keyed off last-forwarded-call
|
|
209
|
+
time instead of `Arc::strong_count`.
|
|
210
|
+
- **Crash restart with backoff:** not implemented in the PoC. Production:
|
|
211
|
+
detect via failed forward + a stale/dead PID in the `WORKERS` map, restart
|
|
212
|
+
with exponential backoff, cap retries, surface the give-up state through
|
|
213
|
+
`synapse_status` per-project (2.5).
|
|
214
|
+
- **Job Object cleanup:** implemented — the PoC calls the *existing* global
|
|
215
|
+
`job_object::assign_child_pid(pid)` (already initialized at Tauri setup
|
|
216
|
+
for the pty-server/nextjs-server sidecars — `lib.rs:1770`), so every
|
|
217
|
+
worker dies with the Dashboard even on a hard crash
|
|
218
|
+
(`JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE`), same precedent as those two
|
|
219
|
+
sidecars. A **scoped** Job Object per worker (`job_object::ScopedJobObject`,
|
|
220
|
+
already exists for Agent Hub launches) would let production kill one
|
|
221
|
+
wedged worker without taking down the others — worth adopting over the
|
|
222
|
+
PoC's use of the single global job if per-worker force-kill becomes a
|
|
223
|
+
requirement.
|
|
224
|
+
|
|
225
|
+
### 2.4 Port allocation and auth
|
|
226
|
+
|
|
227
|
+
- **PoC:** a process-global incrementing counter starting at 18100.
|
|
228
|
+
Acceptable for one Dashboard instance in a dev session; **not** acceptable
|
|
229
|
+
for production — no collision check against a port a user's other
|
|
230
|
+
service might already hold, no persistence across restarts (a worker
|
|
231
|
+
registry rebuilt from nothing on every Dashboard boot, needing every
|
|
232
|
+
worker respawned).
|
|
233
|
+
- **Production recommendation:** bind with port `0` (OS-assigned ephemeral)
|
|
234
|
+
and have the worker report its actual bound port back to the parent
|
|
235
|
+
(stdout line, matching the `SERVER_READY port=N` pattern
|
|
236
|
+
`bin/synapse-headless.rs` already uses) rather than dictating a port
|
|
237
|
+
up front — removes the collision class entirely.
|
|
238
|
+
- **Auth:** workers bind `127.0.0.1` only (the PoC explicitly overrides the
|
|
239
|
+
shared `HttpServerConfig` default of `0.0.0.0`, which exists for LAN
|
|
240
|
+
mobile access to the *main* backend — TASK_088 — and is wrong for a
|
|
241
|
+
worker). The existing `require_auth_with_state` middleware already exempts
|
|
242
|
+
loopback, non-tunnel requests (`auth.rs:241`, `is_loopback`), so the
|
|
243
|
+
forwarder's plain loopback POST needs no token. This reuses the main
|
|
244
|
+
backend's existing trust model as-is: **any local process can reach a
|
|
245
|
+
worker's port**, same trust boundary the main backend already has. That is
|
|
246
|
+
an explicit, inherited trust decision, not a new hole — flagging it here
|
|
247
|
+
so it is reviewed as a decision rather than discovered later. If it needs
|
|
248
|
+
tightening, the tunnel-bypass-closing mechanism already in `auth.rs`
|
|
249
|
+
(`x-kenaz-source: tunnel` requires a real token even from loopback) is the
|
|
250
|
+
template to extend to worker-to-worker traffic if that ever exists (it
|
|
251
|
+
does not in this design — only main→worker, never worker→worker).
|
|
252
|
+
|
|
253
|
+
### 2.5 Status aggregation
|
|
254
|
+
|
|
255
|
+
- **PoC:** none. `synapse_status` called with a non-current `projectPath`
|
|
256
|
+
is transparently forwarded and returns that worker's own
|
|
257
|
+
process-local status — indistinguishable from a local call except for
|
|
258
|
+
added latency, which is the intended PoC behavior (correctness first).
|
|
259
|
+
- **Production:** the Dashboard's project switcher needs worker state
|
|
260
|
+
(running / starting / dead / never-spawned) surfaced *without* a live
|
|
261
|
+
tool call — i.e. a lightweight main-process registry endpoint
|
|
262
|
+
(`GET /api/synapse/workers` — new, not in this PoC) reporting
|
|
263
|
+
`{project_path, port, pid, state, last_forward_at}` per tracked worker,
|
|
264
|
+
read from the same `WORKERS` map this PoC introduces. `synapse_status` for
|
|
265
|
+
the *current* project should also learn to report "N other projects have
|
|
266
|
+
live workers" so a user can see the whole resident set, not just the one
|
|
267
|
+
they're looking at.
|
|
268
|
+
|
|
269
|
+
### 2.6 What stays process-global vs goes per-worker
|
|
270
|
+
|
|
271
|
+
| Global today | After this design |
|
|
272
|
+
|---|---|
|
|
273
|
+
| `CONNECTION_GATE` / `MAX_TOTAL_CONNECTIONS=6` (`connection/mod.rs:99,265`) | Per-**worker** automatically (each worker is its own process with its own statics) — main backend's gate now only bounds *its own* current-project + cortex traffic, not the whole fleet. |
|
|
274
|
+
| `IS_INDEXING` / `is_indexing_project()` (`connection/mod.rs:241,432`) | Per-worker automatically. A worker indexing its one project cannot block another project's connections the way today's single shared flag can when it inadvertently means "the whole backend is busy." |
|
|
275
|
+
| `index_jobs` registry (`mcp_tools/synapse/index_jobs.rs`) | Per-worker automatically — a job ID is only meaningful within the process that issued it; the forwarder must route a `synapse_index job_id=...` status poll to the *same* worker that started the job (routing by `projectPath`, not by job ID, already achieves this as long as the caller keeps passing `projectPath`). |
|
|
276
|
+
| Inscribe spool (`memory/inscribe.rs`, TASK_1959) | Already per-project directory on disk — no change; a worker restarting for the same project still finds and drains its own spool. |
|
|
277
|
+
| Heat / pulse / co-change caches | Already per-project files under `<project>/.synapse/` — no change. |
|
|
278
|
+
| Cortex `meta_graph` / `global_memory` | **Stays in the main process.** This is the one thing that is inherently cross-project by design (it exists specifically to correlate across projects) — moving it to a worker would defeat its purpose. It keeps its pinned pool slot in the main process exactly as today. |
|
|
279
|
+
| `~/.kenaz/projects.json` registry, `CURRENT_PROJECT_OVERRIDE` | Stays global/shared, read by both the main process and (indirectly, via explicit `projectPath` args) workers — no worker ever needs to know the *current* project, only its own. |
|
|
280
|
+
|
|
281
|
+
### 2.7 Why the same binary, not `bin/synapse-headless.rs`
|
|
282
|
+
|
|
283
|
+
`bin/synapse-headless.rs` (TASK_1589) already does ~90% of what a worker
|
|
284
|
+
needs — standalone axum server, ONNX preload, no Tauri — and was the first
|
|
285
|
+
thing this design checked for reuse. It is a **separate Cargo `[[bin]]`
|
|
286
|
+
target**, built only when something explicitly asks for it; it is not part
|
|
287
|
+
of the Tauri bundle an end user installs (NSIS ships `kenaz-dashboard.exe`
|
|
288
|
+
plus its sidecars, not a second full Rust binary). A shipped Dashboard must
|
|
289
|
+
be able to spawn its own workers from the one executable it *is*, so the
|
|
290
|
+
worker mode lives as a CLI-flag branch in `main.rs`/`infrastructure` instead.
|
|
291
|
+
`synapse-headless` remains valuable as a dev/CI tool for indexing a repo
|
|
292
|
+
standalone (its own use case, unrelated to this design) and was not
|
|
293
|
+
modified.
|
|
294
|
+
|
|
295
|
+
### 2.8 Known gaps / explicitly out of scope for this PoC
|
|
296
|
+
|
|
297
|
+
- REST `/api/synapse/*` calls (used directly by the frontend) are not
|
|
298
|
+
forwarded — only MCP `tools/call`. A production rollout needs the same
|
|
299
|
+
routing rule applied at that boundary (likely by extracting the
|
|
300
|
+
`maybe_forward`-equivalent check into a small tower middleware shared by
|
|
301
|
+
both entry points, rather than duplicating it).
|
|
302
|
+
- No per-connection MCP session identity exists (confirmed unavailable by
|
|
303
|
+
TASK_1983's investigation — `get_session_id()` is one process-lifetime
|
|
304
|
+
UUID, not per-connection). A tool call that omits `projectPath` still
|
|
305
|
+
falls back to the Dashboard's single global "current project," exactly as
|
|
306
|
+
today — this design does not change that resolution gap, it only adds
|
|
307
|
+
routing for calls that *do* pass `projectPath` explicitly.
|
|
308
|
+
- Idle reaper, crash-restart-with-backoff, and worker-state status
|
|
309
|
+
aggregation (2.3, 2.5) are designed but not implemented — R3 scope was
|
|
310
|
+
"enough for R4," not production-complete.
|
|
311
|
+
|
|
312
|
+
### 2.9 Rollback story
|
|
313
|
+
|
|
314
|
+
- `KENAZ_SYNAPSE_WORKERS` unset (default): `maybe_forward` returns `None`
|
|
315
|
+
unconditionally on its first line — zero code path change, byte-identical
|
|
316
|
+
behavior to pre-TASK_1984 main.
|
|
317
|
+
- `--synapse-worker` is a new, additive CLI branch checked before any
|
|
318
|
+
existing startup code runs; omitting the flag (every existing launch path)
|
|
319
|
+
leaves `main()` unchanged from the very next line onward.
|
|
320
|
+
- No schema, config file, or on-disk format changed. Turning the flag back
|
|
321
|
+
off after a rollout requires no cleanup beyond killing any live worker
|
|
322
|
+
processes (the Job Object handles that automatically on the next Dashboard
|
|
323
|
+
restart even if a user forgets).
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## 3. R3 — PoC (what actually ships in this branch)
|
|
328
|
+
|
|
329
|
+
New file `dashboard/src-tauri/src/infrastructure/synapse_worker.rs`:
|
|
330
|
+
|
|
331
|
+
- `try_run_worker_mode()` — parses `--synapse-worker --project <path> --port
|
|
332
|
+
<n>` from argv; if present, does the same ONNX preload/eager-init sequence
|
|
333
|
+
as `bin/synapse-headless.rs`, forces `KENAZ_HTTP_HOST=127.0.0.1` +
|
|
334
|
+
`KENAZ_HTTP_PORT=<n>`, starts `HttpServer::from_env()` with a fresh
|
|
335
|
+
`HttpAppState::new()`, prints a `READY` line, waits for Ctrl-C, exits.
|
|
336
|
+
Called from `main.rs` as the very first line of `fn main()`, before the
|
|
337
|
+
release-mode stderr redirect and before `kenaz_dashboard_lib::run()`
|
|
338
|
+
(Tauri) — a worker never touches the GUI stack.
|
|
339
|
+
- `maybe_forward(name, args)` — the forwarder described in 2.2-2.4:
|
|
340
|
+
allowlist check, current-project short-circuit, on-demand spawn via
|
|
341
|
+
`ensure_worker()` (Job-Object-assigned, logs to
|
|
342
|
+
`<project>/.synapse/worker_<port>.log`), HTTP readiness probe
|
|
343
|
+
(`wait_for_worker_ready`), then a plain JSON-RPC `tools/call` proxy over
|
|
344
|
+
`reqwest` to the worker's `/api/mcp`.
|
|
345
|
+
- Forwardable tool set for this PoC: `synapse_status`, `synapse_recall`,
|
|
346
|
+
`synapse_search`, `synapse_inscribe`, `synapse_index`.
|
|
347
|
+
|
|
348
|
+
Touched (minimal, both additive):
|
|
349
|
+
|
|
350
|
+
- `dashboard/src-tauri/src/main.rs` — one early-return guard calling
|
|
351
|
+
`try_run_worker_mode()`.
|
|
352
|
+
- `dashboard/src-tauri/src/infrastructure/http_server/routes/mcp.rs` — one
|
|
353
|
+
`maybe_forward` call inserted immediately before the tool-name `match` in
|
|
354
|
+
`execute_tool_inner`.
|
|
355
|
+
- `dashboard/src-tauri/src/infrastructure/mod.rs` — `pub mod synapse_worker;`.
|
|
356
|
+
|
|
357
|
+
Not touched: `connection/`, `lib.rs` (beyond nothing — no lib.rs change was
|
|
358
|
+
needed once the flag lived in `main.rs`), any production default, any
|
|
359
|
+
existing test.
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## 4. R4 — Experiment runbook (Ansuz runs this after merge)
|
|
364
|
+
|
|
365
|
+
Goal: with the flag OFF vs ON, run two projects concurrently and compare
|
|
366
|
+
failure/eviction counts, per-project latency, worker RSS, spawn-to-ready
|
|
367
|
+
time, and backend.log for native exceptions.
|
|
368
|
+
|
|
369
|
+
An existing probe already does almost exactly this shape —
|
|
370
|
+
`dev/scripts/probe/pool-multi-project.js` (built for TASK_1925) round-robins
|
|
371
|
+
concurrent calls across N project paths against `/api/mcp` and classifies
|
|
372
|
+
failures by message substring, reporting p50/p95/max latency. Reuse it
|
|
373
|
+
rather than writing a new one.
|
|
374
|
+
|
|
375
|
+
### 4.1 Baseline (flag OFF — today's behavior, for comparison)
|
|
376
|
+
|
|
377
|
+
```bash
|
|
378
|
+
# Ensure KENAZ_SYNAPSE_WORKERS is NOT set in the backend's environment.
|
|
379
|
+
node dev/scripts/probe/pool-multi-project.js \
|
|
380
|
+
--base-url http://127.0.0.1:18080 \
|
|
381
|
+
--concurrency 12 --waves 3 \
|
|
382
|
+
--projects "C:/Users/user/Documents/GitHub/KenazAI,C:/Users/user/Documents/GitHub/esp32"
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
Expected observables (from prior measurement, rune on 2026-07-25 pool
|
|
386
|
+
probe): eviction/"connection limit exceeded"/"read pool exhausted" errors
|
|
387
|
+
appearing above ~6 concurrent, `/api/rust/health` still answering
|
|
388
|
+
throughout (backend does not crash — the caps exist precisely to prevent
|
|
389
|
+
that), no native exceptions in backend.log.
|
|
390
|
+
|
|
391
|
+
### 4.2 Flag ON — two workers concurrent
|
|
392
|
+
|
|
393
|
+
```bash
|
|
394
|
+
# Set once, before the Dashboard process starts (env var read once, not hot-reloadable):
|
|
395
|
+
set KENAZ_SYNAPSE_WORKERS=1
|
|
396
|
+
# (start/restart the Dashboard backend)
|
|
397
|
+
|
|
398
|
+
node dev/scripts/probe/pool-multi-project.js \
|
|
399
|
+
--base-url http://127.0.0.1:18080 \
|
|
400
|
+
--concurrency 12 --waves 3 \
|
|
401
|
+
--projects "C:/Users/user/Documents/GitHub/KenazAI,C:/Users/user/Documents/GitHub/esp32"
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
`KenazAI` is (in this environment) the Dashboard's current project, so its
|
|
405
|
+
calls stay local; `esp32` calls are forwarded and spawn a worker on first
|
|
406
|
+
touch.
|
|
407
|
+
|
|
408
|
+
Expected observables, and how to get each number:
|
|
409
|
+
|
|
410
|
+
- **Spawn + forward evidence**: `grep -c "\[synapse-worker\]" backend.log`
|
|
411
|
+
should show a `starting pid=...` / `READY pid=...` pair for the esp32
|
|
412
|
+
worker, and `maybe_forward` doesn't log by itself in the PoC — add a
|
|
413
|
+
temporary `tracing::info!` there if the runbook needs an explicit forward
|
|
414
|
+
marker beyond inferring it from the worker's own request log (out of
|
|
415
|
+
scope to add permanently, but cheap for one verification run).
|
|
416
|
+
- **Worker RSS**: `tasklist /FI "IMAGENAME eq kenaz-dashboard.exe"` will now
|
|
417
|
+
list 2+ processes — the main backend and each worker — by PID; the
|
|
418
|
+
worker's own log line prints its `pid=` for correlation. Compare against
|
|
419
|
+
R1's structural estimate (~250-400 MB floor).
|
|
420
|
+
- **Spawn-to-ready time**: timestamp the first esp32-scoped probe request
|
|
421
|
+
vs. the worker's `READY` log line (or instrument `ensure_worker` with an
|
|
422
|
+
`Instant::now()` around `wait_for_worker_ready` for this run only).
|
|
423
|
+
- **Failures/evictions**: compare `pool-multi-project.js`'s failure
|
|
424
|
+
classification counts against the 4.1 baseline — under the flag,
|
|
425
|
+
cross-project failures should trend toward zero (each project now has its
|
|
426
|
+
own pool, not a shared 2-slot one), at the cost of first-touch spawn
|
|
427
|
+
latency the baseline never pays.
|
|
428
|
+
- **Per-project latency**: the probe's own p50/p95/max, split by which
|
|
429
|
+
project each call targeted (its `--projects` round-robin already tags
|
|
430
|
+
results per project internally — check the script's report format).
|
|
431
|
+
- **Native exceptions**: `grep -i "0xc0000005\|ACCESS_VIOLATION\|0xe06d7363"
|
|
432
|
+
backend.log` across both runs — should be absent in both; a hit under the
|
|
433
|
+
flag would mean the worker boundary did not actually eliminate the
|
|
434
|
+
crash-floor risk (it should, since it eliminates concurrent
|
|
435
|
+
`kuzu::Database` instances in one process by construction, but this is
|
|
436
|
+
exactly the kind of claim that needs a negative-result check, not just an
|
|
437
|
+
assumption).
|
|
438
|
+
|
|
439
|
+
### 4.3 Scale check (optional, if time allows)
|
|
440
|
+
|
|
441
|
+
Repeat 4.2 with a third and fourth project added to `--projects` to see
|
|
442
|
+
where the "practical concurrent-worker ceiling" from R1's estimate actually
|
|
443
|
+
falls on this machine — `tasklist` RSS sum vs. available RAM is the direct
|
|
444
|
+
measurement R1 could not take without workers existing yet.
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
448
|
+
## 5. R5 — Decision record
|
|
449
|
+
|
|
450
|
+
**Go/no-go criteria (numbers, checked against R4's actual results once
|
|
451
|
+
run):**
|
|
452
|
+
|
|
453
|
+
- GO if: cross-project failure/eviction rate under the flag drops
|
|
454
|
+
materially versus the 4.1 baseline (target: nonzero improvement is not
|
|
455
|
+
enough — it should approach zero for the failure classes that are purely
|
|
456
|
+
about the shared 2-slot pool, since worker-per-project removes that
|
|
457
|
+
sharing by construction) AND no native exception appears in either arm
|
|
458
|
+
AND measured per-worker RSS stays within the R1 structural estimate
|
|
459
|
+
(~250-400 MB) — a number far outside that range would mean the design's
|
|
460
|
+
RAM math is wrong and needs redoing before any rollout sizing advice is
|
|
461
|
+
trustworthy AND spawn-to-ready time is bounded well enough that a user
|
|
462
|
+
opening a second project does not perceive multi-second hangs on first
|
|
463
|
+
Synapse tool use (no fixed threshold yet — R4 measures the actual number
|
|
464
|
+
first).
|
|
465
|
+
- NO-GO if: R4 finds worker RSS far above the structural estimate (e.g. if
|
|
466
|
+
ONNX sessions turn out to share less than assumed, or KuzuDB's buffer pool
|
|
467
|
+
is larger under real project sizes than esp32's), or spawn latency makes
|
|
468
|
+
first-touch unacceptable, or a native exception appears under the flag
|
|
469
|
+
(would mean some cross-process assumption in this design is wrong, not
|
|
470
|
+
just a tuning problem).
|
|
471
|
+
- **Bounded alternative if NO-GO**: a worker **pool of size K** (not
|
|
472
|
+
unbounded N) with LRU-by-lease-liveness eviction — same worker-process
|
|
473
|
+
mechanism, but capped at K concurrent workers (K chosen from R4's
|
|
474
|
+
measured per-worker RSS against a target machine's available RAM), evicting
|
|
475
|
+
the worker whose `active_project_paths()` lease is oldest/dead first. This
|
|
476
|
+
keeps the crash-floor fix (still N *separate* processes, so the
|
|
477
|
+
3-Database-instances-in-one-process crash is still structurally
|
|
478
|
+
impossible) while bounding total RAM cost, at the price of the same
|
|
479
|
+
"still only K projects fully resident" limitation this design set out to
|
|
480
|
+
remove — just with K much larger than today's *effective* 1.
|
|
481
|
+
|
|
482
|
+
This PoC did not reach a final go/no-go — that requires R4's actual
|
|
483
|
+
numbers, which this runbook hands to Ansuz to produce. The design above
|
|
484
|
+
should not be treated as validated until those numbers come back within the
|
|
485
|
+
bounds this section sets.
|
|
486
|
+
|
|
487
|
+
## 6. Post-merge smoke (Ansuz, 2026-09-21, verify-worktree debug build 8f3296bd5)
|
|
488
|
+
|
|
489
|
+
Standalone worker mode works without the forwarder: `kenaz-dashboard.exe --synapse-worker --project <throwaway git repo> --port 18090` printed `[synapse-worker] READY` and answered `POST /api/mcp synapse_status` within **2 s** of spawn. Measured idle footprint of that worker (empty project, no embedding computed yet): **RSS 40 MB, private 10 MB** (PowerShell Get-Process). That is far below the structural 250-400 MB floor estimated in §1 because the KuzuDB buffer pool and the ONNX engine are both loaded lazily on first use; the estimate applies to a worker that has actually indexed and embedded. Consequence for the capacity model: resident-but-idle workers are cheap, so the ceiling is set by concurrently *active* workers, not by how many projects have a live lease. The R4 experiment (flag ON, two projects concurrent through the forwarder) still requires restarting the Dashboard backend with `KENAZ_SYNAPSE_WORKERS=1`; it was not run in this session because the live dev backend belongs to the user.
|
|
490
|
+
|
|
491
|
+
## 7. R4 results (Ansuz, 2026-09-21, live dev backend restarted with `KENAZ_SYNAPSE_WORKERS=1`)
|
|
492
|
+
|
|
493
|
+
Setup: `npm run tauri:dev` started with the flag in its environment (debug
|
|
494
|
+
build), Dashboard current project = KenazAI, second project = esp32 (real
|
|
495
|
+
indexed `.synapse`). Probe: `dev/scripts/probe/pool-multi-project.js
|
|
496
|
+
--concurrency 12 --waves 3 --projects KenazAI,esp32`.
|
|
497
|
+
|
|
498
|
+
### 7.1 The runbook's probe never reached the forwarder
|
|
499
|
+
|
|
500
|
+
§4 told the runner to reuse the TASK_1925 probe as-is. Its two tool shapes
|
|
501
|
+
(`hippocampus_episode_recall`, `synapse_cypher`) are not in
|
|
502
|
+
`FORWARDABLE_TOOLS`, so the first flag-ON run served all 36 calls locally
|
|
503
|
+
and produced zero worker evidence while reporting 0 failures — a probe that
|
|
504
|
+
cannot fail is not a probe. The script now has `--tool-set worker`
|
|
505
|
+
(`synapse_status` + `synapse_recall`, both forwardable) and a per-project
|
|
506
|
+
split in its JSON summary. Every number below is from that tool set.
|
|
507
|
+
|
|
508
|
+
### 7.2 Three defects found on the first real forwarded burst
|
|
509
|
+
|
|
510
|
+
| # | Defect | Evidence | Fix |
|
|
511
|
+
|---|--------|----------|-----|
|
|
512
|
+
| 1 | **Spawn race**: `ensure_worker` checked the registry, spawned, then inserted — no lock across the spawn. | 12 concurrent esp32 calls → the main process spawned **6** workers (ports 18100–18105). | Registry now holds one `tokio::sync::OnceCell` per project; concurrent first-touch callers share it, `get_or_try_init` runs the spawn once, a failed spawn leaves the cell empty for retry. Test: 12 tasks → 1 spawn, all see the same port. |
|
|
513
|
+
| 2 | **Recursive workers**: a worker inherits `KENAZ_SYNAPSE_WORKERS=1`, and the Dashboard's *current* project is not its project, so every forwarded call re-entered `maybe_forward` inside the worker and spawned a grandchild worker. | Process tree: each of the 6 workers had 1–3 children, **14** `--synapse-worker` processes total; grandchildren logged `assign_child_pid failed: Job Object not initialized` → orphans that survive Dashboard exit. | `try_run_worker_mode` sets a process-wide `IS_WORKER` flag (checked before the env var) and removes the env var. Test: flag set + env set → `maybe_forward` returns `None`. |
|
|
514
|
+
| 3 | **Shared port**: `server.rs` binds with `SO_REUSEADDR`; on Windows that lets a second process bind + listen on an already-listening port. | `netstat`: **7** listeners on 127.0.0.1:18100; every esp32 call failed with `forward to port 18100 failed: error sending request` because the connection landed on a recursing worker. | Worker sets `KENAZ_HTTP_EXCLUSIVE_BIND=1`; `start_with_state` then uses `SO_EXCLUSIVEADDRUSE` (raw `setsockopt`, the SDK defines it as a macro so windows-sys has no constant) instead of `SO_REUSEADDR`, so a clash fails at bind time. Main backend keeps `SO_REUSEADDR` (restart-after-TIME_WAIT). |
|
|
515
|
+
|
|
516
|
+
Per-project result of that first burst: KenazAI (local) 18/18 OK, esp32
|
|
517
|
+
(forwarded) **0/18** OK, wave-1 esp32 mean 5.1 s (ready-wait budget burned
|
|
518
|
+
on a recursing child).
|
|
519
|
+
|
|
520
|
+
### 7.3 Numbers after the fixes (same probe, backend rebuilt by the dev watcher)
|
|
521
|
+
|
|
522
|
+
| Wave | Burst wall | KenazAI (local) mean / max | esp32 (forwarded) mean / max | Failures |
|
|
523
|
+
|------|-----------:|---------------------------:|-----------------------------:|---------:|
|
|
524
|
+
| 1 (first touch, spawn included) | 896 ms | 320 / 440 ms | **823 / 894 ms** | 0 / 12 |
|
|
525
|
+
| 2 | 437 ms | 305 / 437 ms | 106 / 132 ms | 0 / 12 |
|
|
526
|
+
| 3 | 416 ms | 299 / 415 ms | 127 / 187 ms | 0 / 12 |
|
|
527
|
+
|
|
528
|
+
- **Workers spawned**: exactly 1 (pid 24236, port 18100, child of the
|
|
529
|
+
backend, inside its Job Object). `[synapse-worker] starting` / `READY`
|
|
530
|
+
pair in `esp32/.synapse/worker_18100.log`.
|
|
531
|
+
- **Spawn-to-ready**: < 0.9 s wall including the first forwarded
|
|
532
|
+
`synapse_recall` (wave-1 esp32 max), debug build. The §4 ready budget of
|
|
533
|
+
15 s is generous by >15×; leave it (a cold release-build machine under
|
|
534
|
+
antivirus scan is the real worst case).
|
|
535
|
+
- **Worker RSS after serving 9 recalls + 9 status calls**: **130 MB**
|
|
536
|
+
(Get-CimInstance WorkingSetSize) — below the §1 structural estimate of
|
|
537
|
+
250–400 MB because esp32 is small; the estimate stays the planning
|
|
538
|
+
number for a KenazAI-sized project.
|
|
539
|
+
- **Native exceptions** (`0xc0000005|ACCESS_VIOLATION|0xe06d7363`) in
|
|
540
|
+
backend.log across both runs: **0**. `/api/rust/health` p95 ≤ 12 ms
|
|
541
|
+
throughout.
|
|
542
|
+
- **Forward hop cost**: esp32 steady-state mean ~110–130 ms vs local
|
|
543
|
+
KenazAI ~300 ms — not comparable (different projects, different graph
|
|
544
|
+
sizes); the hop itself is loopback + JSON re-encode, well under the
|
|
545
|
+
variance between projects.
|
|
546
|
+
|
|
547
|
+
### 7.4 What R4 did NOT establish
|
|
548
|
+
|
|
549
|
+
- **No flag-OFF baseline with the `worker` tool set.** The same burst
|
|
550
|
+
with the flag off would route esp32 through the shared 2-slot pool. It
|
|
551
|
+
needs the backend restarted without the flag; not done this round. The
|
|
552
|
+
first flag-ON run with the `pool` tool set (everything local) showed
|
|
553
|
+
0/36 failures too, so at concurrency 12 × 2 projects the single-process
|
|
554
|
+
pool does **not** currently fail — TASK_1960/1980 already cut pool demand.
|
|
555
|
+
The failure-rate criterion in §5 is therefore not the discriminating
|
|
556
|
+
number; the crash floor (3 `kuzu::Database` in one process, TASK_1925)
|
|
557
|
+
is structural and does not show up in a probe that only opens two.
|
|
558
|
+
- **Release build not measured** (RSS, spawn latency, `CREATE_NO_WINDOW`).
|
|
559
|
+
- **No worker lifecycle**: nothing reaps a worker when its project's lease
|
|
560
|
+
dies; the worker survives until the Dashboard exits (Job Object).
|
|
561
|
+
|
|
562
|
+
### 7.5 Interim R5 reading
|
|
563
|
+
|
|
564
|
+
Within the bounds §5 set: no native exception under the flag, per-worker
|
|
565
|
+
RSS below the structural estimate, first-touch latency sub-second. The
|
|
566
|
+
three defects were all in the PoC's process plumbing, not in the design's
|
|
567
|
+
premise, and each now has a regression test on the exact path that failed.
|
|
568
|
+
**Not yet GO**: the flag stays off by default until (a) a flag-OFF control
|
|
569
|
+
with the same tool set is recorded, (b) a release-build run, and (c) a
|
|
570
|
+
worker reaper tied to `active_projects` leases exists (else every project a
|
|
571
|
+
user ever touched in a session keeps a process). Those are TASK_1985-scale
|
|
572
|
+
follow-ups, not blockers for merging the fixes.
|
|
573
|
+
|
|
574
|
+
### 7.6 The two missing arms (Ansuz, 2026-09-21, later the same session)
|
|
575
|
+
|
|
576
|
+
Same probe (`--tool-set worker --concurrency 12 --waves 3`, KenazAI + esp32).
|
|
577
|
+
|
|
578
|
+
**Release build, flag ON** (`kenaz-dashboard.exe` 0.2.234 started standalone with `KENAZ_SYNAPSE_WORKERS=1`, dev stack stopped):
|
|
579
|
+
|
|
580
|
+
| Wave | Burst wall | KenazAI mean / max | esp32 mean / max | Failures |
|
|
581
|
+
|------|-----------:|-------------------:|-----------------:|---------:|
|
|
582
|
+
| 1 (first touch) | 1010 ms | 994 / 1009 ms | 852 / 896 ms | 0 / 12 |
|
|
583
|
+
| 2 | 477 ms | 345 / 477 ms | 136 / 192 ms | 0 / 12 |
|
|
584
|
+
| 3 | 400 ms | 294 / 400 ms | 115 / 161 ms | 0 / 12 |
|
|
585
|
+
|
|
586
|
+
- Worker RSS after 3 waves: esp32 **114 MB**, KenazAI **156 MB**; main process 221 MB. Spawn-to-ready ≈ 0.9–1.0 s (wave-1 max). No `conhost` child under either worker — `CREATE_NO_WINDOW` holds in the `windows_subsystem="windows"` binary.
|
|
587
|
+
- **Observation, not a defect**: the release process spawned a worker for KenazAI too (port 18101). Standalone, its `get_current_project()` did not resolve to KenazAI (the release app's own settings, not the dev tree's), so *both* projects counted as non-current and were forwarded. Under the flag, "current project stays local" depends on that resolution being right at first touch; a production rollout should log the resolved current project once at startup so this is visible.
|
|
588
|
+
|
|
589
|
+
**Dev build, flag OFF** (control — the shared 2-slot pool serves both projects in one process):
|
|
590
|
+
|
|
591
|
+
| Wave | Burst wall | KenazAI mean / max | esp32 mean / max | Failures |
|
|
592
|
+
|------|-----------:|-------------------:|-----------------:|---------:|
|
|
593
|
+
| 1 | 517 ms | 327 / 462 ms | 327 / 516 ms | 0 / 12 |
|
|
594
|
+
| 2 | 423 ms | 312 / 423 ms | 144 / 262 ms | 0 / 12 |
|
|
595
|
+
| 3 | 446 ms | 313 / 432 ms | 318 / 446 ms | 0 / 12 |
|
|
596
|
+
|
|
597
|
+
- 0 failures, 0 native exceptions, no eviction/limit errors. At 12 concurrent × 2 projects the single-process pool no longer fails — the 2026-07-25 expectation in §4.1 predates TASK_1960/1980's demand cut.
|
|
598
|
+
|
|
599
|
+
**Reading.** The failure-rate criterion of §5 cannot discriminate the arms at this load: both are 36/36. What the flag buys is (a) the structural crash floor — a third concurrently-open project cannot put three `kuzu::Database` instances in one process — and (b) per-project isolation of latency: esp32 steady-state is ~115–136 ms via its worker vs 144–327 ms when sharing the pool with KenazAI's heavier calls. What it costs is ~110–160 MB RSS per resident worker plus ~1 s on first touch. Remaining gate before default-ON: worker lifecycle (reap on lease death / idle), see §8.
|
|
600
|
+
|
|
601
|
+
## 8. Worker lifecycle — reaper (Ansuz, 2026-09-21, follow-up (c) of §7.5)
|
|
602
|
+
|
|
603
|
+
`synapse_worker.rs` §3. Armed only in the main backend when
|
|
604
|
+
`KENAZ_SYNAPSE_WORKERS=1` (workers never reap; flag off ⇒ no task at all).
|
|
605
|
+
Every `KENAZ_SYNAPSE_WORKER_REAP_TICK_SECS` (default 60) it reads
|
|
606
|
+
`active_projects::active_project_paths()` (the TASK_1983 lease set) and
|
|
607
|
+
kills — `TerminateProcess` on Windows, `SIGTERM` on Unix — every registered
|
|
608
|
+
worker that satisfies all three of:
|
|
609
|
+
|
|
610
|
+
1. no live lease names its project (same `normalize_key` as the registry);
|
|
611
|
+
2. idle for at least `KENAZ_SYNAPSE_WORKER_IDLE_SECS` (default 300) since
|
|
612
|
+
its last forwarded call completed;
|
|
613
|
+
3. zero forwarded calls in flight (an RAII guard in `maybe_forward` holds
|
|
614
|
+
the count across the whole HTTP exchange, so a worker mid-answer is
|
|
615
|
+
never killed).
|
|
616
|
+
|
|
617
|
+
The registry entry is removed under the lock *before* the kill, so a call
|
|
618
|
+
arriving during the kill re-spawns cleanly through the §7.2 once-cell path.
|
|
619
|
+
Killing only an idle worker leaves its KuzuDB WAL quiescent — the same
|
|
620
|
+
state a Dashboard exit puts it in via KILL_ON_JOB_CLOSE.
|
|
621
|
+
|
|
622
|
+
Tests (`t1984_dedupe_tests`, 5/5): selection picks only the
|
|
623
|
+
idle-leaseless-quiescent worker out of {leased-idle, leaseless-idle,
|
|
624
|
+
leaseless-fresh, leaseless-busy, still-spawning}; nothing is selected one
|
|
625
|
+
millisecond before the TTL and the same worker is selected one millisecond
|
|
626
|
+
after.
|
|
627
|
+
|
|
628
|
+
**Not yet exercised live.** The selection is unit-tested and the kill path
|
|
629
|
+
is the same `OpenProcess`/`TerminateProcess` pair `job_object.rs` already
|
|
630
|
+
uses, but no run has yet watched a real worker disappear on lease death:
|
|
631
|
+
that needs the backend restarted with the flag plus a short TTL
|
|
632
|
+
(`KENAZ_SYNAPSE_WORKER_IDLE_SECS=15 KENAZ_SYNAPSE_WORKER_REAP_TICK_SECS=5`),
|
|
633
|
+
and the single-instance plugin prevents a second debug instance beside the
|
|
634
|
+
running dev stack. First thing to do on the next flag-ON restart; until then
|
|
635
|
+
the flag stays off by default.
|
|
636
|
+
|
|
637
|
+
## 9. R1 reaper evidence + R3 decision (Ansuz, 2026-09-22, TASK_1986)
|
|
638
|
+
|
|
639
|
+
### 9.1 Reaper exercised live (R1 / A1)
|
|
640
|
+
|
|
641
|
+
Dev backend restarted with `KENAZ_SYNAPSE_WORKERS=1 KENAZ_SYNAPSE_WORKER_IDLE_SECS=15
|
|
642
|
+
KENAZ_SYNAPSE_WORKER_REAP_TICK_SECS=5` (18:20:23Z). Probe: `pool-multi-project.js --tool-set worker
|
|
643
|
+
--projects KenazAI,esp32 --concurrency 6 --waves 2` (12 + 12 calls, 0 failures, burst 763 / 340 ms).
|
|
644
|
+
esp32 has no live session lease, so its worker is leaseless by construction; KenazAI is the current
|
|
645
|
+
project and is served locally.
|
|
646
|
+
|
|
647
|
+
| t | Event (tauri dev stderr, `[synapse-worker]`) | Evidence |
|
|
648
|
+
|---|---|---|
|
|
649
|
+
| +0 | `reaper armed: idle_ttl=15s tick=5s` | flag read, reaper task alive |
|
|
650
|
+
| +~40 s | worker pid **17592** (port 18100, project esp32) spawned by wave 1 | `Get-CimInstance` listed it with `--synapse-worker --project` |
|
|
651
|
+
| +~85 s | `reaped idle worker pid=17592 port=18100 project=c:/users/user/documents/github/esp32` | process list empty |
|
|
652
|
+
| re-probe | wave of 6 calls, 0 failures, burst 814 ms (first-touch respawn cost) | new worker pid **34156** (port 18101) |
|
|
653
|
+
| later | `reaped idle worker pid=34156 port=18101 project=...esp32` | cycle repeats; no orphan |
|
|
654
|
+
|
|
655
|
+
A1 met: one worker reaped after lease-less idle TTL, re-spawned on the next call through the once-cell
|
|
656
|
+
path, reaped again. No failures on either side of the kill. The reaper line is `eprintln!` only: it is
|
|
657
|
+
visible in the dev stderr log but **not in backend.log** (GUI builds) — R2's tracing line covers the
|
|
658
|
+
startup config; the reaped event itself should also go through `tracing` before any default-ON
|
|
659
|
+
rollout (small follow-up, not done here).
|
|
660
|
+
|
|
661
|
+
### 9.2 R2
|
|
662
|
+
|
|
663
|
+
Landed separately (startup line `synapse worker forwarder configuration` with `workers_enabled` and
|
|
664
|
+
`current_project`, and `forward_decision` with the `current_unresolved -> serve locally` fail-safe).
|
|
665
|
+
|
|
666
|
+
### 9.3 R3 decision record — recommendation: **dev-only ON, production stays opt-in**
|
|
667
|
+
|
|
668
|
+
Numbers it rests on: §7.6 release-build flag-ON 36/36 vs dev flag-OFF 36/36 (the failure criterion
|
|
669
|
+
cannot discriminate at 12x2); worker RSS 114-156 MB per project on release; spawn-to-ready ~1 s;
|
|
670
|
+
§9.1 reaper cycle verified; the structural gain is the crash floor (a third open project cannot take the
|
|
671
|
+
main process down) plus latency isolation.
|
|
672
|
+
|
|
673
|
+
- **Dev machines (multi-project, long sessions): ON.** This is where 3+ projects are open at once and
|
|
674
|
+
where the KuzuDB crash floor has actually bitten (TASK_1925 history). Mechanism: the `tauri:dev`
|
|
675
|
+
launcher sets `KENAZ_SYNAPSE_WORKERS=1` (or `.env.local`), not a code default — rollback is unsetting
|
|
676
|
+
it.
|
|
677
|
+
- **Production installs: stay opt-in** until (a) `synapse_status` aggregates across workers (R4),
|
|
678
|
+
(b) the release standalone `get_current_project()` resolution observed in §7.6 is fixed so the
|
|
679
|
+
current project is never forwarded to a worker of itself, (c) the reaped event is in backend.log,
|
|
680
|
+
and (d) a two-week dev soak shows no orphaned worker/port leak. A typical end-user install has one
|
|
681
|
+
project open; the extra 115-155 MB process buys them nothing yet.
|
|
682
|
+
- **Not "everywhere"**: without (a)-(c) an installed user would see status numbers that silently
|
|
683
|
+
exclude worker-served projects (Name-Preserving Narrowing, sigil_12331ef3).
|
|
684
|
+
|
|
685
|
+
The default flip — even dev-only — changes shared developer infrastructure and is the user's call;
|
|
686
|
+
this section records the recommendation and its evidence, it does not apply it.
|
|
687
|
+
|
|
688
|
+
## 10. Default ON everywhere (Ansuz, 2026-09-22, TASK_1999)
|
|
689
|
+
|
|
690
|
+
### 10.1 Decision
|
|
691
|
+
|
|
692
|
+
**User decision, 2026-09-22: default ON everywhere, including installed builds** — wider than §9.3's
|
|
693
|
+
"dev-only" recommendation. §9.3's three blocking prerequisites for production are landed by this card:
|
|
694
|
+
|
|
695
|
+
- (a) `synapse_status` aggregates across workers — R1, below.
|
|
696
|
+
- (b) release standalone `get_current_project()` resolution — the R2 fail-safe already landed in
|
|
697
|
+
TASK_1986 (`forward_decision`'s `current_unresolved -> ServeLocally`, 7850d67c8): an unresolved
|
|
698
|
+
current project now always serves locally, never forwards to (or spawns) a worker for itself. This
|
|
699
|
+
card's R2 is the **live verification** of that fail-safe on a release standalone exe — procedure in
|
|
700
|
+
§10.4; evidence recorded there once the orchestrator's release-build smoke runs (this card is
|
|
701
|
+
Rust-only and does not itself build/run cargo — see the dispatch note at the top of this section's
|
|
702
|
+
commit).
|
|
703
|
+
- (c) reaped/spawned events already go through `tracing` (target `synapse_worker`) — landed in
|
|
704
|
+
TASK_1986 (§8/§9.1), confirmed still in place: `reap_once` and `spawn_reaper_if_enabled` both log via
|
|
705
|
+
`tracing::info!` in addition to `eprintln!`.
|
|
706
|
+
|
|
707
|
+
§9.3's fourth item — "a two-week dev soak shows no orphaned worker/port leak" — is superseded by R5
|
|
708
|
+
below: auto-regulation (leased-idle TTL, a hard concurrent-worker cap, an RSS watchdog) is landed as a
|
|
709
|
+
*precondition* of the flip, not a follow-up, so an orphan/leak class of problem has a structural ceiling
|
|
710
|
+
(≤`KENAZ_SYNAPSE_WORKER_MAX` processes, each capped at `KENAZ_SYNAPSE_WORKER_MAX_RSS_MB`) rather than
|
|
711
|
+
depending on empirical soak time to rule out unbounded growth.
|
|
712
|
+
|
|
713
|
+
### 10.2 R1 — synapse_status worker aggregation
|
|
714
|
+
|
|
715
|
+
`infrastructure::synapse_worker::status_block()` is the one source of truth both surfaces call:
|
|
716
|
+
|
|
717
|
+
- MCP `synapse_status` (`graph.rs::tool_synapse_status`): adds top-level `workers` (array) and
|
|
718
|
+
`worker_totals` (object), additive only — no existing key's meaning changes.
|
|
719
|
+
- REST `GET /api/synapse/status` (`routes/synapse.rs::get_synapse_status`): `SynapseStatusResponse`
|
|
720
|
+
gains the same two fields (camelCase on the wire: `workers`, `workerTotals`), populated in all three
|
|
721
|
+
response branches (project-specific, `resolve_core_path` error, global registry) so no branch can
|
|
722
|
+
silently narrow the numbers.
|
|
723
|
+
|
|
724
|
+
Each `workers[]` row: `project, port, pid, spawned_at, last_used, idle_secs, leased, in_flight, rss_mb,
|
|
725
|
+
status`. `status` is fetched over loopback from the worker's OWN `synapse_status` for its project (2s
|
|
726
|
+
bound per worker), then trimmed to a compact subset (`compact_worker_status`, TASK_1999 follow-up) —
|
|
727
|
+
`phase, indexing_in_progress, symbol_entries, rune_count, spool_depth, last_indexed` — since embedding
|
|
728
|
+
the full ~5KB status payload per row made the aggregate balloon with every additional worker; a caller
|
|
729
|
+
who wants the rest calls `synapse_status(projectPath=<that project>)` directly, which forwards to the
|
|
730
|
+
same worker. A hung/dead worker degrades `status` to the string `"unreachable"` rather than blocking (or
|
|
731
|
+
failing) the aggregated call for every other worker. `worker_totals`: `worker_count, total_rss_mb,
|
|
732
|
+
total_in_flight, unreachable_count`.
|
|
733
|
+
|
|
734
|
+
Degrade path (A1): kill a worker's process out from under the registry between reaper ticks — the next
|
|
735
|
+
`synapse_status` poll's forwarded call to that port fails (connection refused), so that row's `status`
|
|
736
|
+
reads `"unreachable"` and `unreachable_count` increments; `rss_mb`/`idle_secs`/`leased` still report
|
|
737
|
+
last-known registry state until the next reaper tick removes the entry entirely.
|
|
738
|
+
|
|
739
|
+
### 10.3 R5 — auto-regulation (precondition of default ON, not a follow-up)
|
|
740
|
+
|
|
741
|
+
Default ON means several projects can each hold open a worker indefinitely without this. Extends the
|
|
742
|
+
existing reaper (`spawn_reaper_if_enabled` / `reap_once`) rather than adding a second loop:
|
|
743
|
+
|
|
744
|
+
| Knob | Default | What it controls |
|
|
745
|
+
|---|---|---|
|
|
746
|
+
| `KENAZ_SYNAPSE_WORKERS` | unset = **ON** | `0` disables the whole forwarder/worker mechanism (§10.5 rollback). Any other value (unset, `1`, garbage) is ON. |
|
|
747
|
+
| `KENAZ_SYNAPSE_WORKER_IDLE_SECS` | 300 | Leaseless-idle TTL (unchanged from TASK_1986) — a worker whose project has no live session lease. |
|
|
748
|
+
| `KENAZ_SYNAPSE_WORKER_LEASED_IDLE_SECS` | 900 | **New (R5a).** Idle TTL for a worker whose project DOES have a live lease. Longer than the leaseless TTL — reaping an actively-worked project is a bigger interruption, but respawn costs only ~1s (§7.6/§9.1), so an idle-but-leased worker is not held forever either. |
|
|
749
|
+
| `KENAZ_SYNAPSE_WORKER_REAP_TICK_SECS` | 60 | Reaper poll interval (unchanged). |
|
|
750
|
+
| `KENAZ_SYNAPSE_WORKER_MAX` | 3 | **New (R5b).** Hard cap on concurrently resident workers. Spawning past the cap evicts the LRU idle worker first (reason `cap`); if every tracked worker is busy, the call is served locally instead of spawning a 4th process (logged, not silently degraded). |
|
|
751
|
+
| `KENAZ_SYNAPSE_WORKER_MAX_RSS_MB` | 400 | **New (R5c).** Per-worker RSS cap, checked on the reaper tick. |
|
|
752
|
+
| `KENAZ_SYNAPSE_WORKERS_TOTAL_RSS_MB` | 1200 | **New (R5c).** Fleet-wide RSS cap, checked on the reaper tick — over cap reaps the idlest worker(s) first. |
|
|
753
|
+
|
|
754
|
+
A busy worker (`in_flight != 0`) is never evicted by any of these — cap and RSS checks skip it the same
|
|
755
|
+
way idle-TTL selection always has (a worker mid-answer is never killed). Every eviction — idle, cap, or
|
|
756
|
+
RSS — logs via `tracing::info!(target: "synapse_worker", ...)` with an explicit `reason` field
|
|
757
|
+
(`idle_leaseless | idle_leased | cap | rss`), landing in `backend.log` on installed builds, not just dev
|
|
758
|
+
stderr.
|
|
759
|
+
|
|
760
|
+
Unit tests (`synapse_worker.rs`, no process spawning): `select_reapable` (leaseless vs. leased TTL
|
|
761
|
+
selection), `decide_capacity` (room available / evict LRU idle / serve-locally-when-all-busy),
|
|
762
|
+
`select_rss_reap_victims` (per-worker cap, fleet-total cap reaping idlest-first, busy workers spared in
|
|
763
|
+
both), `build_worker_rows` (leased/idle/rss reporting from a fake registry), plus the flag-parsing and
|
|
764
|
+
`is_forwardable_tool` suites for R3 below.
|
|
765
|
+
|
|
766
|
+
**A4 (live, not yet run by this card — Rust-only dispatch, no cargo build/run):** open 4 projects via
|
|
767
|
+
`dev/scripts/probe/pool-multi-project.js` → expect only 3 resident workers (4th evicts the LRU idle one,
|
|
768
|
+
`reason=cap` in backend.log); leave one leased project idle past 900s → its worker is reaped
|
|
769
|
+
(`reason=idle_leased`) and respawns on the next call; a synthetic RSS breach
|
|
770
|
+
(`KENAZ_SYNAPSE_WORKER_MAX_RSS_MB` set artificially low) reaps the idlest worker (`reason=rss`);
|
|
771
|
+
`synapse_status.workers[]` shows `rss_mb`/`idle_secs` throughout. Left for the orchestrator's live/
|
|
772
|
+
release smoke pass.
|
|
773
|
+
|
|
774
|
+
### 10.4 R2 — release standalone smoke procedure (for the orchestrator to run + record)
|
|
775
|
+
|
|
776
|
+
1. Stop any running `tauri dev` backend by PID (never `taskkill` by image name — see repo-wide lesson).
|
|
777
|
+
2. `cargo build --release` (in the fixed verify worktree — kuzu re-cmakes per worktree PATH, ~20 min the
|
|
778
|
+
first time per worktree, per `reference_worktree_rust_verify_recipe.md`).
|
|
779
|
+
3. Launch the release exe standalone (not through the installer) with `KENAZ_SYNAPSE_WORKERS` unset
|
|
780
|
+
(default ON) and at least two projects known to `projects.json`.
|
|
781
|
+
4. Call `synapse_status` (MCP or REST) for the **current** project — expect `workers[]` to show **no**
|
|
782
|
+
entry for it (R2 fail-safe: the current project is always served locally) and the
|
|
783
|
+
`log_forwarder_config` startup line (`backend.log`, target `synapse_worker`) to show
|
|
784
|
+
`current_project` resolved to that project's path, not `<unresolved>`.
|
|
785
|
+
5. Call `synapse_status` for **one other** known project — expect exactly one worker entry to appear for
|
|
786
|
+
it, with `status` reporting real (not `"unreachable"`) counts.
|
|
787
|
+
6. Record: both pids, `rss_mb` for the spawned worker, and the exact `forwarder configuration` /
|
|
788
|
+
`forward_decision` log lines from `backend.log`.
|
|
789
|
+
7. Evidence goes in this section (§10.4) once run — not yet run as of this card (Rust-only dispatch;
|
|
790
|
+
the orchestrator runs it in the fixed verify worktree per the dispatch contract at the top of this
|
|
791
|
+
task).
|
|
792
|
+
|
|
793
|
+
### 10.5 R3 — the flip + rollback
|
|
794
|
+
|
|
795
|
+
`KENAZ_SYNAPSE_WORKERS` semantics inverted: **on unless set to exactly `0`** (`workers_enabled()` in
|
|
796
|
+
`synapse_worker.rs`). Unset, `1`, or any other value all mean ON — the PoC's `== Some("1")` opt-in gate
|
|
797
|
+
is retired. `FORWARDABLE_TOOLS`'s five-tool PoC allowlist is replaced by `is_forwardable_tool`, matching
|
|
798
|
+
`mcp.rs::is_project_scoped_tool`'s full `synapse_*` / `hippocampus_*` / `cortex_*` prefix set (duplicated
|
|
799
|
+
in `synapse_worker.rs` rather than calling that private function — `mcp.rs` is outside this card's scope
|
|
800
|
+
paths; the two prefix sets must be kept in sync by hand until they share one home). Reaper defaults
|
|
801
|
+
(`KENAZ_SYNAPSE_WORKER_IDLE_SECS=300`, `KENAZ_SYNAPSE_WORKER_REAP_TICK_SECS=60`) are unchanged.
|
|
802
|
+
|
|
803
|
+
**Rollback:** set `KENAZ_SYNAPSE_WORKERS=0` and restart the backend. Every forwarded call serves locally
|
|
804
|
+
again (`workers_enabled()` returns false), the reaper never arms, and `log_forwarder_config` logs the
|
|
805
|
+
disabled state at startup. No worker processes survive a restart with the flag off (Job Object /
|
|
806
|
+
`KILL_ON_JOB_CLOSE` owns their lifecycle either way).
|
|
807
|
+
|
|
808
|
+
**Dev launcher:** verified already clean — `dashboard/package.json`'s `tauri:dev` script does not set
|
|
809
|
+
`KENAZ_SYNAPSE_WORKERS` (grepped; only `dev/scripts/probe/pool-multi-project.js`, this doc, and the two
|
|
810
|
+
Rust source files reference the var), so there is no launcher env to remove — the default-ON flag
|
|
811
|
+
semantics apply to `tauri:dev` automatically, same as every other entry point.
|
|
812
|
+
|
|
813
|
+
### 10.6 What this card did NOT touch
|
|
814
|
+
|
|
815
|
+
- `mcp.rs::execute_tool_inner`'s comment above the `maybe_forward` call still says "behind env
|
|
816
|
+
KENAZ_SYNAPSE_WORKERS=1" — stale after the flip, but `mcp.rs` is outside this card's scope paths.
|
|
817
|
+
Small follow-up for whoever next edits that file.
|
|
818
|
+
- The R2 `forward_decision` fail-safe itself (`current_unresolved -> ServeLocally`) is untouched, per
|
|
819
|
+
the dispatch instruction — §10.1(b) only points at it, does not modify it.
|
|
820
|
+
|
|
821
|
+
### 10.7 Two defects found on the release standalone smoke (Ansuz, 2026-09-22, TASK_1999 R6)
|
|
822
|
+
|
|
823
|
+
The §10.4 smoke procedure surfaced two defects, both fixed in `synapse_worker.rs`:
|
|
824
|
+
|
|
825
|
+
**Defect 1 — `synapse_status` forwarded to a worker.** With the §10.5 widened forwardable prefix set,
|
|
826
|
+
`synapse_status` for a foreign project was itself a forwardable tool — it got proxied to that project's
|
|
827
|
+
worker, so the caller got the WORKER's view (`workers: [] / worker_count 0`, since a worker never spawns
|
|
828
|
+
children) instead of the main process's aggregation across every resident worker. Fix: `is_forwardable_tool`
|
|
829
|
+
now checks an explicit `MAIN_ONLY_TOOLS` deny-list first — `synapse_status`, `synapse_health`,
|
|
830
|
+
`synapse_maintain`, `synapse_index`, `synapse_release_project`, and any `synapse_evolution_*` tool — all of
|
|
831
|
+
which either answer a question about the process/pool/worker-set itself or trigger a long-running job, and
|
|
832
|
+
so are always served locally regardless of which project they're asked about. `synapse_status` served
|
|
833
|
+
locally on a foreign project is unaffected by this — it already gets that project's per-project numbers
|
|
834
|
+
from `status_block()`'s own direct (non-forwarding) queries to each tracked worker's `/api/mcp` (§10.2);
|
|
835
|
+
only the "hop the whole call over to a worker and return ITS answer" path is blocked.
|
|
836
|
+
|
|
837
|
+
**Defect 2 — current-project identity split by spelling/bundling.** On the release exe started standalone
|
|
838
|
+
from `target/release`, `get_current_project()` resolved to
|
|
839
|
+
`<repo>/dashboard/src-tauri/target/release/kenaz-core` — the bundled Synapse binary's own exe path — so a
|
|
840
|
+
call for the source repo (`C:/Users/user/Documents/GitHub/KenazAI`) compared as a FOREIGN project and
|
|
841
|
+
spawned a 160MB self-worker. Separately, an esp32 worker path was observed logged with mixed slash
|
|
842
|
+
spellings (`C:\...` vs `C:/...`), which a plain string-equality key would also treat as two projects. Fix,
|
|
843
|
+
both in `normalize_key`/`forward_decision`:
|
|
844
|
+
|
|
845
|
+
- `normalize_key` now resolves via `std::fs::canonicalize` when the path exists on disk (falling back to
|
|
846
|
+
the raw path when it doesn't — a worker's `--project` arg for a not-yet-touched path, or a key built from
|
|
847
|
+
a test fixture), strips Windows' verbatim (`\\?\`) prefix after the backslash→forward-slash pass, trims a
|
|
848
|
+
trailing slash, and lowercases only on Windows (`#[cfg(windows)]`) — so spelling alone never creates a
|
|
849
|
+
second identity for the same on-disk project.
|
|
850
|
+
- A new `same_project_or_bundle(current, requested) -> bool` rule, consulted by `forward_decision` right
|
|
851
|
+
after the existing `current == requested` check: if `current` is a bundled `kenaz-core` exe path
|
|
852
|
+
(`is_bundled_kenaz_core` — normalized path contains `/target/` and ends with `/kenaz-core`, `.exe` suffix
|
|
853
|
+
stripped first), its real project identity is the source repo that built it — the ancestor 4 directory
|
|
854
|
+
levels above the exe's parent (`<repo>/dashboard/src-tauri/target/release/kenaz-core` -> `<repo>`, walking
|
|
855
|
+
up through `release`, `target`, `src-tauri`, `dashboard`, computed via 5 `Path::parent()` calls from the
|
|
856
|
+
full exe path and re-`normalize_key`'d). A `requested` path equal to that computed root is
|
|
857
|
+
`ServeLocally("current_bundle_alias")` — same project, two spellings, not forwarded and no self-worker
|
|
858
|
+
spawned. A genuinely different `requested` path (not the bundle's own source root) still `Forward`s
|
|
859
|
+
normally.
|
|
860
|
+
|
|
861
|
+
Unit tests (`synapse_worker.rs`): `is_forwardable_tool_denies_main_only_tools` /
|
|
862
|
+
`is_forwardable_tool_still_allows_recall` (Defect 1); `normalize_key_collapses_slash_and_case_spelling` +
|
|
863
|
+
`same_spelling_variants_serve_locally_via_forward_decision` (Windows-only, mixed-slash/case collapse),
|
|
864
|
+
`is_bundled_kenaz_core_detects_the_release_exe_path`,
|
|
865
|
+
`bundled_current_and_source_root_requested_serve_locally`,
|
|
866
|
+
`bundled_current_but_genuinely_different_project_forwards`, `genuinely_different_project_still_forwards`
|
|
867
|
+
(Defect 2) — all in `t1999_project_identity_tests`.
|
|
868
|
+
|
|
869
|
+
### 10.8 A4 live evidence (dev, 2026-09-22, default ON + short TTLs via env)
|
|
870
|
+
|
|
871
|
+
Env: `KENAZ_SYNAPSE_WORKER_LEASED_IDLE_SECS=60 KENAZ_SYNAPSE_WORKER_IDLE_SECS=40 KENAZ_SYNAPSE_WORKER_REAP_TICK_SECS=10 KENAZ_SYNAPSE_WORKERS_TOTAL_RSS_MB=260`; a lease file for esp32 was placed in `.kenaz/specialist/sessions/leases/` (heartbeat fresh, 8 h liveness) so esp32 counted as leased. Calls were direct `synapse_recall` per project (see the probe note below).
|
|
872
|
+
|
|
873
|
+
| step | observed |
|
|
874
|
+
|---|---|
|
|
875
|
+
| recall esp32, CognitiveLabs, trip | workers 18100 (154 MB), 18101 (120 MB), 18102 (145 MB); status rows carry `idle_secs` / `leased` / `rss_mb` |
|
|
876
|
+
| next reaper ticks (total 419 MB > 260 MB cap) | `reaped worker ... project=esp32 reason="rss"`, then `... cognitivelabs reason="rss"`; trip (145 MB) survives under the cap |
|
|
877
|
+
| trip idle > 40 s | `reaped worker ... project=trip reason="idle_leaseless"` |
|
|
878
|
+
| esp32 touched again, then idle > 60 s with a live lease | `reaped worker ... project=esp32 reason="idle_leased"` |
|
|
879
|
+
| recall esp32 after the reap | fresh worker on port 18104 (respawn on demand) |
|
|
880
|
+
|
|
881
|
+
Two lessons for anyone re-running this: (1) the RSS cap is a hard cap and reaps leased workers too (idlest first) — intended; (2) `synapse_status` is main-only since R6, so a probe that alternates status/recall with one call per project spawns nothing — `dev/scripts/probe/pool-multi-project.js --tool-set worker` now uses `synapse_search` + `synapse_recall`.
|