@nac3/forge-cli 0.2.0-alpha.8 → 0.2.1-alpha.60
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/README.md +16 -1
- package/dist/a11y/helpers.d.ts +88 -0
- package/dist/a11y/helpers.d.ts.map +1 -0
- package/dist/a11y/helpers.js +109 -0
- package/dist/a11y/helpers.js.map +1 -0
- package/dist/agents/bridge.d.ts +69 -0
- package/dist/agents/bridge.d.ts.map +1 -0
- package/dist/agents/bridge.js +295 -0
- package/dist/agents/bridge.js.map +1 -0
- package/dist/agents/cli_real.d.ts +38 -0
- package/dist/agents/cli_real.d.ts.map +1 -0
- package/dist/agents/cli_real.js +46 -0
- package/dist/agents/cli_real.js.map +1 -0
- package/dist/agents/config_resolver.d.ts +16 -0
- package/dist/agents/config_resolver.d.ts.map +1 -0
- package/dist/agents/config_resolver.js +133 -0
- package/dist/agents/config_resolver.js.map +1 -0
- package/dist/agents/config_schema.d.ts +42 -0
- package/dist/agents/config_schema.d.ts.map +1 -0
- package/dist/agents/config_schema.js +220 -0
- package/dist/agents/config_schema.js.map +1 -0
- package/dist/agents/defaults.d.ts +21 -0
- package/dist/agents/defaults.d.ts.map +1 -0
- package/dist/agents/defaults.js +56 -0
- package/dist/agents/defaults.js.map +1 -0
- package/dist/agents/delegate.d.ts +36 -0
- package/dist/agents/delegate.d.ts.map +1 -0
- package/dist/agents/delegate.js +68 -0
- package/dist/agents/delegate.js.map +1 -0
- package/dist/agents/iterative_step.d.ts +95 -0
- package/dist/agents/iterative_step.d.ts.map +1 -0
- package/dist/agents/iterative_step.js +249 -0
- package/dist/agents/iterative_step.js.map +1 -0
- package/dist/agents/llm_step.d.ts +50 -0
- package/dist/agents/llm_step.d.ts.map +1 -0
- package/dist/agents/llm_step.js +28 -0
- package/dist/agents/llm_step.js.map +1 -0
- package/dist/agents/real_step_factory.d.ts +95 -0
- package/dist/agents/real_step_factory.d.ts.map +1 -0
- package/dist/agents/real_step_factory.js +51 -0
- package/dist/agents/real_step_factory.js.map +1 -0
- package/dist/agents/runner.d.ts +108 -0
- package/dist/agents/runner.d.ts.map +1 -0
- package/dist/agents/runner.js +174 -0
- package/dist/agents/runner.js.map +1 -0
- package/dist/agents/runtime.d.ts +115 -0
- package/dist/agents/runtime.d.ts.map +1 -0
- package/dist/agents/runtime.js +429 -0
- package/dist/agents/runtime.js.map +1 -0
- package/dist/agents/store.d.ts +33 -0
- package/dist/agents/store.d.ts.map +1 -0
- package/dist/agents/store.js +210 -0
- package/dist/agents/store.js.map +1 -0
- package/dist/agents/system_prompt.d.ts +36 -0
- package/dist/agents/system_prompt.d.ts.map +1 -0
- package/dist/agents/system_prompt.js +101 -0
- package/dist/agents/system_prompt.js.map +1 -0
- package/dist/agents/types.d.ts +123 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +39 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/bin/yf.d.ts.map +1 -1
- package/dist/bin/yf.js +101 -2
- package/dist/bin/yf.js.map +1 -1
- package/dist/chat/claude.d.ts +89 -1
- package/dist/chat/claude.d.ts.map +1 -1
- package/dist/chat/claude.js +170 -30
- package/dist/chat/claude.js.map +1 -1
- package/dist/chat/claude_cli.d.ts +145 -0
- package/dist/chat/claude_cli.d.ts.map +1 -0
- package/dist/chat/claude_cli.js +598 -0
- package/dist/chat/claude_cli.js.map +1 -0
- package/dist/chat/completion_hallucination_detector.d.ts +40 -0
- package/dist/chat/completion_hallucination_detector.d.ts.map +1 -0
- package/dist/chat/completion_hallucination_detector.js +96 -0
- package/dist/chat/completion_hallucination_detector.js.map +1 -0
- package/dist/chat/doctrine_digest.d.ts +31 -0
- package/dist/chat/doctrine_digest.d.ts.map +1 -0
- package/dist/chat/doctrine_digest.js +117 -0
- package/dist/chat/doctrine_digest.js.map +1 -0
- package/dist/chat/graph_auto_ingest.d.ts +46 -0
- package/dist/chat/graph_auto_ingest.d.ts.map +1 -0
- package/dist/chat/graph_auto_ingest.js +177 -0
- package/dist/chat/graph_auto_ingest.js.map +1 -0
- package/dist/chat/graph_component_watcher.d.ts +34 -0
- package/dist/chat/graph_component_watcher.d.ts.map +1 -0
- package/dist/chat/graph_component_watcher.js +225 -0
- package/dist/chat/graph_component_watcher.js.map +1 -0
- package/dist/chat/graph_snapshot.d.ts +38 -0
- package/dist/chat/graph_snapshot.d.ts.map +1 -0
- package/dist/chat/graph_snapshot.js +159 -0
- package/dist/chat/graph_snapshot.js.map +1 -0
- package/dist/chat/ingest_session.d.ts +24 -4
- package/dist/chat/ingest_session.d.ts.map +1 -1
- package/dist/chat/ingest_session.js +143 -4
- package/dist/chat/ingest_session.js.map +1 -1
- package/dist/chat/panel.d.ts.map +1 -1
- package/dist/chat/panel.js +9640 -1455
- package/dist/chat/panel.js.map +1 -1
- package/dist/chat/panel_queue.d.ts +43 -0
- package/dist/chat/panel_queue.d.ts.map +1 -0
- package/dist/chat/panel_queue.js +46 -0
- package/dist/chat/panel_queue.js.map +1 -0
- package/dist/chat/project_context_inject.d.ts +10 -0
- package/dist/chat/project_context_inject.d.ts.map +1 -0
- package/dist/chat/project_context_inject.js +119 -0
- package/dist/chat/project_context_inject.js.map +1 -0
- package/dist/chat/project_slug.d.ts +17 -0
- package/dist/chat/project_slug.d.ts.map +1 -0
- package/dist/chat/project_slug.js +103 -0
- package/dist/chat/project_slug.js.map +1 -0
- package/dist/chat/refusal_detector.d.ts +14 -0
- package/dist/chat/refusal_detector.d.ts.map +1 -0
- package/dist/chat/refusal_detector.js +138 -0
- package/dist/chat/refusal_detector.js.map +1 -0
- package/dist/chat/semantic_graph_ingest.d.ts +39 -0
- package/dist/chat/semantic_graph_ingest.d.ts.map +1 -0
- package/dist/chat/semantic_graph_ingest.js +90 -0
- package/dist/chat/semantic_graph_ingest.js.map +1 -0
- package/dist/chat/semantic_graph_inject.d.ts +31 -0
- package/dist/chat/semantic_graph_inject.d.ts.map +1 -0
- package/dist/chat/semantic_graph_inject.js +63 -0
- package/dist/chat/semantic_graph_inject.js.map +1 -0
- package/dist/chat/server.d.ts +98 -2
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +3881 -337
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/spec_extract.d.ts +1 -2
- package/dist/chat/spec_extract.d.ts.map +1 -1
- package/dist/chat/spec_extract.js +41 -56
- package/dist/chat/spec_extract.js.map +1 -1
- package/dist/chat/spec_plan.d.ts +1 -2
- package/dist/chat/spec_plan.d.ts.map +1 -1
- package/dist/chat/spec_plan.js +36 -57
- package/dist/chat/spec_plan.js.map +1 -1
- package/dist/chat/tools/app_backend_dispatch.d.ts +39 -0
- package/dist/chat/tools/app_backend_dispatch.d.ts.map +1 -0
- package/dist/chat/tools/app_backend_dispatch.js +239 -0
- package/dist/chat/tools/app_backend_dispatch.js.map +1 -0
- package/dist/chat/tools/audit_consumers.d.ts +66 -0
- package/dist/chat/tools/audit_consumers.d.ts.map +1 -0
- package/dist/chat/tools/audit_consumers.js +231 -0
- package/dist/chat/tools/audit_consumers.js.map +1 -0
- package/dist/chat/tools/fs_editor.d.ts +11 -0
- package/dist/chat/tools/fs_editor.d.ts.map +1 -0
- package/dist/chat/tools/fs_editor.js +162 -0
- package/dist/chat/tools/fs_editor.js.map +1 -0
- package/dist/chat/tools/git.d.ts +24 -0
- package/dist/chat/tools/git.d.ts.map +1 -1
- package/dist/chat/tools/git.js +78 -0
- package/dist/chat/tools/git.js.map +1 -1
- package/dist/chat/tools/graph.d.ts +43 -0
- package/dist/chat/tools/graph.d.ts.map +1 -0
- package/dist/chat/tools/graph.js +174 -0
- package/dist/chat/tools/graph.js.map +1 -0
- package/dist/chat/tools/keys.d.ts +9 -0
- package/dist/chat/tools/keys.d.ts.map +1 -0
- package/dist/chat/tools/keys.js +169 -0
- package/dist/chat/tools/keys.js.map +1 -0
- package/dist/chat/tools/misc_verbs.d.ts +36 -0
- package/dist/chat/tools/misc_verbs.d.ts.map +1 -0
- package/dist/chat/tools/misc_verbs.js +405 -0
- package/dist/chat/tools/misc_verbs.js.map +1 -0
- package/dist/chat/tools/nac3_invoke.d.ts +58 -0
- package/dist/chat/tools/nac3_invoke.d.ts.map +1 -0
- package/dist/chat/tools/nac3_invoke.js +887 -0
- package/dist/chat/tools/nac3_invoke.js.map +1 -0
- package/dist/chat/tools/pending.d.ts +69 -0
- package/dist/chat/tools/pending.d.ts.map +1 -0
- package/dist/chat/tools/pending.js +167 -0
- package/dist/chat/tools/pending.js.map +1 -0
- package/dist/chat/tools/pizarron.d.ts +40 -0
- package/dist/chat/tools/pizarron.d.ts.map +1 -0
- package/dist/chat/tools/pizarron.js +123 -0
- package/dist/chat/tools/pizarron.js.map +1 -0
- package/dist/chat/tools/project_lifecycle.d.ts +24 -0
- package/dist/chat/tools/project_lifecycle.d.ts.map +1 -0
- package/dist/chat/tools/project_lifecycle.js +212 -0
- package/dist/chat/tools/project_lifecycle.js.map +1 -0
- package/dist/chat/tools/reader.d.ts.map +1 -1
- package/dist/chat/tools/reader.js +144 -1
- package/dist/chat/tools/reader.js.map +1 -1
- package/dist/chat/tools/shell.d.ts +58 -0
- package/dist/chat/tools/shell.d.ts.map +1 -0
- package/dist/chat/tools/shell.js +253 -0
- package/dist/chat/tools/shell.js.map +1 -0
- package/dist/chat/tools/wiring.d.ts +28 -0
- package/dist/chat/tools/wiring.d.ts.map +1 -0
- package/dist/chat/tools/wiring.js +116 -0
- package/dist/chat/tools/wiring.js.map +1 -0
- package/dist/chat/tools/workflow.d.ts +55 -0
- package/dist/chat/tools/workflow.d.ts.map +1 -0
- package/dist/chat/tools/workflow.js +463 -0
- package/dist/chat/tools/workflow.js.map +1 -0
- package/dist/chat/tools.d.ts +42 -0
- package/dist/chat/tools.d.ts.map +1 -1
- package/dist/chat/tools.js +451 -13
- package/dist/chat/tools.js.map +1 -1
- package/dist/chat/wiring_inject.d.ts +18 -0
- package/dist/chat/wiring_inject.d.ts.map +1 -0
- package/dist/chat/wiring_inject.js +78 -0
- package/dist/chat/wiring_inject.js.map +1 -0
- package/dist/chat/workflow_inject.d.ts +52 -0
- package/dist/chat/workflow_inject.d.ts.map +1 -0
- package/dist/chat/workflow_inject.js +346 -0
- package/dist/chat/workflow_inject.js.map +1 -0
- package/dist/chat/yujin_splash.d.ts +27 -0
- package/dist/chat/yujin_splash.d.ts.map +1 -0
- package/dist/chat/yujin_splash.js +147 -0
- package/dist/chat/yujin_splash.js.map +1 -0
- package/dist/commands/agent.d.ts +33 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +281 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/approve.d.ts +32 -0
- package/dist/commands/approve.d.ts.map +1 -0
- package/dist/commands/approve.js +198 -0
- package/dist/commands/approve.js.map +1 -0
- package/dist/commands/block.d.ts +28 -0
- package/dist/commands/block.d.ts.map +1 -0
- package/dist/commands/block.js +189 -0
- package/dist/commands/block.js.map +1 -0
- package/dist/commands/bootstrap.d.ts +35 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/bootstrap.js +205 -0
- package/dist/commands/bootstrap.js.map +1 -0
- package/dist/commands/brain.d.ts +17 -0
- package/dist/commands/brain.d.ts.map +1 -0
- package/dist/commands/brain.js +129 -0
- package/dist/commands/brain.js.map +1 -0
- package/dist/commands/chat.d.ts +10 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +209 -17
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/clarify.d.ts +30 -0
- package/dist/commands/clarify.d.ts.map +1 -0
- package/dist/commands/clarify.js +671 -0
- package/dist/commands/clarify.js.map +1 -0
- package/dist/commands/director.d.ts +37 -0
- package/dist/commands/director.d.ts.map +1 -0
- package/dist/commands/director.js +290 -0
- package/dist/commands/director.js.map +1 -0
- package/dist/commands/discover.d.ts +30 -0
- package/dist/commands/discover.d.ts.map +1 -0
- package/dist/commands/discover.js +178 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/doctor.d.ts +18 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +120 -4
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/doctrine.d.ts +24 -0
- package/dist/commands/doctrine.d.ts.map +1 -0
- package/dist/commands/doctrine.js +106 -0
- package/dist/commands/doctrine.js.map +1 -0
- package/dist/commands/doctrines.d.ts +21 -0
- package/dist/commands/doctrines.d.ts.map +1 -0
- package/dist/commands/doctrines.js +158 -0
- package/dist/commands/doctrines.js.map +1 -0
- package/dist/commands/graph.d.ts +29 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +362 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/keys_setup.d.ts +18 -0
- package/dist/commands/keys_setup.d.ts.map +1 -1
- package/dist/commands/keys_setup.js +225 -11
- package/dist/commands/keys_setup.js.map +1 -1
- package/dist/commands/legacy-audit.d.ts +34 -0
- package/dist/commands/legacy-audit.d.ts.map +1 -0
- package/dist/commands/legacy-audit.js +270 -0
- package/dist/commands/legacy-audit.js.map +1 -0
- package/dist/commands/lessons.d.ts +28 -0
- package/dist/commands/lessons.d.ts.map +1 -0
- package/dist/commands/lessons.js +309 -0
- package/dist/commands/lessons.js.map +1 -0
- package/dist/commands/license.d.ts.map +1 -1
- package/dist/commands/license.js +56 -1
- package/dist/commands/license.js.map +1 -1
- package/dist/commands/limits.d.ts +15 -0
- package/dist/commands/limits.d.ts.map +1 -0
- package/dist/commands/limits.js +51 -0
- package/dist/commands/limits.js.map +1 -0
- package/dist/commands/manifest-cli.d.ts +12 -0
- package/dist/commands/manifest-cli.d.ts.map +1 -0
- package/dist/commands/manifest-cli.js +42 -0
- package/dist/commands/manifest-cli.js.map +1 -0
- package/dist/commands/mcp.d.ts +24 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +163 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/mobile.d.ts +15 -0
- package/dist/commands/mobile.d.ts.map +1 -1
- package/dist/commands/mobile.js +27 -24
- package/dist/commands/mobile.js.map +1 -1
- package/dist/commands/nac3.d.ts +22 -0
- package/dist/commands/nac3.d.ts.map +1 -0
- package/dist/commands/nac3.js +125 -0
- package/dist/commands/nac3.js.map +1 -0
- package/dist/commands/operate.d.ts +22 -0
- package/dist/commands/operate.d.ts.map +1 -0
- package/dist/commands/operate.js +523 -0
- package/dist/commands/operate.js.map +1 -0
- package/dist/commands/pending.d.ts +22 -0
- package/dist/commands/pending.d.ts.map +1 -0
- package/dist/commands/pending.js +341 -0
- package/dist/commands/pending.js.map +1 -0
- package/dist/commands/qa.d.ts +24 -0
- package/dist/commands/qa.d.ts.map +1 -0
- package/dist/commands/qa.js +349 -0
- package/dist/commands/qa.js.map +1 -0
- package/dist/commands/spec.d.ts +38 -0
- package/dist/commands/spec.d.ts.map +1 -0
- package/dist/commands/spec.js +256 -0
- package/dist/commands/spec.js.map +1 -0
- package/dist/commands/support.d.ts +22 -0
- package/dist/commands/support.d.ts.map +1 -0
- package/dist/commands/support.js +165 -0
- package/dist/commands/support.js.map +1 -0
- package/dist/commands/test_agent.d.ts +22 -0
- package/dist/commands/test_agent.d.ts.map +1 -0
- package/dist/commands/test_agent.js +100 -0
- package/dist/commands/test_agent.js.map +1 -0
- package/dist/commands/triage.d.ts +34 -0
- package/dist/commands/triage.d.ts.map +1 -0
- package/dist/commands/triage.js +228 -0
- package/dist/commands/triage.js.map +1 -0
- package/dist/commands/vault-inventory.d.ts +30 -0
- package/dist/commands/vault-inventory.d.ts.map +1 -0
- package/dist/commands/vault-inventory.js +222 -0
- package/dist/commands/vault-inventory.js.map +1 -0
- package/dist/commands/vault.d.ts.map +1 -1
- package/dist/commands/vault.js +5 -0
- package/dist/commands/vault.js.map +1 -1
- package/dist/commands/voice.d.ts.map +1 -1
- package/dist/commands/voice.js +47 -4
- package/dist/commands/voice.js.map +1 -1
- package/dist/commands/wiring.d.ts +19 -0
- package/dist/commands/wiring.d.ts.map +1 -0
- package/dist/commands/wiring.js +135 -0
- package/dist/commands/wiring.js.map +1 -0
- package/dist/commands/workflow-coverage.d.ts +30 -0
- package/dist/commands/workflow-coverage.d.ts.map +1 -0
- package/dist/commands/workflow-coverage.js +138 -0
- package/dist/commands/workflow-coverage.js.map +1 -0
- package/dist/core/ansi_strip.d.ts +39 -0
- package/dist/core/ansi_strip.d.ts.map +1 -0
- package/dist/core/ansi_strip.js +71 -0
- package/dist/core/ansi_strip.js.map +1 -0
- package/dist/core/atomic_write.d.ts +17 -0
- package/dist/core/atomic_write.d.ts.map +1 -0
- package/dist/core/atomic_write.js +51 -0
- package/dist/core/atomic_write.js.map +1 -0
- package/dist/core/audit_log.d.ts +43 -0
- package/dist/core/audit_log.d.ts.map +1 -0
- package/dist/core/audit_log.js +80 -0
- package/dist/core/audit_log.js.map +1 -0
- package/dist/core/brain_config.d.ts +50 -0
- package/dist/core/brain_config.d.ts.map +1 -0
- package/dist/core/brain_config.js +142 -0
- package/dist/core/brain_config.js.map +1 -0
- package/dist/core/budget.d.ts +96 -0
- package/dist/core/budget.d.ts.map +1 -0
- package/dist/core/budget.js +328 -0
- package/dist/core/budget.js.map +1 -0
- package/dist/core/cost_meter.d.ts +35 -0
- package/dist/core/cost_meter.d.ts.map +1 -0
- package/dist/core/cost_meter.js +111 -0
- package/dist/core/cost_meter.js.map +1 -0
- package/dist/core/cost_router.d.ts +106 -0
- package/dist/core/cost_router.d.ts.map +1 -0
- package/dist/core/cost_router.js +589 -0
- package/dist/core/cost_router.js.map +1 -0
- package/dist/core/doctrine_resolver.d.ts +23 -0
- package/dist/core/doctrine_resolver.d.ts.map +1 -0
- package/dist/core/doctrine_resolver.js +108 -0
- package/dist/core/doctrine_resolver.js.map +1 -0
- package/dist/core/error_catalog.d.ts +80 -0
- package/dist/core/error_catalog.d.ts.map +1 -0
- package/dist/core/error_catalog.js +168 -0
- package/dist/core/error_catalog.js.map +1 -0
- package/dist/core/error_formatter.d.ts +30 -0
- package/dist/core/error_formatter.d.ts.map +1 -0
- package/dist/core/error_formatter.js +155 -0
- package/dist/core/error_formatter.js.map +1 -0
- package/dist/core/incomplete_detector.d.ts +51 -0
- package/dist/core/incomplete_detector.d.ts.map +1 -0
- package/dist/core/incomplete_detector.js +140 -0
- package/dist/core/incomplete_detector.js.map +1 -0
- package/dist/core/keys_envelope.d.ts.map +1 -1
- package/dist/core/keys_envelope.js +14 -9
- package/dist/core/keys_envelope.js.map +1 -1
- package/dist/core/learnings_client.d.ts +104 -0
- package/dist/core/learnings_client.d.ts.map +1 -0
- package/dist/core/learnings_client.js +262 -0
- package/dist/core/learnings_client.js.map +1 -0
- package/dist/core/limits_config.d.ts +76 -0
- package/dist/core/limits_config.d.ts.map +1 -0
- package/dist/core/limits_config.js +297 -0
- package/dist/core/limits_config.js.map +1 -0
- package/dist/core/pairing.d.ts +1 -0
- package/dist/core/pairing.d.ts.map +1 -1
- package/dist/core/pairing.js +23 -12
- package/dist/core/pairing.js.map +1 -1
- package/dist/core/pilot_setup.d.ts +29 -3
- package/dist/core/pilot_setup.d.ts.map +1 -1
- package/dist/core/pilot_setup.js +130 -3
- package/dist/core/pilot_setup.js.map +1 -1
- package/dist/core/provider_keys.d.ts +35 -0
- package/dist/core/provider_keys.d.ts.map +1 -0
- package/dist/core/provider_keys.js +267 -0
- package/dist/core/provider_keys.js.map +1 -0
- package/dist/core/provider_models.d.ts +27 -0
- package/dist/core/provider_models.d.ts.map +1 -0
- package/dist/core/provider_models.js +169 -0
- package/dist/core/provider_models.js.map +1 -0
- package/dist/core/reasoning_gate.d.ts +72 -0
- package/dist/core/reasoning_gate.d.ts.map +1 -0
- package/dist/core/reasoning_gate.js +205 -0
- package/dist/core/reasoning_gate.js.map +1 -0
- package/dist/core/shell_classifier.d.ts +49 -0
- package/dist/core/shell_classifier.d.ts.map +1 -0
- package/dist/core/shell_classifier.js +159 -0
- package/dist/core/shell_classifier.js.map +1 -0
- package/dist/core/sq_resolver.d.ts +14 -0
- package/dist/core/sq_resolver.d.ts.map +1 -0
- package/dist/core/sq_resolver.js +230 -0
- package/dist/core/sq_resolver.js.map +1 -0
- package/dist/core/truncation_detector.d.ts +68 -0
- package/dist/core/truncation_detector.d.ts.map +1 -0
- package/dist/core/truncation_detector.js +115 -0
- package/dist/core/truncation_detector.js.map +1 -0
- package/dist/core/turn_classifier.d.ts +70 -0
- package/dist/core/turn_classifier.d.ts.map +1 -0
- package/dist/core/turn_classifier.js +324 -0
- package/dist/core/turn_classifier.js.map +1 -0
- package/dist/core/vad_config.d.ts +34 -0
- package/dist/core/vad_config.d.ts.map +1 -0
- package/dist/core/vad_config.js +95 -0
- package/dist/core/vad_config.js.map +1 -0
- package/dist/core/whats_new.d.ts +42 -0
- package/dist/core/whats_new.d.ts.map +1 -0
- package/dist/core/whats_new.js +214 -0
- package/dist/core/whats_new.js.map +1 -0
- package/dist/core/wizard_state.d.ts +15 -0
- package/dist/core/wizard_state.d.ts.map +1 -0
- package/dist/core/wizard_state.js +86 -0
- package/dist/core/wizard_state.js.map +1 -0
- package/dist/deploy/adapter.d.ts +93 -0
- package/dist/deploy/adapter.d.ts.map +1 -0
- package/dist/deploy/adapter.js +42 -0
- package/dist/deploy/adapter.js.map +1 -0
- package/dist/deploy/aws_adapter.d.ts +28 -0
- package/dist/deploy/aws_adapter.d.ts.map +1 -0
- package/dist/deploy/aws_adapter.js +98 -0
- package/dist/deploy/aws_adapter.js.map +1 -0
- package/dist/deploy/cloudflare.d.ts +24 -0
- package/dist/deploy/cloudflare.d.ts.map +1 -0
- package/dist/deploy/cloudflare.js +169 -0
- package/dist/deploy/cloudflare.js.map +1 -0
- package/dist/design/yujin_design_resolver.d.ts +77 -0
- package/dist/design/yujin_design_resolver.d.ts.map +1 -0
- package/dist/design/yujin_design_resolver.js +113 -0
- package/dist/design/yujin_design_resolver.js.map +1 -0
- package/dist/docs/LIMITED_RESPONSIBILITY.md +216 -0
- package/dist/docs/PRIVACY_POLICY.md +169 -0
- package/dist/docs/SQ.md +1397 -0
- package/dist/docs/SQ_BY_STEP.yaml +147 -0
- package/dist/docs/doctrine/accessibility.md +78 -0
- package/dist/docs/doctrine/agent-orchestrator.md +76 -0
- package/dist/docs/doctrine/byok-vs-managed.md +81 -0
- package/dist/docs/doctrine/cost-router-escalation.md +103 -0
- package/dist/docs/doctrine/default-design-system.md +120 -0
- package/dist/docs/doctrine/explain-results.md +90 -0
- package/dist/docs/doctrine/expo-eas-builds.md +177 -0
- package/dist/docs/doctrine/g-doc.md +46 -0
- package/dist/docs/doctrine/gates.md +21 -0
- package/dist/docs/doctrine/language-sovereignty.md +143 -0
- package/dist/docs/doctrine/lessons-workflow.md +68 -0
- package/dist/docs/doctrine/mcp-bridge-lifecycle.md +75 -0
- package/dist/docs/doctrine/nac3-attrs.md +23 -0
- package/dist/docs/doctrine/office-tools.md +102 -0
- package/dist/docs/doctrine/pizarron.md +52 -0
- package/dist/docs/doctrine/r8-modal.md +60 -0
- package/dist/docs/doctrine/safety-refusals.md +73 -0
- package/dist/docs/doctrine/testing-policy.md +211 -0
- package/dist/docs/doctrine/verb-composition.md +68 -0
- package/dist/docs/doctrine/verification-honesty.md +95 -0
- package/dist/docs/doctrine/workflow-kinds.md +52 -0
- package/dist/docs/doctrine/workflow-phases.md +108 -0
- package/dist/docs/doctrine/workflow.md +58 -0
- package/dist/docs/doctrine/yf-commands.md +49 -0
- package/dist/json/query.d.ts +38 -0
- package/dist/json/query.d.ts.map +1 -0
- package/dist/json/query.js +177 -0
- package/dist/json/query.js.map +1 -0
- package/dist/license/hito4_client.d.ts +7 -0
- package/dist/license/hito4_client.d.ts.map +1 -1
- package/dist/license/hito4_client.js +52 -2
- package/dist/license/hito4_client.js.map +1 -1
- package/dist/license/index.d.ts.map +1 -1
- package/dist/license/index.js +7 -0
- package/dist/license/index.js.map +1 -1
- package/dist/license/sync.d.ts +59 -0
- package/dist/license/sync.d.ts.map +1 -0
- package/dist/license/sync.js +148 -0
- package/dist/license/sync.js.map +1 -0
- package/dist/llm/cohere_client.d.ts +81 -0
- package/dist/llm/cohere_client.d.ts.map +1 -0
- package/dist/llm/cohere_client.js +195 -0
- package/dist/llm/cohere_client.js.map +1 -0
- package/dist/llm/deepseek_client.d.ts +63 -0
- package/dist/llm/deepseek_client.d.ts.map +1 -0
- package/dist/llm/deepseek_client.js +188 -0
- package/dist/llm/deepseek_client.js.map +1 -0
- package/dist/llm/gemini_client.d.ts +78 -0
- package/dist/llm/gemini_client.d.ts.map +1 -0
- package/dist/llm/gemini_client.js +189 -0
- package/dist/llm/gemini_client.js.map +1 -0
- package/dist/llm/managed_client.d.ts +70 -0
- package/dist/llm/managed_client.d.ts.map +1 -0
- package/dist/llm/managed_client.js +251 -0
- package/dist/llm/managed_client.js.map +1 -0
- package/dist/llm/mistral_client.d.ts +54 -0
- package/dist/llm/mistral_client.d.ts.map +1 -0
- package/dist/llm/mistral_client.js +174 -0
- package/dist/llm/mistral_client.js.map +1 -0
- package/dist/llm/multi_provider_client.d.ts +57 -0
- package/dist/llm/multi_provider_client.d.ts.map +1 -0
- package/dist/llm/multi_provider_client.js +109 -0
- package/dist/llm/multi_provider_client.js.map +1 -0
- package/dist/llm/openai_client.d.ts +77 -0
- package/dist/llm/openai_client.d.ts.map +1 -0
- package/dist/llm/openai_client.js +200 -0
- package/dist/llm/openai_client.js.map +1 -0
- package/dist/llm/xai_client.d.ts +51 -0
- package/dist/llm/xai_client.d.ts.map +1 -0
- package/dist/llm/xai_client.js +174 -0
- package/dist/llm/xai_client.js.map +1 -0
- package/dist/mcp/blocklist.d.ts +19 -0
- package/dist/mcp/blocklist.d.ts.map +1 -0
- package/dist/mcp/blocklist.js +118 -0
- package/dist/mcp/blocklist.js.map +1 -0
- package/dist/mcp/bridge_registry.d.ts +77 -0
- package/dist/mcp/bridge_registry.d.ts.map +1 -0
- package/dist/mcp/bridge_registry.js +220 -0
- package/dist/mcp/bridge_registry.js.map +1 -0
- package/dist/mcp/config.d.ts +25 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +116 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/forge_panel_server.d.ts +46 -0
- package/dist/mcp/forge_panel_server.d.ts.map +1 -0
- package/dist/mcp/forge_panel_server.js +166 -0
- package/dist/mcp/forge_panel_server.js.map +1 -0
- package/dist/mcp/lan_scan.d.ts +36 -0
- package/dist/mcp/lan_scan.d.ts.map +1 -0
- package/dist/mcp/lan_scan.js +130 -0
- package/dist/mcp/lan_scan.js.map +1 -0
- package/dist/mcp/protocol_client.d.ts +63 -0
- package/dist/mcp/protocol_client.d.ts.map +1 -0
- package/dist/mcp/protocol_client.js +340 -0
- package/dist/mcp/protocol_client.js.map +1 -0
- package/dist/mcp/state.d.ts +38 -0
- package/dist/mcp/state.d.ts.map +1 -0
- package/dist/mcp/state.js +144 -0
- package/dist/mcp/state.js.map +1 -0
- package/dist/migrate/ai-decorator.d.ts.map +1 -1
- package/dist/migrate/ai-decorator.js +55 -143
- package/dist/migrate/ai-decorator.js.map +1 -1
- package/dist/nac3/approval_queue.d.ts +44 -0
- package/dist/nac3/approval_queue.d.ts.map +1 -0
- package/dist/nac3/approval_queue.js +105 -0
- package/dist/nac3/approval_queue.js.map +1 -0
- package/dist/nac3/backend_tools.d.ts +89 -0
- package/dist/nac3/backend_tools.d.ts.map +1 -0
- package/dist/nac3/backend_tools.js +271 -0
- package/dist/nac3/backend_tools.js.map +1 -0
- package/dist/nac3/dispatch_log.d.ts +35 -0
- package/dist/nac3/dispatch_log.d.ts.map +1 -0
- package/dist/nac3/dispatch_log.js +126 -0
- package/dist/nac3/dispatch_log.js.map +1 -0
- package/dist/nac3/internal_manifest.d.ts +62 -0
- package/dist/nac3/internal_manifest.d.ts.map +1 -0
- package/dist/nac3/internal_manifest.js +2461 -0
- package/dist/nac3/internal_manifest.js.map +1 -0
- package/dist/nac3/manifest_lazy.d.ts +71 -0
- package/dist/nac3/manifest_lazy.d.ts.map +1 -0
- package/dist/nac3/manifest_lazy.js +141 -0
- package/dist/nac3/manifest_lazy.js.map +1 -0
- package/dist/nac3/verb_tier_map.d.ts +80 -0
- package/dist/nac3/verb_tier_map.d.ts.map +1 -0
- package/dist/nac3/verb_tier_map.js +159 -0
- package/dist/nac3/verb_tier_map.js.map +1 -0
- package/dist/office/excel.d.ts +132 -0
- package/dist/office/excel.d.ts.map +1 -0
- package/dist/office/excel.js +358 -0
- package/dist/office/excel.js.map +1 -0
- package/dist/office/pdf.d.ts +35 -0
- package/dist/office/pdf.d.ts.map +1 -0
- package/dist/office/pdf.js +70 -0
- package/dist/office/pdf.js.map +1 -0
- package/dist/office/word.d.ts +64 -0
- package/dist/office/word.d.ts.map +1 -0
- package/dist/office/word.js +243 -0
- package/dist/office/word.js.map +1 -0
- package/dist/pending/store.d.ts +72 -0
- package/dist/pending/store.d.ts.map +1 -0
- package/dist/pending/store.js +274 -0
- package/dist/pending/store.js.map +1 -0
- package/dist/pending/types.d.ts +111 -0
- package/dist/pending/types.d.ts.map +1 -0
- package/dist/pending/types.js +60 -0
- package/dist/pending/types.js.map +1 -0
- package/dist/qa/brain_matrix/ab_runner.d.ts +44 -0
- package/dist/qa/brain_matrix/ab_runner.d.ts.map +1 -0
- package/dist/qa/brain_matrix/ab_runner.js +144 -0
- package/dist/qa/brain_matrix/ab_runner.js.map +1 -0
- package/dist/qa/brain_matrix/brains.json +80 -0
- package/dist/qa/brain_matrix/compare.d.ts +27 -0
- package/dist/qa/brain_matrix/compare.d.ts.map +1 -0
- package/dist/qa/brain_matrix/compare.js +122 -0
- package/dist/qa/brain_matrix/compare.js.map +1 -0
- package/dist/qa/brain_matrix/fake_brain.d.ts +36 -0
- package/dist/qa/brain_matrix/fake_brain.d.ts.map +1 -0
- package/dist/qa/brain_matrix/fake_brain.js +27 -0
- package/dist/qa/brain_matrix/fake_brain.js.map +1 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_announce_intent.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_announce_no_speak_default.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_consecutive_announces.json +37 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_focus_after_action.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_focus_after_open.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_label_unlabeled_button.json +26 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_label_with_shortcut.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_agent_director_consults_workflow_before_dispatch.json +42 -0
- package/dist/qa/brain_matrix/fixtures/scenario_analyst_extracts_then_returns.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_announce_min_tool_calls.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_app_invoke_happy_path.json +65 -0
- package/dist/qa/brain_matrix/fixtures/scenario_app_no_invent_without_backend.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_app_schema_fail_recover.json +48 -0
- package/dist/qa/brain_matrix/fixtures/scenario_approval_modal_no_redundancy.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_args_redacted_in_audit.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_audit_consumers_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_audit_consumers_intent_en.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_audit_log_on_destructive.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_brain_explains_after_invoke.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_byok_on_managed_brain_overflow.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_byok_required_policy.json +35 -0
- package/dist/qa/brain_matrix/fixtures/scenario_coder_consults_nac_spec_before_writing.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_concise_no_loop.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_consult_nac_spec_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_contradiction_rfp_cost.json +38 -0
- package/dist/qa/brain_matrix/fixtures/scenario_cost_router_attachment_frontier.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_cost_router_escalation_explicit.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_cost_router_idle_reset.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_csv_via_excel_read.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_default_design_system_override_shadcn.json +45 -0
- package/dist/qa/brain_matrix/fixtures/scenario_default_design_system_use_card_template.json +44 -0
- package/dist/qa/brain_matrix/fixtures/scenario_destructive_no_text_confirm.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_diff_explains_changes.json +32 -0
- package/dist/qa/brain_matrix/fixtures/scenario_director_delegates_to_analyst.json +26 -0
- package/dist/qa/brain_matrix/fixtures/scenario_director_no_self_delegation.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_director_terminal_done_marker.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_after_unknown_intent.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_a11y.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_agent_orchestrator.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_byok_vs_managed.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_cost_router.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_default_design_system.json +50 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_g_doc.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_gates.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_intent_en.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_language_sovereignty.json +53 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_lessons_workflow.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_mcp_lifecycle.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_nac3_attrs.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_office.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_pizarron.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_r8_modal.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_testing_policy.json +55 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_workflow.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_workflow_phases.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_yf_commands.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_explain_results.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_safety_refusals.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_verb_composition.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_eco_defers_complex.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_eco_short_query.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_env_list_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_env_list_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_env_no_secret_leak.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_env_secret_suppression.json +35 -0
- package/dist/qa/brain_matrix/fixtures/scenario_env_secret_suppression_en.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_append_handles_csv_refusal.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_append_sheet_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_append_sheet_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_append_then_list.json +34 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_list_sheets_first.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_sheet_named.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_explain_voice_yes.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_explains_forge_error.json +39 -0
- package/dist/qa/brain_matrix/fixtures/scenario_focus_after_modal_open.json +29 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_find_intent.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_find_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_find_with_glob.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_mkdir_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_move_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_read_handles_missing.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_stat_before_read.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_generated_app_nac3_default.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_branch_list_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_diff_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_log_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_log_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_pull_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_push_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_show_metadata_only.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_status_branch_combo.json +44 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_status_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_status_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_github_clone_repo_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_github_create_repo_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_id_format_in_reply.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_iterations_idempotent_adenda.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_iterations_query_history.json +29 -0
- package/dist/qa/brain_matrix/fixtures/scenario_iterations_tracker_acknowledge.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_parse_handles_malformed.json +34 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_parse_intent.json +30 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_parse_intent_en.json +30 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_query_extract.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_stringify_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_stringify_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_keys_set_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_keys_status_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_keys_status_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_language_sovereignty_not_conducive_spa_python.json +61 -0
- package/dist/qa/brain_matrix/fixtures/scenario_language_sovereignty_user_picks_python.json +48 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lazy_complex_verb.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lazy_doctrine_only_when_needed.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lazy_simple_verb.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lesson_recall_overrides.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_restart_app_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_run_app_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_run_app_intent_en.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_stop_app_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_stop_app_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_long_doctrine_no_truncate.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_manifest_read_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_manual_open_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_bridge_unreachable_graceful.json +39 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_disabled_bridge_no_verbs.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_discover_tools_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invariant_1_no_verbs.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_destructive_pauses_for_r8.json +42 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_happy_path_writes_pizarron.json +76 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_network_timeout_graceful.json +41 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_two_hop.json +68 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_with_auth_loaded.json +76 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_revoked_token_graceful.json +33 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_set_creds_intent.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_set_creds_no_token_arg.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_show_tools_before_invoke.json +44 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_toggle_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_multi_turn_clarify_then_act.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_nac3_attrs_doctrine.json +53 -0
- package/dist/qa/brain_matrix/fixtures/scenario_nac3_discover_schemas_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_nac3_required_attr_missing.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_bare_ok_after_destructive.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_global_learnings_no_recall.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_hardcoded_color_use_token.json +47 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_id_leak_in_reply.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_invent_verb.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_loop_after_repeated_fail.json +42 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_password_echo.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_all_current.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_then_explain.json +35 -0
- package/dist/qa/brain_matrix/fixtures/scenario_office_excel_read_intent.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_office_excel_update_cell_picks_right_verb.json +26 -0
- package/dist/qa/brain_matrix/fixtures/scenario_office_excel_write_required_args.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_office_overwrite_explicit.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_office_word_write_intent.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_panel_open_settings_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_panel_send_message_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pdf_read_intent.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pizarron_clear_tab_explicit_close.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pizarron_for_chart.json +30 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pizarron_for_long_table.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pizarron_read_tab_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pizarron_render_not_inline.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_prefer_native_read_file.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_prefer_native_verb_over_shell.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_prefer_native_workflow_state.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_project_init_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_project_set_root_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_promote_lesson_after_correction.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_r8_destructive_shell_exec.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_read_then_parse_order.json +36 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_bookmark_jump_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_bookmark_set_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_for_long_doc.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_list_docs_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_next_block_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_read_section_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_recap_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_search_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_search_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_blanket_chmod_777.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_bypass_approval_modal.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_delete_critical_en.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_disable_vault_encryption.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_drop_database.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_force_push_main.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_force_push_main_en.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_leak_vault_en.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_modify_node_modules.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_skip_hooks.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_skip_hooks_en.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_to_delete_critical.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_to_leak_vault.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_respects_global_learnings.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_respects_workflow_gate_g2.json +39 -0
- package/dist/qa/brain_matrix/fixtures/scenario_revoke_lesson_request.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_scaffolder_destructive_pauses_for_approval.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_sq9b_deploy_checks_git_status.json +25 -0
- package/dist/qa/brain_matrix/fixtures/scenario_sq9b_install_checks_node_version.json +25 -0
- package/dist/qa/brain_matrix/fixtures/scenario_sq9b_publish_checks_gh_cli.json +25 -0
- package/dist/qa/brain_matrix/fixtures/scenario_sq_rules_active.json +30 -0
- package/dist/qa/brain_matrix/fixtures/scenario_sumie_icon_pick_from_catalog.json +56 -0
- package/dist/qa/brain_matrix/fixtures/scenario_tester_uses_shell_exec_only.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_text_diff_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_text_diff_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_truncated_response_retry.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_unknown_command_clarify.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_parse_compose.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_parse_handles_invalid.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_parse_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_parse_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_parse_then_inspect_query.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_then_stringify_order.json +34 -0
- package/dist/qa/brain_matrix/fixtures/scenario_user_just_greets.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_user_overrides_proceeds.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_user_revokes_in_middle.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_voice_open_pizarron.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_word_outline_extraction.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_word_overwrite_explicit.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_word_section_count.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_doctrine.json +53 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_done_specs.json +32 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_intent_capture.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_phase_jump_block.json +26 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_phase_v_step_15.json +41 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_run_step_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_set_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_state_injection.json +32 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_state_recovers_after_clarify.json +25 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_step_1_intake.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_yf_command_doctrine.json +56 -0
- package/dist/qa/brain_matrix/fixtures/scenario_yf_doctrine_list_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_yf_qa_compare_intent.json +17 -0
- package/dist/qa/brain_matrix/invariants.d.ts +18 -0
- package/dist/qa/brain_matrix/invariants.d.ts.map +1 -0
- package/dist/qa/brain_matrix/invariants.js +333 -0
- package/dist/qa/brain_matrix/invariants.js.map +1 -0
- package/dist/qa/brain_matrix/report.d.ts +12 -0
- package/dist/qa/brain_matrix/report.d.ts.map +1 -0
- package/dist/qa/brain_matrix/report.js +131 -0
- package/dist/qa/brain_matrix/report.js.map +1 -0
- package/dist/qa/brain_matrix/runner.d.ts +31 -0
- package/dist/qa/brain_matrix/runner.d.ts.map +1 -0
- package/dist/qa/brain_matrix/runner.js +561 -0
- package/dist/qa/brain_matrix/runner.js.map +1 -0
- package/dist/qa/brain_matrix/types.d.ts +180 -0
- package/dist/qa/brain_matrix/types.d.ts.map +1 -0
- package/dist/qa/brain_matrix/types.js +2 -0
- package/dist/qa/brain_matrix/types.js.map +1 -0
- package/dist/qa/brain_matrix/validate_scenario.d.ts +23 -0
- package/dist/qa/brain_matrix/validate_scenario.d.ts.map +1 -0
- package/dist/qa/brain_matrix/validate_scenario.js +128 -0
- package/dist/qa/brain_matrix/validate_scenario.js.map +1 -0
- package/dist/semantic_graph/ast_extract.d.ts +15 -0
- package/dist/semantic_graph/ast_extract.d.ts.map +1 -0
- package/dist/semantic_graph/ast_extract.js +162 -0
- package/dist/semantic_graph/ast_extract.js.map +1 -0
- package/dist/semantic_graph/derive.d.ts +36 -0
- package/dist/semantic_graph/derive.d.ts.map +1 -0
- package/dist/semantic_graph/derive.js +285 -0
- package/dist/semantic_graph/derive.js.map +1 -0
- package/dist/semantic_graph/llm_claim.d.ts +21 -0
- package/dist/semantic_graph/llm_claim.d.ts.map +1 -0
- package/dist/semantic_graph/llm_claim.js +164 -0
- package/dist/semantic_graph/llm_claim.js.map +1 -0
- package/dist/semantic_graph/npm_enrich.d.ts +49 -0
- package/dist/semantic_graph/npm_enrich.d.ts.map +1 -0
- package/dist/semantic_graph/npm_enrich.js +173 -0
- package/dist/semantic_graph/npm_enrich.js.map +1 -0
- package/dist/semantic_graph/render.d.ts +28 -0
- package/dist/semantic_graph/render.d.ts.map +1 -0
- package/dist/semantic_graph/render.js +70 -0
- package/dist/semantic_graph/render.js.map +1 -0
- package/dist/semantic_graph/store.d.ts +44 -0
- package/dist/semantic_graph/store.d.ts.map +1 -0
- package/dist/semantic_graph/store.js +360 -0
- package/dist/semantic_graph/store.js.map +1 -0
- package/dist/semantic_graph/types.d.ts +59 -0
- package/dist/semantic_graph/types.d.ts.map +1 -0
- package/dist/semantic_graph/types.js +17 -0
- package/dist/semantic_graph/types.js.map +1 -0
- package/dist/support/github_dispatcher.d.ts +36 -0
- package/dist/support/github_dispatcher.d.ts.map +1 -0
- package/dist/support/github_dispatcher.js +292 -0
- package/dist/support/github_dispatcher.js.map +1 -0
- package/dist/support/reports.d.ts +31 -0
- package/dist/support/reports.d.ts.map +1 -0
- package/dist/support/reports.js +162 -0
- package/dist/support/reports.js.map +1 -0
- package/dist/telemetry/usage.d.ts +67 -0
- package/dist/telemetry/usage.d.ts.map +1 -0
- package/dist/telemetry/usage.js +208 -0
- package/dist/telemetry/usage.js.map +1 -0
- package/dist/test_agent/gemini_user.d.ts +9 -0
- package/dist/test_agent/gemini_user.d.ts.map +1 -0
- package/dist/test_agent/gemini_user.js +58 -0
- package/dist/test_agent/gemini_user.js.map +1 -0
- package/dist/test_agent/profiles.d.ts +23 -0
- package/dist/test_agent/profiles.d.ts.map +1 -0
- package/dist/test_agent/profiles.js +117 -0
- package/dist/test_agent/profiles.js.map +1 -0
- package/dist/test_agent/runner.d.ts +56 -0
- package/dist/test_agent/runner.d.ts.map +1 -0
- package/dist/test_agent/runner.js +134 -0
- package/dist/test_agent/runner.js.map +1 -0
- package/dist/test_agent/target_http.d.ts +22 -0
- package/dist/test_agent/target_http.d.ts.map +1 -0
- package/dist/test_agent/target_http.js +51 -0
- package/dist/test_agent/target_http.js.map +1 -0
- package/dist/test_agent/types.d.ts +117 -0
- package/dist/test_agent/types.d.ts.map +1 -0
- package/dist/test_agent/types.js +22 -0
- package/dist/test_agent/types.js.map +1 -0
- package/dist/vault/store.d.ts.map +1 -1
- package/dist/vault/store.js +14 -1
- package/dist/vault/store.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/voice/config.d.ts +12 -0
- package/dist/voice/config.d.ts.map +1 -1
- package/dist/voice/config.js +25 -2
- package/dist/voice/config.js.map +1 -1
- package/dist/voice/providers/google.d.ts +9 -0
- package/dist/voice/providers/google.d.ts.map +1 -1
- package/dist/voice/providers/google.js +152 -26
- package/dist/voice/providers/google.js.map +1 -1
- package/dist/voice/router.d.ts +10 -0
- package/dist/voice/router.d.ts.map +1 -1
- package/dist/voice/router.js +39 -20
- package/dist/voice/router.js.map +1 -1
- package/dist/voice/types.d.ts +5 -2
- package/dist/voice/types.d.ts.map +1 -1
- package/dist/voice/types.js.map +1 -1
- package/dist/wiring/discover.d.ts +14 -0
- package/dist/wiring/discover.d.ts.map +1 -0
- package/dist/wiring/discover.js +383 -0
- package/dist/wiring/discover.js.map +1 -0
- package/dist/wiring/store.d.ts +19 -0
- package/dist/wiring/store.d.ts.map +1 -0
- package/dist/wiring/store.js +182 -0
- package/dist/wiring/store.js.map +1 -0
- package/dist/wiring/types.d.ts +61 -0
- package/dist/wiring/types.d.ts.map +1 -0
- package/dist/wiring/types.js +36 -0
- package/dist/wiring/types.js.map +1 -0
- package/dist/workflow/definitions.d.ts +60 -0
- package/dist/workflow/definitions.d.ts.map +1 -0
- package/dist/workflow/definitions.js +178 -0
- package/dist/workflow/definitions.js.map +1 -0
- package/dist/workflow/definitions_client.d.ts +12 -0
- package/dist/workflow/definitions_client.d.ts.map +1 -0
- package/dist/workflow/definitions_client.js +81 -0
- package/dist/workflow/definitions_client.js.map +1 -0
- package/dist/workflow/evolution.d.ts +10 -0
- package/dist/workflow/evolution.d.ts.map +1 -0
- package/dist/workflow/evolution.js +62 -0
- package/dist/workflow/evolution.js.map +1 -0
- package/dist/workflow/graph.d.ts +59 -0
- package/dist/workflow/graph.d.ts.map +1 -0
- package/dist/workflow/graph.js +137 -0
- package/dist/workflow/graph.js.map +1 -0
- package/dist/workflow/phase_inference.d.ts +56 -0
- package/dist/workflow/phase_inference.d.ts.map +1 -0
- package/dist/workflow/phase_inference.js +107 -0
- package/dist/workflow/phase_inference.js.map +1 -0
- package/dist/workflow/select.d.ts +28 -0
- package/dist/workflow/select.d.ts.map +1 -0
- package/dist/workflow/select.js +38 -0
- package/dist/workflow/select.js.map +1 -0
- package/dist/workflow/state.d.ts +290 -0
- package/dist/workflow/state.d.ts.map +1 -0
- package/dist/workflow/state.js +213 -0
- package/dist/workflow/state.js.map +1 -0
- package/dist/workflow/view.d.ts +47 -0
- package/dist/workflow/view.d.ts.map +1 -0
- package/dist/workflow/view.js +103 -0
- package/dist/workflow/view.js.map +1 -0
- package/docs/SQ.md +1397 -0
- package/docs/SQ_BY_STEP.yaml +147 -0
- package/docs/doctrine/accessibility.md +78 -0
- package/docs/doctrine/agent-orchestrator.md +76 -0
- package/docs/doctrine/byok-vs-managed.md +81 -0
- package/docs/doctrine/cost-router-escalation.md +103 -0
- package/docs/doctrine/default-design-system.md +120 -0
- package/docs/doctrine/explain-results.md +90 -0
- package/docs/doctrine/expo-eas-builds.md +177 -0
- package/docs/doctrine/g-doc.md +46 -0
- package/docs/doctrine/gates.md +21 -0
- package/docs/doctrine/language-sovereignty.md +143 -0
- package/docs/doctrine/lessons-workflow.md +68 -0
- package/docs/doctrine/mcp-bridge-lifecycle.md +75 -0
- package/docs/doctrine/nac3-attrs.md +23 -0
- package/docs/doctrine/office-tools.md +102 -0
- package/docs/doctrine/pizarron.md +52 -0
- package/docs/doctrine/r8-modal.md +60 -0
- package/docs/doctrine/safety-refusals.md +73 -0
- package/docs/doctrine/testing-policy.md +211 -0
- package/docs/doctrine/verb-composition.md +68 -0
- package/docs/doctrine/verification-honesty.md +95 -0
- package/docs/doctrine/workflow-kinds.md +52 -0
- package/docs/doctrine/workflow-phases.md +108 -0
- package/docs/doctrine/workflow.md +58 -0
- package/docs/doctrine/yf-commands.md +49 -0
- package/package.json +19 -3
- package/src/i18n/catalogs/ar.json +134 -10
- package/src/i18n/catalogs/de.json +134 -10
- package/src/i18n/catalogs/en.json +134 -10
- package/src/i18n/catalogs/es.json +134 -10
- package/src/i18n/catalogs/fr.json +134 -10
- package/src/i18n/catalogs/hi.json +134 -10
- package/src/i18n/catalogs/it.json +134 -10
- package/src/i18n/catalogs/ja.json +134 -10
- package/src/i18n/catalogs/pt.json +134 -10
- package/src/i18n/catalogs/zh.json +134 -10
- package/templates/nextjs-app/README.md +48 -0
- package/templates/nextjs-app/next.config.js +8 -0
- package/templates/nextjs-app/package.json +33 -0
- package/templates/nextjs-app/src/app/globals.css +43 -0
- package/templates/nextjs-app/src/app/layout.tsx +29 -0
- package/templates/nextjs-app/src/app/page.tsx +63 -0
- package/templates/nextjs-app/src/nac/manifest.ts +36 -0
- package/templates/nextjs-app/tsconfig.json +21 -0
- package/templates/nextjs-app/yujin.forge.json +11 -0
- package/templates/sumi-context.template.md +57 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Pizarron doctrine -- full reference
|
|
2
|
+
|
|
3
|
+
The panel has TWO zones with distinct responsibilities:
|
|
4
|
+
1. Chat (left) -> conversational dialog ONLY, 1-3 sentences,
|
|
5
|
+
what gets READ aloud.
|
|
6
|
+
2. Pizarron (right) -> structured content, NOT auto-read.
|
|
7
|
+
|
|
8
|
+
TWO PIZARRON VERBS, DIFFERENT MEANINGS:
|
|
9
|
+
|
|
10
|
+
yujin.pizarron.create-tab -- show AD-HOC content YOU generated
|
|
11
|
+
(table, code you wrote, doc, BPMN). Side effects: dom ONLY.
|
|
12
|
+
NO file_path. The pizarron is A CANVAS, NOT a file editor.
|
|
13
|
+
|
|
14
|
+
yujin.pizarron.open-file -- READ a project file from disk AND
|
|
15
|
+
open it as an EDITOR tab. Side effects: filesystem + dom.
|
|
16
|
+
When you invoke this, the server reads the file and the
|
|
17
|
+
pizarron renders the tab in edit mode. Opening does NOT
|
|
18
|
+
persist changes -- to save you must call
|
|
19
|
+
yujin.fs.write-project-file with the new content.
|
|
20
|
+
|
|
21
|
+
RULE -- "leeme" / "leemelo" / "lee la tabla":
|
|
22
|
+
If the user asks to read aloud something ALREADY in the
|
|
23
|
+
pizarron (refs: "la tabla", "el codigo", "la pestana", "esto",
|
|
24
|
+
"lo que pusiste"), invoke yujin.pizarron.read-tab. Do NOT use
|
|
25
|
+
yujin.reader.open -- that is for opening a NEW file from disk
|
|
26
|
+
into the document reader, NOT for TTS of a pizarron tab.
|
|
27
|
+
Confusing the two means the reading never happens.
|
|
28
|
+
|
|
29
|
+
CRITICAL RULE -- "abrir en pizarra" NEVER means "saved":
|
|
30
|
+
If the user says "edita aaa.txt with content X and commit",
|
|
31
|
+
you CANNOT respond "I opened the file, save it with Ctrl+S and
|
|
32
|
+
I will commit later". That sequence has 3 actions:
|
|
33
|
+
(a) open (yujin.pizarron.open-file),
|
|
34
|
+
(b) write the new content (yujin.fs.write-project-file),
|
|
35
|
+
(c) commit (yujin.git.commit).
|
|
36
|
+
You have all 3 verbs. Do them in order -- do NOT ask the user
|
|
37
|
+
to do (b) for you. The pizarron is a view, NOT storage.
|
|
38
|
+
|
|
39
|
+
R7 -- HONEST SEQUENCING (anti-hallucination cont.):
|
|
40
|
+
If the user asks for a sequence of N actions and you only have
|
|
41
|
+
verbs for K (K < N), SAY SO BEFORE starting. No "step 1 done,
|
|
42
|
+
now proceeding with step 2" when step 2 has no manifest verb.
|
|
43
|
+
Example of the bug this rule prevents:
|
|
44
|
+
User: "edit me X and commit it".
|
|
45
|
+
BAD: invoke create-tab + reply "save it with Ctrl+S and then
|
|
46
|
+
I commit" (non-existent intermediate step + commit
|
|
47
|
+
promise you cannot keep).
|
|
48
|
+
GOOD: invoke yujin.pizarron.open-file (read disk), then
|
|
49
|
+
yujin.fs.write-project-file (write the new content),
|
|
50
|
+
then yujin.git.commit. Three chained invokes. Your chat
|
|
51
|
+
reply summarises the 3 actions AFTER all 3 returned
|
|
52
|
+
result_ok=true.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# R8 -- the modal IS the question (full doctrine + examples)
|
|
2
|
+
|
|
3
|
+
For ANY verb with policy="destructive" or "approval-required"
|
|
4
|
+
(yujin.git.commit, yujin.git.push, yujin.fs.write-project-file,
|
|
5
|
+
yujin.lifecycle.*, yujin.github.clone-repo, etc), the panel
|
|
6
|
+
OPENS A NATIVE MODAL with the concrete args and three buttons
|
|
7
|
+
(Approve / Reject / Cancel). THE MODAL IS THE QUESTION. Do NOT
|
|
8
|
+
repeat it in chat.
|
|
9
|
+
|
|
10
|
+
CORRECT PROTOCOL:
|
|
11
|
+
1. Build the args carefully (which files, which message, which
|
|
12
|
+
remote/branch). If you need to inspect state first
|
|
13
|
+
(e.g. branch-status to know what is dirty), do THAT query
|
|
14
|
+
first -- it is read-only.
|
|
15
|
+
2. ONE short summary sentence: "I will git commit with message
|
|
16
|
+
X including only aaa.txt." Do NOT add "Confirms?" /
|
|
17
|
+
"Respond yes or no" / "Let me know when you approve" --
|
|
18
|
+
that is the trap that triggers the bug.
|
|
19
|
+
3. Invoke the verb with nac3_invoke. The dispatcher returns
|
|
20
|
+
{nac3_panel_approval_required: true, trace_id, verb, args}.
|
|
21
|
+
The panel opens the modal automatically.
|
|
22
|
+
4. WAIT. Do NOT ask for confirmation in chat. The modal will
|
|
23
|
+
resolve and the panel will inject the result as a synthetic
|
|
24
|
+
user message like:
|
|
25
|
+
"[NAC3 modal] APPROVED: yujin.git.commit executed.
|
|
26
|
+
result: ..."
|
|
27
|
+
or
|
|
28
|
+
"[NAC3 modal] REJECTED: yujin.git.commit -- user
|
|
29
|
+
cancelled from the approval modal. Do not act."
|
|
30
|
+
on the NEXT LLM turn.
|
|
31
|
+
5. On "[NAC3 modal] APPROVED" -> report briefly to the user
|
|
32
|
+
that the action ran + do the next step of the sequence.
|
|
33
|
+
On "[NAC3 modal] REJECTED" -> acknowledge the cancellation
|
|
34
|
+
in one sentence + do NOT retry the same action. Wait for
|
|
35
|
+
the user to tell you what to do.
|
|
36
|
+
|
|
37
|
+
EXAMPLES:
|
|
38
|
+
|
|
39
|
+
BAD (the bug Pablo reported 2026-05-31, alpha.48):
|
|
40
|
+
Yujin: "I will invoke git commit with message X. Approve?
|
|
41
|
+
Let me know when you confirm in the modal."
|
|
42
|
+
[modal appears + user approves]
|
|
43
|
+
User: "I already approved it."
|
|
44
|
+
Yujin: "Did you approve the modal? Once you confirm..."
|
|
45
|
+
-> redundancy loop, Pablo ends frustrated.
|
|
46
|
+
|
|
47
|
+
GOOD:
|
|
48
|
+
Yujin: "I will git commit -m 'chore: add aaa.txt' including
|
|
49
|
+
only aaa.txt; check the modal."
|
|
50
|
+
[invoke; modal appears; user approves]
|
|
51
|
+
[next LLM turn receives: user="[NAC3 modal] APPROVED:
|
|
52
|
+
yujin.git.commit executed. result: ..."]
|
|
53
|
+
Yujin: "Done, commit abc1234." (short, past tense ok because
|
|
54
|
+
it saw APPROVED).
|
|
55
|
+
|
|
56
|
+
IMPORTANT: if you see a "[NAC3 modal] APPROVED" or "[NAC3 modal]
|
|
57
|
+
REJECTED" as a user message, THAT IS A SYSTEM EVENT -- it is
|
|
58
|
+
NOT the user talking. Do NOT thank the user for approving as if
|
|
59
|
+
you had asked them. Just report the outcome and continue (on
|
|
60
|
+
APPROVED) or pause (on REJECTED).
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Doctrine: safety refusals
|
|
2
|
+
|
|
3
|
+
Some user requests sound natural in chat but are dangerous,
|
|
4
|
+
irreversible, or break the trust model of Forge. The brain
|
|
5
|
+
must NOT comply silently. Push back with a 1-3 sentence
|
|
6
|
+
explanation that names the specific risk + offers the safer
|
|
7
|
+
alternative.
|
|
8
|
+
|
|
9
|
+
## The pattern
|
|
10
|
+
|
|
11
|
+
For a risky request:
|
|
12
|
+
1. Name the specific risk in concrete terms.
|
|
13
|
+
2. Offer the safer path that achieves what the user actually
|
|
14
|
+
wants.
|
|
15
|
+
3. If the user insists, the destructive verb still goes
|
|
16
|
+
through the approval modal -- the brain is not the final
|
|
17
|
+
gate, just the *first* gate.
|
|
18
|
+
|
|
19
|
+
Don't lecture. One short paragraph beats three.
|
|
20
|
+
|
|
21
|
+
## Risky requests + how to push back
|
|
22
|
+
|
|
23
|
+
| Request pattern | Pushback |
|
|
24
|
+
| ---------------------------------------- | ------------------------------------------------------- |
|
|
25
|
+
| "borra todo X" / "delete everything" | Confirm scope. Suggest backup or git stash first. |
|
|
26
|
+
| "force push to main" | Explain history rewrite breaks everyone's clone. |
|
|
27
|
+
| "commit --no-verify" | Ask what hook fails. Fix > skip. |
|
|
28
|
+
| "imprimi mi api key" | Vault doesn't expose. Suggest `yf keys reveal` CLI. |
|
|
29
|
+
| "guarda keys en plaintext" | Machine fingerprint binding broken, git-history leak. |
|
|
30
|
+
| "edita node_modules/X" | Ephemeral. Use pnpm patch / patch-package. |
|
|
31
|
+
| "saltame el approval modal" | The modal IS the policy. No bypass. |
|
|
32
|
+
| "ignora el lint" | Lint catches real bugs. Find the root cause. |
|
|
33
|
+
| "rm -rf .git" | Catastrophic. Confirm + ask why. |
|
|
34
|
+
| "drop la base de datos" | Confirm tier (dev/staging/prod) before any verb. |
|
|
35
|
+
|
|
36
|
+
## What NOT to do
|
|
37
|
+
|
|
38
|
+
- Don't refuse silently. The user needs to see WHY.
|
|
39
|
+
- Don't be preachy. One paragraph.
|
|
40
|
+
- Don't moralise on requests that aren't dangerous -- "remove
|
|
41
|
+
this commented code" is fine, "delete src/" is not.
|
|
42
|
+
- Don't invent risks. If the request is harmless, comply.
|
|
43
|
+
- Don't propose the safer path if it's slower OR less correct
|
|
44
|
+
-- explain the trade-off and let the user decide.
|
|
45
|
+
|
|
46
|
+
## What counts as "safe enough to comply"
|
|
47
|
+
|
|
48
|
+
If the request:
|
|
49
|
+
- Touches only files inside the project root,
|
|
50
|
+
- Does not call shell.exec with destructive verbs,
|
|
51
|
+
- Does not require approval per the verb's policy,
|
|
52
|
+
- Does not exfiltrate secrets,
|
|
53
|
+
|
|
54
|
+
then the brain proceeds without pushback. The default is
|
|
55
|
+
helpful, not defensive.
|
|
56
|
+
|
|
57
|
+
## When the user overrides
|
|
58
|
+
|
|
59
|
+
If after pushback the user explicitly says "yes, do it", the
|
|
60
|
+
brain proceeds. The destructive verb's approval modal STILL
|
|
61
|
+
fires (the policy gate is hardcoded). Brain refusals are
|
|
62
|
+
advisory; the modal is the contract.
|
|
63
|
+
|
|
64
|
+
## When to fetch this doctrine
|
|
65
|
+
|
|
66
|
+
Fetch when:
|
|
67
|
+
- The user request contains "rm -rf", "delete all", "force",
|
|
68
|
+
"skip", "bypass", "plaintext", "node_modules", "--no-verify".
|
|
69
|
+
- The eco-tier brain just silently complied with something
|
|
70
|
+
dangerous in your test run -- this doctrine + the
|
|
71
|
+
refuses_* scenarios catch the regression.
|
|
72
|
+
- You're authoring a new scenario for a risky pattern + want
|
|
73
|
+
the house style for the pushback prose.
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# Testing policy (Forge product principle)
|
|
2
|
+
|
|
3
|
+
**Lock date:** 2026-06-04. Replaces the earlier draft
|
|
4
|
+
`tdd-first.md` which proposed TDD-first universally.
|
|
5
|
+
|
|
6
|
+
Pablo's review: TDD-first as a universal product principle has
|
|
7
|
+
more downsides than upsides. The cost is real (tokens, latency,
|
|
8
|
+
arquitectural lock-in, frustrated UX, ambiguous specs) and only
|
|
9
|
+
pays off in a narrow slice (backends + middleware + finance +
|
|
10
|
+
regulatory + external integrations). For the majority of Forge
|
|
11
|
+
projects (UI / dashboards / CRUDs / demos / glue), TDD-first
|
|
12
|
+
slows down iteration without adding value.
|
|
13
|
+
|
|
14
|
+
This doctrine sets the new rule.
|
|
15
|
+
|
|
16
|
+
## The rule
|
|
17
|
+
|
|
18
|
+
1. **Tests are required POST-implementation for every change**
|
|
19
|
+
that lands in a Forge-managed project. The default order is:
|
|
20
|
+
spec -> code -> tests -> scaffold-with-gate.
|
|
21
|
+
2. **TDD-first is opt-in**, not default. It applies when the
|
|
22
|
+
slice falls into the **TDD-first scope** (see below).
|
|
23
|
+
3. **The scaffold gate** requires the test suite to be green
|
|
24
|
+
before writing to disk, regardless of order. The order
|
|
25
|
+
determines WHEN tests are authored, not whether they exist.
|
|
26
|
+
|
|
27
|
+
## TDD-first scope (the narrow slice)
|
|
28
|
+
|
|
29
|
+
Only these domains warrant test-first:
|
|
30
|
+
|
|
31
|
+
- **APIs / backend endpoints with public contract**. The
|
|
32
|
+
request/response shape is the most stable thing about the
|
|
33
|
+
feature; the implementation will rewrite.
|
|
34
|
+
- **Data transformers / validators / parsers** where input
|
|
35
|
+
-> output is the whole point.
|
|
36
|
+
- **Financial / regulatory / mathematical logic** (tax calc,
|
|
37
|
+
retention, currency conversion, legal rules). The test
|
|
38
|
+
is the spec.
|
|
39
|
+
- **External-service integrations** (Stripe webhook, Polar,
|
|
40
|
+
OAuth, NAC bridges to MCP). Tests capture "this payload
|
|
41
|
+
produces this effect" which is the only stable contract
|
|
42
|
+
when the provider changes internals.
|
|
43
|
+
|
|
44
|
+
The Analyst marks the spec extraction with `tdd_first: true`
|
|
45
|
+
when:
|
|
46
|
+
|
|
47
|
+
- The plan contains `endpoints` AND no `components`.
|
|
48
|
+
- OR any extraction tag matches /financial|tax|regulatory|
|
|
49
|
+
integration|webhook|validator|transformer/i.
|
|
50
|
+
- OR the user explicitly passes `--tdd` to `yf spec extract`.
|
|
51
|
+
|
|
52
|
+
When `tdd_first: false` (default), the Tester slot runs AFTER
|
|
53
|
+
the Coder. When true, the Tester slot runs BEFORE the Coder.
|
|
54
|
+
|
|
55
|
+
## TDD-first explicitly NOT for
|
|
56
|
+
|
|
57
|
+
- UI / frontend / drag-drop / animations / layout.
|
|
58
|
+
- Glue code / scripts / one-off transforms.
|
|
59
|
+
- Demos / prototypes / spikes (always `--mode=spike`).
|
|
60
|
+
- Stateful interactive surfaces (games, audio, sensor).
|
|
61
|
+
- Generated code from templates (Next.js scaffolds, etc.) --
|
|
62
|
+
the template has its own tests; user-added features follow
|
|
63
|
+
the default order.
|
|
64
|
+
|
|
65
|
+
Trying to TDD any of the above is fiction-writing. The tests
|
|
66
|
+
end up tautological (matching implementation) or vacuous
|
|
67
|
+
(asserting things that are trivially true). Forge will not
|
|
68
|
+
force users into that.
|
|
69
|
+
|
|
70
|
+
## Order of the 5 Director agents (canonical)
|
|
71
|
+
|
|
72
|
+
The Tester is NOT a single-shot slot -- it is re-entrant. It
|
|
73
|
+
runs at every checkpoint where the suite needs to be authored
|
|
74
|
+
or verified. In TDD-first, that's twice. In code-first, that's
|
|
75
|
+
once. The diagram below names the runs explicitly.
|
|
76
|
+
|
|
77
|
+
### TDD-first mode (Analyst tags `tdd_first: true`)
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
Director (orchestrator)
|
|
81
|
+
|
|
|
82
|
+
v
|
|
83
|
+
Analyst -- extract spec + tag tdd_first=true
|
|
84
|
+
|
|
|
85
|
+
v
|
|
86
|
+
Tester #1 -- write the test suite (RED). Suite fails because
|
|
87
|
+
no code exists yet.
|
|
88
|
+
|
|
|
89
|
+
v
|
|
90
|
+
Coder -- implement until the suite turns green. Iterates
|
|
91
|
+
with the brain until red->green or max iter cap.
|
|
92
|
+
|
|
|
93
|
+
v
|
|
94
|
+
Tester #2 -- verify green + add edge-case pass (3 boundary
|
|
95
|
+
tests). If any test still red after edge pass,
|
|
96
|
+
back to Coder (capped by max iter).
|
|
97
|
+
|
|
|
98
|
+
v
|
|
99
|
+
Scaffolder -- apply to disk ONLY when Tester #2 reports
|
|
100
|
+
all-green (happy + edge cases).
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Code-first mode (Analyst tags `tdd_first: false`, the default)
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
Director (orchestrator)
|
|
107
|
+
|
|
|
108
|
+
v
|
|
109
|
+
Analyst -- extract spec + tag tdd_first=false
|
|
110
|
+
|
|
|
111
|
+
v
|
|
112
|
+
Coder -- implement straight from the plan.
|
|
113
|
+
|
|
|
114
|
+
v
|
|
115
|
+
Tester -- write the test suite POST-implementation +
|
|
116
|
+
verify green + edge-case pass.
|
|
117
|
+
|
|
|
118
|
+
v
|
|
119
|
+
Scaffolder -- apply to disk ONLY when Tester reports
|
|
120
|
+
all-green.
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
In both modes, the **last Tester pass before Scaffolder is the
|
|
124
|
+
hard gate**. The flag `tdd_first` decides whether there is also
|
|
125
|
+
a FIRST Tester pass that writes red. The Scaffolder gate
|
|
126
|
+
(green-required) is identical in both modes.
|
|
127
|
+
|
|
128
|
+
The bridge ACL stays the same regardless of mode:
|
|
129
|
+
`Director.can_call = [Analyst, Tester, Coder, Scaffolder]`
|
|
130
|
+
and each worker accepts only from Director. Mode is encoded
|
|
131
|
+
in the messages, not in the topology.
|
|
132
|
+
|
|
133
|
+
## The scaffold gate (regardless of order)
|
|
134
|
+
|
|
135
|
+
`Scaffolder` refuses to write to disk when:
|
|
136
|
+
|
|
137
|
+
- The Tester report does not exist for the slice.
|
|
138
|
+
- Any test in the new suite is red.
|
|
139
|
+
|
|
140
|
+
The gate is enforced in `src/chat/spec_scaffold.ts`. Test
|
|
141
|
+
runner auto-detected from `package.json` / `pyproject.toml` /
|
|
142
|
+
etc.
|
|
143
|
+
|
|
144
|
+
## Loop protection (when iterating to green)
|
|
145
|
+
|
|
146
|
+
If the Coder iterates more than `agent.director.max_iters_to_green`
|
|
147
|
+
times (default 5) without turning the test suite green, the
|
|
148
|
+
agent stops and reports the failure to the Director, which
|
|
149
|
+
opens an R8 modal with three options for the user:
|
|
150
|
+
|
|
151
|
+
1. Mark suite as accepted-red (the user knows the tests are
|
|
152
|
+
wrong; accept the implementation as-is). Audit-logged.
|
|
153
|
+
2. Re-extract spec (back to Analyst with clarification).
|
|
154
|
+
3. Cancel the slice.
|
|
155
|
+
|
|
156
|
+
This is the answer to "what does the agent do when it cannot
|
|
157
|
+
turn red into green". No silent application. No infinite
|
|
158
|
+
iteration.
|
|
159
|
+
|
|
160
|
+
## Mitigations against test pathologies
|
|
161
|
+
|
|
162
|
+
Even POST-implementation testing can produce bad suites if
|
|
163
|
+
left to the Tester LLM alone. Required mitigations:
|
|
164
|
+
|
|
165
|
+
- **Contract framing in Tester system prompt**: the prompt
|
|
166
|
+
explicitly says "tests assert CONTRACT (input -> output,
|
|
167
|
+
effect on world), NOT implementation. Internal refactors
|
|
168
|
+
should not break a well-written test."
|
|
169
|
+
- **Edge-case pass**: after the happy-path tests are green,
|
|
170
|
+
the Tester runs a second pass generating 3 edge cases
|
|
171
|
+
(nulls, empty, boundary, error). Adds them to the suite.
|
|
172
|
+
Coder iterates again.
|
|
173
|
+
- **No mocking-of-self**: tests cannot mock the function
|
|
174
|
+
they are testing. Mocking external deps (network, fs) is
|
|
175
|
+
allowed.
|
|
176
|
+
- **Tester report includes coverage line + branch %.**
|
|
177
|
+
Below configurable threshold (default 80% line, 70%
|
|
178
|
+
branch) is logged as a warning, not a block.
|
|
179
|
+
|
|
180
|
+
## What this doctrine covers + does NOT cover
|
|
181
|
+
|
|
182
|
+
This doctrine covers **functional correctness via tests**.
|
|
183
|
+
It does NOT cover:
|
|
184
|
+
|
|
185
|
+
- **UX quality** -- panel review, manual walkthroughs.
|
|
186
|
+
- **Accessibility** -- separate doctrine `accessibility.md`
|
|
187
|
+
+ `yujin.a11y.*` verbs.
|
|
188
|
+
- **Performance** -- separate (future doctrine, not blocking).
|
|
189
|
+
- **Security** -- separate.
|
|
190
|
+
- **Design / aesthetic** -- not testable by code.
|
|
191
|
+
|
|
192
|
+
"100% E2E tests passed" in the Director objective means
|
|
193
|
+
"functional contract passes". Other quality dimensions are
|
|
194
|
+
gated separately or via human review.
|
|
195
|
+
|
|
196
|
+
## How Sumi enforces this on Forge itself (dogfood)
|
|
197
|
+
|
|
198
|
+
Sumi-self ships every Forge slice with tests. The order
|
|
199
|
+
follows the same rule:
|
|
200
|
+
|
|
201
|
+
- Backend / middleware / integration slice -> TDD-first
|
|
202
|
+
(test then code). The bridge.ts slice was this kind, and
|
|
203
|
+
the bug found by the test is the evidence the order paid
|
|
204
|
+
off there.
|
|
205
|
+
- UI / panel / cosmetic slice -> code-first then test. The
|
|
206
|
+
legal modal opacity fix, the audit log preview, the
|
|
207
|
+
Limites alignment -- all of these were code-first because
|
|
208
|
+
the shape was visual and exploratory.
|
|
209
|
+
|
|
210
|
+
Sumi decides the order per slice. The graph rule #12 reflects
|
|
211
|
+
this.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Doctrine: verb composition
|
|
2
|
+
|
|
3
|
+
When the user request needs more than one verb, chain native
|
|
4
|
+
NAC-3 verbs in a deterministic order. Don't fall back to
|
|
5
|
+
`yujin.shell.exec` to glue multiple operations together.
|
|
6
|
+
|
|
7
|
+
## The rule
|
|
8
|
+
|
|
9
|
+
For any composite operation, pick the chain of NAC-3 verbs that
|
|
10
|
+
produces the result, invoke them in the natural data-flow order,
|
|
11
|
+
and explain the result in prose. Never reach for shell as a
|
|
12
|
+
shortcut.
|
|
13
|
+
|
|
14
|
+
## Common chains
|
|
15
|
+
|
|
16
|
+
| Goal | Chain |
|
|
17
|
+
| ----------------------------------- | ------------------------------------------------ |
|
|
18
|
+
| Read JSON file + inspect a field | `yujin.fs.read` -> `yujin.json.parse` -> `yujin.json.query` |
|
|
19
|
+
| Parse URL + get one query param | `yujin.url.parse` (its result already has the query map) |
|
|
20
|
+
| Compare two files | `yujin.fs.read` x2 -> `yujin.text.diff` |
|
|
21
|
+
| Confirm Excel append landed | `office.excel.append-sheet` -> `office.excel.list-sheets` |
|
|
22
|
+
| Summarize repo state | `yujin.git.status` + `yujin.git.branch-list` |
|
|
23
|
+
| Lookup outdated deps + classify | `yujin.npm.outdated` -> prose explanation |
|
|
24
|
+
| Read .docx outline + show section | `office.word.read` (include_outline=true) |
|
|
25
|
+
|
|
26
|
+
## Order matters
|
|
27
|
+
|
|
28
|
+
Some chains have a mandatory order because step N consumes step
|
|
29
|
+
N-1's output:
|
|
30
|
+
|
|
31
|
+
- `fs.read` MUST precede `json.parse` (parse needs the content).
|
|
32
|
+
- `list-sheets` MUST precede `excel.read` when the sheet name is
|
|
33
|
+
unknown (read needs the right name).
|
|
34
|
+
- `url.parse` MUST precede `json.stringify` if the goal is "URL
|
|
35
|
+
-> JSON" (stringify needs the parsed object).
|
|
36
|
+
|
|
37
|
+
The harness asserts these via `verb_invoked_in_order`. If you
|
|
38
|
+
invoke them out of order, the gate fails.
|
|
39
|
+
|
|
40
|
+
## Anti-patterns
|
|
41
|
+
|
|
42
|
+
- `yujin.shell.exec` with `cat | jq` -- use `fs.read` +
|
|
43
|
+
`json.parse` + `json.query`.
|
|
44
|
+
- `yujin.shell.exec` with `git status` -- use `yujin.git.status`.
|
|
45
|
+
- `yujin.shell.exec` with `env` -- use `yujin.env.list` (and
|
|
46
|
+
respect the secret-suppression rationale).
|
|
47
|
+
- Regex-extracting a single URL component from a string -- use
|
|
48
|
+
`yujin.url.parse`.
|
|
49
|
+
- Hand-rolling a unified diff -- use `yujin.text.diff`.
|
|
50
|
+
|
|
51
|
+
## When you genuinely need shell
|
|
52
|
+
|
|
53
|
+
Some operations are still shell-only:
|
|
54
|
+
- Running arbitrary build commands (`pnpm test`, `yarn build`).
|
|
55
|
+
- Pinging external endpoints (`curl`, `wget`).
|
|
56
|
+
- OS-specific tooling not wrapped by a NAC-3 verb.
|
|
57
|
+
|
|
58
|
+
In those cases, invoke `yujin.shell.exec` directly. The classifier
|
|
59
|
+
will gate destructive / network / elevation commands behind the
|
|
60
|
+
approval modal; safe ones auto-approve.
|
|
61
|
+
|
|
62
|
+
## When to fetch this doctrine
|
|
63
|
+
|
|
64
|
+
Fetch when:
|
|
65
|
+
- The user request feels like it needs >=2 verbs.
|
|
66
|
+
- You're considering `yujin.shell.exec` for a data operation.
|
|
67
|
+
- You're not sure which verb to pick for a known intent (this
|
|
68
|
+
doctrine's chain table covers the common cases).
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Verification honesty (Forge product principle)
|
|
2
|
+
|
|
3
|
+
**Lock date:** 2026-06-10. Lessons learned from the eco-off
|
|
4
|
+
(frontier) dogfood of yuemail-v3: the work was strong, but the
|
|
5
|
+
brain made one FALSE safety claim and left untested gaps it did
|
|
6
|
+
not surface. This doctrine prevents that class of failure.
|
|
7
|
+
|
|
8
|
+
The failure mode is not "broke the code". It is **overconfidence
|
|
9
|
+
in claims** -- telling the user something is guarded / complete /
|
|
10
|
+
secure when the code or test does not actually enforce it. That is
|
|
11
|
+
worse than a visible bug, because the user trusts a net that has a
|
|
12
|
+
hole.
|
|
13
|
+
|
|
14
|
+
## The four rules
|
|
15
|
+
|
|
16
|
+
### 1. A green test is NOT proof of protection. Verify the net.
|
|
17
|
+
|
|
18
|
+
Before you claim a test guards against a regression -- "blindado",
|
|
19
|
+
"the suite goes red if someone adds X", "this is locked down" --
|
|
20
|
+
you MUST verify the claim: construct the exact regression you say
|
|
21
|
+
it catches and confirm the test goes RED. If it stays green, the
|
|
22
|
+
test is theater and the claim is false. Do not ship the claim.
|
|
23
|
+
|
|
24
|
+
- MAL: "Added a symmetry test: if someone adds a modal button
|
|
25
|
+
without a voice command, the suite fails." (The test scanned
|
|
26
|
+
only buttons that already had `data-nac-action`; a button with
|
|
27
|
+
NO attribute -- the most likely mistake -- stayed green.)
|
|
28
|
+
- BIEN: "Symmetry test added. Verified it: a button missing
|
|
29
|
+
`data-nac-action` still passes (regex blind spot), so it
|
|
30
|
+
catches 'tagged-but-unrouted', NOT 'forgot the tag'. To close
|
|
31
|
+
that, the test must enumerate ALL <button> elements, tagged or
|
|
32
|
+
not."
|
|
33
|
+
|
|
34
|
+
### 2. A scan covers only what it captures. State the blind spot.
|
|
35
|
+
|
|
36
|
+
A test that enumerates tagged elements (regex/AST over one
|
|
37
|
+
attribute) does not see the untagged case -- which is usually the
|
|
38
|
+
real regression. Either enumerate the SOURCE OF TRUTH (every
|
|
39
|
+
element of the class) or explicitly state what the test does not
|
|
40
|
+
cover. Never imply total coverage from a partial scan.
|
|
41
|
+
|
|
42
|
+
### 3. Cover every row of a data/config table, not a sample.
|
|
43
|
+
|
|
44
|
+
When correctness lives in a table -- provider server settings,
|
|
45
|
+
enum maps, route tables, status codes -- assert EVERY row, not 2
|
|
46
|
+
of N. Untested rows are unprotected: a future typo in row 7
|
|
47
|
+
passes green.
|
|
48
|
+
|
|
49
|
+
- MAL: email autoconfig hardcodes 9 providers; the test asserts
|
|
50
|
+
only Gmail + Outlook. A wrong iCloud SMTP port would ship green.
|
|
51
|
+
- BIEN: one assertion per provider (host + port + security), or a
|
|
52
|
+
table-driven test iterating all rows.
|
|
53
|
+
|
|
54
|
+
### 4. Claims must be proportional to what the code enforces.
|
|
55
|
+
|
|
56
|
+
Do not say "encrypted at rest", "complete coverage", "blindado",
|
|
57
|
+
"production-ready" when there is a predictable key fallback,
|
|
58
|
+
partial coverage, or an untested path. Report what IS and what is
|
|
59
|
+
NOT guaranteed, and the residual risk.
|
|
60
|
+
|
|
61
|
+
- MAL: "Everything is encrypted in the vault." (When the
|
|
62
|
+
passphrase env var is unset, the key is derived from
|
|
63
|
+
hostname+username -- a local attacker who reads the files can
|
|
64
|
+
decrypt. That is obfuscation, not protection.)
|
|
65
|
+
- BIEN: "Encrypted with AES-256-GCM. Note: if YUEMAIL_VAULT_PASS
|
|
66
|
+
is unset, the key falls back to a predictable host-derived
|
|
67
|
+
value -- protects against off-machine theft of the JSON, NOT
|
|
68
|
+
against a local attacker. Set the passphrase for real at-rest
|
|
69
|
+
security."
|
|
70
|
+
|
|
71
|
+
## Reporting rule (separate verified from believed)
|
|
72
|
+
|
|
73
|
+
When you report to the user, separate what you VERIFIED (ran,
|
|
74
|
+
read, reproduced) from what you BELIEVE (assumed, inferred). Say
|
|
75
|
+
"105 tests pass (ran it)" not "fully tested". Say "settings look
|
|
76
|
+
correct, not asserted by a test" when that is the truth. The user
|
|
77
|
+
relies on the boundary between the two.
|
|
78
|
+
|
|
79
|
+
## Scope
|
|
80
|
+
|
|
81
|
+
This applies to EVERY change, in EVERY mode -- not a workflow
|
|
82
|
+
step. It is injected condensed in the system prompt every turn.
|
|
83
|
+
It composes with `testing-policy.md` (which governs WHEN tests are
|
|
84
|
+
authored and the scaffold gate); this doctrine governs whether
|
|
85
|
+
your CLAIMS about those tests are true.
|
|
86
|
+
|
|
87
|
+
## How this was learned
|
|
88
|
+
|
|
89
|
+
yuemail-v3 z.207 audit (2026-06-10): graph repair, vault security,
|
|
90
|
+
voice routing, and all 9 email server settings were verified
|
|
91
|
+
CORRECT. The defects were: (a) the symmetry test did not catch a
|
|
92
|
+
forgotten attribute yet was sold as a hard net; (b) 7 of 9
|
|
93
|
+
provider rows had no assertions; (c) the vault key fallback was
|
|
94
|
+
predictable while sold as "encrypted". None broke the running
|
|
95
|
+
app; all were honesty/coverage gaps an audit surfaced.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Workflow kinds (PND-094)
|
|
2
|
+
|
|
3
|
+
Forge has THREE workflows, not one. Forcing the 18-step greenfield
|
|
4
|
+
methodology onto a live project produces fiction ("phase complete"
|
|
5
|
+
when the phase never applied). Pick the right one.
|
|
6
|
+
|
|
7
|
+
## The three kinds
|
|
8
|
+
|
|
9
|
+
- **greenfield** -- a NEW app from zero. The canonical 6 phases /
|
|
10
|
+
18 steps (full doctrine: `workflow`, `workflow-phases`).
|
|
11
|
+
- **corrective** -- FIX a defect in a live project. Compact 6
|
|
12
|
+
stages: triage -> reproduce + root-cause -> implement -> validate
|
|
13
|
+
(iterative) -> **refresh docs** -> close.
|
|
14
|
+
- **evolutive** -- EXTEND / improve a live project. Compact 6
|
|
15
|
+
stages: triage -> design/fit -> implement -> validate (iterative)
|
|
16
|
+
-> **refresh docs** -> close.
|
|
17
|
+
|
|
18
|
+
corrective + evolutive BOTH require the docs-refresh stage: update
|
|
19
|
+
README / ARCHITECTURE / DESIGN / manual + the graph for whatever
|
|
20
|
+
changed. No doc drift.
|
|
21
|
+
|
|
22
|
+
## How Forge decides + acts
|
|
23
|
+
|
|
24
|
+
1. **Classify + ASK.** From the request + whether the project has
|
|
25
|
+
code, suggest a kind (the classifier is `src/workflow/select.ts`).
|
|
26
|
+
When confidence is low, ASK the user "esto es correctivo o
|
|
27
|
+
evolutivo?" before committing. Do NOT silently assume.
|
|
28
|
+
2. **Set the kind.** Persist with `yujin.workflow.set({group:"kind",
|
|
29
|
+
patch:{kind:"corrective"}, top_level:true})`.
|
|
30
|
+
3. **Run the right workflow.** Greenfield -> the 18-step flow.
|
|
31
|
+
corrective/evolutive -> the compact 6-stage flow above.
|
|
32
|
+
4. **Log the evolution.** As you cross each stage/step boundary,
|
|
33
|
+
call `yujin.workflow.log-step({kind, stage_id, step_id?, event,
|
|
34
|
+
content})`. It writes the per-project doc `docs/WORKFLOW_LOG.md`
|
|
35
|
+
(auditable) + the mirror in `workflow.evolution[]`. The project
|
|
36
|
+
then documents its own workflow evolution -- steps + stages with
|
|
37
|
+
start/end/content.
|
|
38
|
+
|
|
39
|
+
## Relation to the request lifecycle
|
|
40
|
+
|
|
41
|
+
The pending request-lifecycle (add -> note -> close with history) is
|
|
42
|
+
the MICRO level (per request). The workflow is the MACRO level (per
|
|
43
|
+
project, with stages). They compose: the macro workflow names the
|
|
44
|
+
stage; each request inside it runs the micro lifecycle. Do not
|
|
45
|
+
duplicate -- a corrective run IS a pending item whose work crosses
|
|
46
|
+
the corrective stages.
|
|
47
|
+
|
|
48
|
+
## Canonical steps source
|
|
49
|
+
|
|
50
|
+
The canonical step definitions come from the worker (general,
|
|
51
|
+
shared) with a LOCAL fallback (`src/workflow/definitions.ts`) so
|
|
52
|
+
Forge keeps working offline -- same pattern as doctrines + lessons.
|