@event4u/agent-config 9.25.0 → 9.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +87 -0
  3. package/README.md +1 -1
  4. package/dist/agent-src/commands/analyze/conformance.md +2 -2
  5. package/dist/agent-src/commands/review/changes.md +6 -5
  6. package/dist/agent-src/commands/roadmap/next.md +194 -0
  7. package/dist/agent-src/commands/roadmap.md +12 -4
  8. package/dist/agent-src/contexts/execution/subagent-routing.md +4 -1
  9. package/dist/agent-src/rules/delegation-policy.md +3 -2
  10. package/dist/agent-src/rules/design-fidelity.md +17 -1
  11. package/dist/agent-src/rules/design-review-after-ui-write.md +116 -0
  12. package/dist/agent-src/rules/evaluator-independence.md +9 -3
  13. package/dist/agent-src/rules/session-canary.md +2 -0
  14. package/dist/agent-src/rules/settings-ask-protocol.md +176 -0
  15. package/dist/agent-src/rules/token-budget-discipline.md +6 -3
  16. package/dist/agent-src/rules/ui-audit-gate.md +3 -0
  17. package/dist/agent-src/rules/user-interaction.md +3 -2
  18. package/dist/agent-src/skills/recursive-verification/SKILL.md +13 -0
  19. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  20. package/dist/cli-delegate/cmd_route_audit.js +4 -1
  21. package/dist/cli-delegate/cmd_route_explain.js +4 -1
  22. package/dist/discovery/deprecation-report.md +1 -1
  23. package/dist/discovery/discovery-manifest.json +94 -23
  24. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  25. package/dist/discovery/discovery-manifest.summary.md +4 -4
  26. package/dist/discovery/orphan-report.md +1 -1
  27. package/dist/discovery/packs.json +11 -8
  28. package/dist/discovery/trust-report.md +3 -3
  29. package/dist/discovery/workspaces.json +9 -6
  30. package/dist/hooks/dispatch.js +355 -63
  31. package/dist/mcp/registry-manifest.json +3 -3
  32. package/dist/mcp/server.json +2 -2
  33. package/dist/router.json +1 -1
  34. package/dist/server/nicknameResolver.js +116 -0
  35. package/dist/server/nicknameResolver.js.map +1 -0
  36. package/dist/server/routes/ping.js +29 -11
  37. package/dist/server/routes/ping.js.map +1 -1
  38. package/dist/shared/interactiveContext.js +73 -0
  39. package/dist/shared/interactiveContext.js.map +1 -0
  40. package/dist/shared/nicknamePrefill.js +59 -0
  41. package/dist/shared/nicknamePrefill.js.map +1 -0
  42. package/dist/shared/settingsAsks.js +128 -0
  43. package/dist/shared/settingsAsks.js.map +1 -0
  44. package/dist/shared/settingsConsent.js +93 -0
  45. package/dist/shared/settingsConsent.js.map +1 -0
  46. package/package.json +1 -1
  47. package/src/config/agents-paths.yml +15 -0
  48. package/src/config/gate-coverage.yml +29 -1
  49. package/src/config/gate-violation-baselines.json +13 -7
  50. package/src/scripts/_cli/cmd_route_audit.ts +4 -1
  51. package/src/scripts/_cli/cmd_route_explain.ts +9 -1
  52. package/src/scripts/ai-video/stitch.sh +27 -9
  53. package/src/scripts/before_complete_hook.ts +23 -4
  54. package/src/scripts/bench_ab_v2_run.ts +272 -16
  55. package/src/scripts/bench_ab_v2_stats.ts +156 -3
  56. package/src/scripts/check_completion_review.ts +80 -3
  57. package/src/scripts/check_corpus_staleness.ts +692 -0
  58. package/src/scripts/check_gate_coverage.ts +67 -0
  59. package/src/scripts/check_hook_bundle_freshness.ts +183 -0
  60. package/src/scripts/conformance_scan.ts +47 -17
  61. package/src/scripts/dispatch_r2_reviewer.ts +31 -2
  62. package/src/scripts/git_authorization_hook.ts +75 -10
  63. package/src/scripts/hook_manifest.yaml +19 -0
  64. package/src/scripts/hooks/block_no_verify.ts +3 -1
  65. package/src/scripts/hooks/block_unauthorized_git.ts +133 -16
  66. package/src/scripts/hooks/design_slop_hook.ts +13 -1
  67. package/src/scripts/hooks/dispatch_hook.ts +97 -2
  68. package/src/scripts/hooks/evidence_independence.ts +40 -6
  69. package/src/scripts/language_mirror_hook.ts +200 -11
  70. package/src/scripts/lint_abstraction_thresholds.ts +41 -8
  71. package/src/scripts/lint_agents_layout.ts +2 -0
  72. package/src/scripts/lint_hook_manifest.ts +29 -0
  73. package/src/scripts/memory_learn_hook.ts +109 -6
  74. package/src/scripts/pr_url_reminder_hook.ts +17 -2
  75. package/src/scripts/release.ts +38 -1
  76. package/src/scripts/schemas/review-findings.schema.json +99 -0
  77. package/src/shared/interactiveContext.ts +98 -0
  78. package/src/shared/nicknamePrefill.ts +96 -0
  79. package/src/shared/settingsAsks.ts +176 -0
  80. package/src/shared/settingsConsent.ts +136 -0
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "discovery": {
3
- "artefact_count": 597,
3
+ "artefact_count": 600,
4
4
  "scanner_version": "c24312e116f8"
5
5
  },
6
- "generated_at": "2026-08-06",
6
+ "generated_at": "2026-08-07",
7
7
  "package": {
8
8
  "description": "Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) \u2014 every claim machine-checked, including \"zero runtime daemon\".",
9
9
  "homepage": "https://event4u-app.github.io/agent-config",
10
10
  "name": "@event4u/agent-config",
11
11
  "repository": "https://github.com/event4u-app/agent-config",
12
- "version": "9.25.0"
12
+ "version": "9.26.0"
13
13
  },
14
14
  "registries": [
15
15
  {
@@ -9,12 +9,12 @@
9
9
  "transport": {
10
10
  "type": "stdio"
11
11
  },
12
- "version": "9.25.0"
12
+ "version": "9.26.0"
13
13
  }
14
14
  ],
15
15
  "repository": {
16
16
  "source": "github",
17
17
  "url": "https://github.com/event4u-app/agent-config"
18
18
  },
19
- "version": "9.25.0"
19
+ "version": "9.26.0"
20
20
  }
package/dist/router.json CHANGED
@@ -1 +1 @@
1
- {"schema_version":2,"kernel":["agent-authority","ask-when-uncertain","commit-policy","direct-answers","language-and-tone","no-cheap-questions","non-destructive-by-default","scope-control","verify-before-complete"],"tier_1":[{"id":"architecture","triggers":[{"keyword":"controller"},{"keyword":"service"},{"keyword":"module"}],"routes_to":["skill:module-detect-on-the-fly"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"artifact-engagement-recording","triggers":[{"phrase":"/implement-ticket"},{"phrase":"/work"},{"keyword":"telemetry"}],"routes_to":["contract:artifact-engagement-flow"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"autonomous-execution","triggers":[{"keyword":"personal.autonomy"},{"phrase":"autonomy mode"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"command-suggestion-policy","triggers":[{"phrase":"free-form prompt"},{"phrase":"command suggestion"}],"routes_to":["contract:command-suggestion-flow"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"context-hygiene","triggers":[{"keyword":"3-failure"},{"phrase":"long conversation"}],"routes_to":["guideline:agent-infra/context-hygiene-mechanics"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"copilot-routing","triggers":[{"keyword":"copilot"},{"phrase":"copilot-instructions"},{"phrase":"copilot pr review"}],"routes_to":["skill:copilot-config"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"devcontainer-routing","triggers":[{"keyword":"devcontainer"},{"keyword":"codespaces"},{"keyword":"codespace"},{"phrase":"devcontainer.json"}],"routes_to":["skill:devcontainer"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"docker-commands","triggers":[{"keyword":"docker"},{"keyword":"artisan"},{"keyword":"composer"},{"phrase":"inside the container"}],"routes_to":["skill:docker"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"fast-path-marker-visibility","triggers":[{"keyword":"low-impact council"},{"keyword":"fast-path"},{"keyword":"Resolved via low-impact council"},{"keyword":"low_impact"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"laravel-routing","triggers":[{"keyword":"laravel"},{"keyword":"artisan"},{"keyword":"eloquent"},{"keyword":"FormRequest"}],"routes_to":["skill:laravel"],"workspaces":["engineering"],"packs":["laravel"]},{"id":"low-impact-corpus-privacy-floor","triggers":[{"path_prefix":"agents/decisions/low-impact-decisions"},{"keyword":"low-impact-decisions"},{"keyword":"low-impact corpus"},{"keyword":"learn-low-impact"}],"routes_to":[],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"no-attribution-footers","triggers":[{"keyword":"co-authored"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"no-decorative-emojis-in-git-surfaces","triggers":[{"keyword":"gh pr create"},{"keyword":"git commit"},{"keyword":"🤖"},{"keyword":"🚀"},{"keyword":"🎉"},{"keyword":"✨"},{"keyword":"🔥"},{"keyword":"💡"},{"keyword":"👍"},{"keyword":"❤️"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"no-roadmap-references","triggers":[{"path_prefix":"agents/roadmaps/"},{"path_prefix":"agents/runtime/council/questions/"},{"path_prefix":"agents/runtime/council/responses/"},{"path_prefix":"agents/runtime/council/sessions/"}],"routes_to":["skill:agent-docs-writing","skill:ai-council"],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"onboarding-gate","triggers":[{"phrase":"first turn"},{"keyword":"onboarding"},{"path_prefix":".agent-settings.yml"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"php-coding","triggers":[{"file_pattern":"*.php"},{"keyword":"phpstan"},{"keyword":"ecs"}],"routes_to":["guideline:php/php-coding-patterns"],"workspaces":["engineering"],"packs":["php"]},{"id":"question-not-instruction","triggers":[{"phrase":"warum"},{"phrase":"wieso"},{"phrase":"weshalb"},{"keyword":"why"},{"phrase":"what do you think"},{"phrase":"was denkst du"},{"phrase":"was hältst du"},{"phrase":"geht das"},{"phrase":"kannst du"},{"phrase":"sollte ich"},{"phrase":"should i"},{"phrase":"is it possible"}],"routes_to":[],"workspaces":["engineering"],"packs":["meta"]},{"id":"roadmap-progress-sync","triggers":[{"path_prefix":"agents/roadmaps/"},{"command":"/roadmap:process-step"},{"command":"/roadmap:process-phase"},{"command":"/roadmap:process-full"}],"routes_to":["guideline:agent-infra/roadmap-progress-mechanics"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"skill-quality","triggers":[{"path_prefix":"src/skills/"}],"routes_to":["guideline:agent-infra/skill-quality-checklist"],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"slash-command-routing-policy","triggers":[{"keyword":"/create-pr"},{"keyword":"/commit"},{"keyword":"/fix-ci"},{"phrase":"slash command"}],"routes_to":["skill:command-routing"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"source-confidentiality","triggers":[{"path_prefix":"src/skills/"},{"path_prefix":"src/rules/"},{"path_prefix":"src/domains/"},{"path_prefix":"docs/"},{"path_prefix":"agents/evidence/"},{"path_prefix":"agents/roadmaps/"}],"routes_to":[],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"source-of-truth","triggers":[{"path_prefix":"dist/agent-src/"},{"path_prefix":".augment/"},{"path_prefix":".claude/"},{"path_prefix":".cursor/"}],"routes_to":[],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"symfony-routing","triggers":[{"keyword":"symfony"},{"keyword":"doctrine"},{"keyword":"twig"},{"keyword":"messenger"}],"routes_to":["skill:symfony-workflow"],"workspaces":["engineering"],"packs":["symfony"]},{"id":"user-interaction","triggers":[{"keyword":"option"},{"keyword":"recommendation"},{"phrase":"what do you recommend"},{"phrase":"was empfiehlst du"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]}],"tier_2":[{"id":"active-remediation","triggers":[{"keyword":"refactor"},{"keyword":"duplicate"},{"keyword":"legacy"},{"keyword":"deprecated"},{"keyword":"modernize"},{"keyword":"upgrade"},{"keyword":"cleanup"},{"keyword":"technical debt"}],"routes_to":["guideline:agent-infra/active-remediation-mechanics"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"artifact-drafting-protocol","triggers":[{"phrase":"new skill"},{"phrase":"new rule"},{"phrase":"new command"},{"phrase":"new guideline"},{"phrase":"neue Regel"},{"phrase":"bau mir ein Skill"}],"routes_to":["guideline:agent-infra/artifact-drafting-protocol-mechanics"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"augment-edit-discipline","triggers":[{"path_prefix":".augment/"},{"path_prefix":"src/"},{"keyword":"portable"},{"keyword":"rename"},{"keyword":"delete"}],"routes_to":["guideline:augment-portability-patterns","skill:agent-docs-writing"],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"brand-source-of-truth","triggers":[{"keyword":"brand"},{"keyword":"on-brand"},{"keyword":"off-brand"},{"keyword":"brand tokens"},{"keyword":"brand voice"},{"keyword":"brand guide"},{"keyword":"brand profile"},{"phrase":"brand consistency"},{"phrase":"on brand"},{"phrase":"brand source of truth"}],"routes_to":[],"workspaces":["engineering"],"packs":["brand"]},{"id":"broken-access-control","triggers":[{"keyword":"endpoint"},{"keyword":"route"},{"keyword":"authorization"},{"keyword":"tenant"},{"keyword":"IDOR"},{"keyword":"session"},{"keyword":"login"},{"keyword":"controller"},{"keyword":"findById"}],"routes_to":["skill:authz-review","skill:multi-tenancy","skill:threat-modeling"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"cli-output-handling","triggers":[{"keyword":"git"},{"keyword":"phpstan"},{"keyword":"rector"},{"keyword":"phpunit"},{"keyword":"composer"},{"keyword":"npm"},{"keyword":"pnpm"},{"keyword":"yarn"},{"keyword":"eslint"},{"keyword":"tsc"},{"keyword":"vitest"},{"keyword":"jest"},{"keyword":"pytest"},{"keyword":"ruff"},{"keyword":"mypy"},{"keyword":"pyright"},{"keyword":"cargo"},{"keyword":"golangci-lint"},{"keyword":"docker"},{"keyword":"kubectl"},{"keyword":"terraform"},{"phrase":"go test"},{"phrase":"go build"}],"routes_to":["skill:rtk-output-filtering"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"code-comment-discipline","triggers":[{"keyword":"comment"},{"keyword":"docblock"},{"keyword":"phpdoc"},{"keyword":"jsdoc"},{"keyword":"docstring"},{"keyword":"implement"},{"keyword":"class"},{"keyword":"method"},{"keyword":"refactor"}],"routes_to":["guideline:code-clarity"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"code-provenance","triggers":[{"keyword":"port this"},{"keyword":"adapt this"},{"keyword":"based on this repo"},{"keyword":"similar implementation"},{"keyword":"found this on GitHub"},{"keyword":"borrow"},{"keyword":"vendored"},{"keyword":"reference implementation"}],"routes_to":["skill:license-compliance-audit","skill:license-compliance-borrow-check","skill:license-compliance-credits"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"commit-conventions","triggers":[{"keyword":"commit"},{"keyword":"branch"},{"phrase":"conventional commits"}],"routes_to":["skill:conventional-commits-writing"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"communication-through-line","triggers":[{"phrase":"reporting progress"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"content-quoting-floor","triggers":[{"keyword":"quote"},{"keyword":"excerpt"},{"keyword":"verbatim"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"cross-source-consistency","triggers":[{"keyword":"ticket"},{"keyword":"refine"},{"keyword":"acceptance criteria"},{"keyword":"mockup"},{"keyword":"screenshot"},{"keyword":"attachment"},{"keyword":"roadmap"},{"keyword":"estimate"},{"phrase":"plan this ticket"},{"phrase":"refine this ticket"},{"phrase":"is this ticket clear"},{"phrase":"implement the ticket"}],"routes_to":["guideline:agent-infra/cross-source-consistency-mechanics"],"workspaces":["engineering","product"],"packs":["engineering-base","product-basic"]},{"id":"decision-revisit-gate","triggers":[{"keyword":"don't relitigate"},{"keyword":"honest null"},{"keyword":"already decided"},{"keyword":"locked decision"},{"keyword":"budget blocks"}],"routes_to":["skill:decision-review"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"delegation-policy","triggers":[{"keyword":"delegate"},{"keyword":"orchestrate"},{"keyword":"subagent"},{"keyword":"parallel"},{"phrase":"review these"},{"phrase":"analyze the codebase"},{"phrase":"for each"},{"keyword":"analyse"},{"keyword":"analyze"}],"routes_to":["skill:subagent-orchestration"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"design-fidelity","triggers":[{"keyword":"prototype"},{"keyword":"mockup"},{"keyword":"wireframe"},{"keyword":"design system"},{"keyword":"design spec"},{"keyword":"Figma"},{"keyword":"handoff"},{"keyword":"Claude Design"},{"phrase":"match the design"},{"phrase":"build this design"},{"phrase":"design fidelity"},{"phrase":"stick to the design"},{"phrase":"design.html"},{"phrase":"attached artifact"},{"phrase":"provided artifact"},{"phrase":"übernimm das design"},{"phrase":"baue das nach"},{"phrase":"bau das nach"},{"phrase":"1:1 um"},{"phrase":"1:1 nach"},{"file_pattern":"*design.html"}],"routes_to":["guideline:design-fidelity-mechanics"],"workspaces":["engineering"],"packs":["engineering-base","frontend-design"]},{"id":"doc-screenshot-hygiene","triggers":[{"keyword":"screenshot"},{"keyword":"screenshots"},{"keyword":"screen capture"},{"keyword":"screen grab"},{"keyword":"admin panel screenshot"},{"keyword":"dashboard screenshot"},{"keyword":"docs site"},{"keyword":"Starlight"},{"phrase":"add a screenshot"},{"phrase":"screenshot for the docs"},{"phrase":"screenshot in the readme"},{"phrase":"embed an image in the docs"},{"phrase":"put a screenshot"},{"phrase":"generate a docs site"},{"phrase":"capture the ui"},{"path_prefix":"docs/media/"}],"routes_to":["skill:screenshot-hygiene"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"domain-adoption-policy","triggers":[{"keyword":"mobile track"},{"keyword":"ml track"},{"keyword":"blockchain track"},{"path_prefix":"src/skills/"}],"routes_to":["guideline:agent-infra/domain-adoption-gates"],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"domain-safety-disclaimer","triggers":[{"keyword":"legal brief"},{"keyword":"contract redline"},{"keyword":"terms of service"},{"keyword":"privacy policy"},{"keyword":"diagnosis"},{"keyword":"symptoms"},{"keyword":"dosage"},{"keyword":"medication"},{"keyword":"investment memo"},{"keyword":"tax position"},{"keyword":"strategic recommendation"},{"keyword":"board memo"},{"keyword":"executive summary"},{"phrase":"review this contract"},{"phrase":"is this symptom"},{"phrase":"should I invest"},{"phrase":"what should we do"}],"routes_to":["skill:brand-identity","skill:brand-strategy","skill:contracts-cognition","skill:dcf-modeling","skill:decision-record","skill:privacy-review","skill:scenario-modeling","skill:stakeholder-tradeoff"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"domain-safety-pii","triggers":[{"keyword":"support macro"},{"keyword":"ticket response"},{"keyword":"help desk"},{"keyword":"Zendesk"},{"keyword":"Intercom"},{"keyword":"testimonial"},{"keyword":"case study"},{"keyword":"customer story"},{"keyword":"candidate"},{"keyword":"interview notes"},{"keyword":"scorecard"},{"keyword":"rejection email"},{"keyword":"offer letter"},{"keyword":"invoice"},{"keyword":"accounts receivable"},{"keyword":"accounts payable"},{"keyword":"finance memo"},{"keyword":"log"},{"keyword":"logger"},{"keyword":"Sentry"},{"keyword":"Datadog"},{"keyword":"structured log"},{"keyword":"export to CSV"},{"keyword":"data export"},{"keyword":"partner integration"},{"phrase":"draft a response to"},{"phrase":"marketing email featuring"},{"phrase":"draft feedback for"},{"phrase":"log the user"},{"phrase":"send them the spreadsheet"}],"routes_to":["skill:data-handling-judgment","skill:logging-monitoring","skill:privacy-review","skill:secrets-management"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"domain-safety-retention","triggers":[{"keyword":"retention policy"},{"keyword":"data retention"},{"keyword":"record retention"},{"keyword":"ticket retention"},{"keyword":"CRM retention"},{"keyword":"delete financial"},{"keyword":"purge invoice"},{"keyword":"DSAR"},{"keyword":"data subject request"},{"keyword":"right to be forgotten"},{"phrase":"how long should we keep"},{"phrase":"when can we delete"},{"phrase":"delete customer data"},{"phrase":"how long do we keep tickets"}],"routes_to":["skill:data-handling-judgment","skill:privacy-review"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"downstream-changes","triggers":[{"keyword":"callers"},{"keyword":"imports"},{"keyword":"downstream"},{"phrase":"api changed"}],"routes_to":[],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"engineering-safety-floor","triggers":[{"keyword":"production"},{"keyword":"deploy"},{"keyword":"migration"},{"keyword":"schema change"},{"keyword":"DROP TABLE"},{"keyword":"TRUNCATE"},{"keyword":"force push"},{"keyword":"rebase main"},{"keyword":"rollback"},{"keyword":"secrets rotation"},{"keyword":"IAM"},{"keyword":"DNS"},{"keyword":"terraform apply"},{"keyword":"kubectl apply"},{"phrase":"ship to prod"},{"phrase":"deploy to production"},{"phrase":"merge to main"},{"phrase":"release this"}],"routes_to":["skill:launch-readiness","skill:threat-modeling"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"evaluator-independence","triggers":[{"keyword":"blind review"},{"keyword":"blind pass"},{"keyword":"honest null"},{"keyword":"no-findings"},{"keyword":"adversarial review"},{"keyword":"judge"},{"phrase":"review my own"},{"phrase":"commission a review"},{"phrase":"second opinion on my"}],"routes_to":[],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"external-code-graph-interop","triggers":[{"keyword":"scip"},{"keyword":"code-graph"},{"keyword":"code graph"},{"phrase":"graph.json"},{"phrase":"who calls"},{"phrase":"call graph"},{"phrase":"find references"},{"phrase":"where is this used"}],"routes_to":[],"workspaces":["engineering"],"packs":["meta"]},{"id":"external-reference-deep-dive","triggers":[{"keyword":"github.com/"},{"keyword":"source of truth"},{"phrase":"reference repo"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"finance-safety-floor","triggers":[{"keyword":"runway"},{"keyword":"burn"},{"keyword":"valuation"},{"keyword":"DCF"},{"keyword":"IRR"},{"keyword":"MOIC"},{"keyword":"LTV"},{"keyword":"payback"},{"keyword":"sensitivity"},{"keyword":"fundraise"},{"keyword":"term sheet"},{"keyword":"dilution"},{"keyword":"NRR"},{"keyword":"EBITDA"},{"keyword":"free cash flow"},{"phrase":"what's it worth"},{"phrase":"how long do we have"},{"phrase":"should we raise"},{"phrase":"model the scenarios"}],"routes_to":["skill:dcf-modeling","skill:forecasting","skill:runway-cognition","skill:scenario-modeling","skill:unit-economics-modeling"],"workspaces":["finance"],"packs":["finance-advanced","finance-basic"]},{"id":"framework-neutrality-in-generic-skills","triggers":[{"path_prefix":"src/skills/"},{"path_prefix":"src/rules/"},{"path_prefix":"src/agent-src/commands/"},{"keyword":"FormRequest"},{"keyword":"PHPStan"},{"keyword":"php artisan"},{"keyword":"composer.json"},{"keyword":"Eloquent"},{"keyword":"Pest"},{"keyword":"Blade"},{"keyword":"vendor/bin"},{"keyword":"Artisan"},{"keyword":"Rector"},{"phrase":"every controller"},{"phrase":"all controllers"},{"phrase":"generic skill"}],"routes_to":["guideline:agent-infra/framework-neutrality-patterns"],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"git-history-discipline","triggers":[{"keyword":"git rebase"},{"keyword":"rebase --onto"},{"keyword":"reset --hard"},{"keyword":"fixup"},{"keyword":"--amend"},{"keyword":"force-push"},{"keyword":"--force-with-lease"},{"keyword":"squash-merge"},{"phrase":"branch diverged"},{"phrase":"pull --rebase failed"},{"phrase":"ahead and behind"},{"phrase":"unexpected commits on the branch"},{"phrase":"commits I did not create"}],"routes_to":["skill:git-workflow"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"history-discipline","triggers":[{"keyword":"audit"},{"keyword":"audit log"},{"keyword":"activity log"},{"keyword":"history"},{"keyword":"event sourcing"},{"keyword":"changelog"},{"phrase":"who changed"},{"phrase":"wer hat was"},{"phrase":"track changes"},{"phrase":"change history"}],"routes_to":["skill:history-design"],"workspaces":["engineering"],"packs":["history-discipline"]},{"id":"icon-consistency","triggers":[{"keyword":"icon"},{"keyword":"iconography"},{"keyword":"lucide"},{"keyword":"heroicons"},{"keyword":"icon set"},{"phrase":"icon system"}],"routes_to":[],"workspaces":["engineering"],"packs":["frontend-design"]},{"id":"image-likeness-and-rights","triggers":[{"keyword":"/image:"},{"keyword":"image generation"},{"keyword":"generate an image"},{"keyword":"logo"},{"keyword":"likeness"},{"keyword":"trademark"},{"keyword":"brand mark"},{"path_prefix":"scripts/ai-image/adapters/"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering","gtm"],"packs":["ai-image"]},{"id":"improve-before-implement","triggers":[{"keyword":"refactor"},{"keyword":"implement"},{"keyword":"migration"}],"routes_to":["guideline:agent-infra/agent-interaction-and-decision-quality"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"invite-challenge","triggers":[{"keyword":"plan"},{"keyword":"design"},{"keyword":"architecture"},{"keyword":"approach"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"laravel-translations","triggers":[{"path_prefix":"lang/"},{"keyword":"translation"},{"keyword":"__()"},{"keyword":"trans("}],"routes_to":["skill:laravel"],"workspaces":["engineering"],"packs":["laravel"]},{"id":"legal-safety-floor","triggers":[{"keyword":"NDA"},{"keyword":"DPA"},{"keyword":"data processing agreement"},{"keyword":"contract review"},{"keyword":"redline"},{"keyword":"clause"},{"keyword":"GDPR"},{"keyword":"Art. 28"},{"keyword":"controller"},{"keyword":"processor"},{"keyword":"privilege"},{"keyword":"work product"},{"phrase":"review this contract"},{"phrase":"is this a legal problem"},{"phrase":"check this NDA"}],"routes_to":["skill:contract-review","skill:dpa-review","skill:legal-intake-triage","skill:nda-triage"],"workspaces":["legal-review-prep"],"packs":["legal-review-prep"]},{"id":"lethal-trifecta-guard","triggers":[{"path_prefix":"src/skills/"},{"path_prefix":"src/agent-src/commands/"},{"keyword":"lethal trifecta"},{"keyword":"untrusted content"},{"keyword":"exfiltration"},{"keyword":"data exfil"},{"phrase":"fetch and send"},{"phrase":"read the file and post"}],"routes_to":[],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"linked-projects-onboarding-gate","triggers":[{"keyword":"linked project"},{"keyword":"cross-repo"},{"keyword":"sibling repo"},{"path_prefix":".idea/modules.xml"},{"path_prefix":".idea/vcs.xml"}],"routes_to":["guideline:agent-infra/linked-projects-onboarding-gate"],"workspaces":["agent-config-maintainer","engineering"],"packs":["engineering-base"]},{"id":"markdown-safe-codeblocks","triggers":[{"keyword":"triple backticks"},{"file_pattern":"*.md"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"media-governance-routing","triggers":[{"keyword":"/video:"},{"keyword":"/image:"},{"keyword":"/audio:"},{"keyword":"deepfake"},{"keyword":"voice clone"},{"keyword":"voice cloning"},{"keyword":"likeness"},{"keyword":"brand impersonation"},{"phrase":"in the style of"},{"phrase":"in the voice of"},{"phrase":"as [public figure]"},{"phrase":"impersonate"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering","gtm"],"packs":["ai-image","ai-video"]},{"id":"media-sync-ground-truth","triggers":[{"keyword":"lip-sync"},{"keyword":"lip sync"},{"keyword":"lipsync"},{"keyword":"music video"},{"keyword":"beat-cut"},{"keyword":"/video:from-song"},{"keyword":"vocal map"},{"phrase":"cut to the beat"},{"phrase":"sing the"},{"phrase":"mit den lippen"},{"phrase":"lippen passend"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering","gtm"],"packs":["ai-video"]},{"id":"minimal-safe-diff","triggers":[{"keyword":"drive-by"},{"keyword":"rewrite"},{"keyword":"fix"},{"phrase":"from scratch"},{"phrase":"second system"}],"routes_to":["guideline:agent-infra/minimal-safe-diff-mechanics"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"missing-tool-handling","triggers":[{"keyword":"command not found"},{"keyword":"not installed"}],"routes_to":["guideline:agent-infra/missing-tool-handling"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"model-recommendation","triggers":[{"phrase":"switch task"},{"phrase":"new task"},{"phrase":"which model"},{"keyword":"model_tier"}],"routes_to":["guideline:agent-infra/model-recommendation"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"no-pr-progress-comments","triggers":[{"keyword":"gh pr comment"},{"keyword":"PullRequestComment"},{"phrase":"status comment"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"notes-first-reasoning","triggers":[{"keyword":"debug"},{"keyword":"investigate"},{"keyword":"hypothesis"},{"keyword":"root cause"},{"phrase":"figure out why"},{"phrase":"should we use"}],"routes_to":["skill:memory-consolidation"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"output-discipline","triggers":[{"keyword":"// rest of component"},{"keyword":"for brevity"},{"keyword":"rest follows the same pattern"},{"phrase":"similar pattern"}],"routes_to":[],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"persona-governance","triggers":[{"path_prefix":"src/agent-src/personas/"},{"path_prefix":"dist/agent-src/personas/"},{"keyword":"persona"},{"keyword":"personas"},{"phrase":"new persona"},{"phrase":"add a persona"},{"phrase":"specialist persona"},{"phrase":"review lens"}],"routes_to":["contract:persona-schema"],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"prefer-enums-over-literals","triggers":[{"keyword":"enum"},{"keyword":"status"},{"keyword":"kind"},{"keyword":"category"},{"keyword":"migration"}],"routes_to":[],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"preservation-guard","triggers":[{"keyword":"Iron Law"}],"routes_to":[],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"provider-lifecycle-discipline","triggers":[{"keyword":"/video:"},{"keyword":"/image:"},{"keyword":"/audio:"},{"keyword":"ai-video"},{"keyword":"ai-image"},{"keyword":"ai-audio"},{"keyword":"adapter"},{"keyword":"provider"},{"path_prefix":"scripts/ai-video/adapters/"},{"path_prefix":"scripts/ai-image/adapters/"},{"path_prefix":"scripts/media/lib/"},{"path_prefix":"agents/.ai-video.xml"},{"phrase":"lifecycle"},{"phrase":"default provider"}],"routes_to":["contract:provider-lifecycle"],"workspaces":["agent-config-maintainer","engineering","gtm"],"packs":["ai-image","ai-video"]},{"id":"reviewer-awareness","triggers":[{"keyword":"reviewer"},{"phrase":"suggest reviewers"},{"phrase":"risk hotspot"},{"phrase":"ownership map"},{"phrase":"review this pr"}],"routes_to":["skill:review-routing"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"roadmap-ci-steps-policy","triggers":[{"path_prefix":"agents/roadmaps/"},{"path_prefix":"{module_root}/"},{"keyword":"task ci"},{"keyword":"make test"},{"keyword":"npm run check"},{"keyword":"pnpm run check"},{"keyword":"yarn check"},{"keyword":"composer test"},{"phrase":"run the quality pipeline"},{"phrase":"run task ci"},{"phrase":"run the full ci"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"role-mode-adherence","triggers":[{"keyword":"active_role"},{"keyword":"role-mode"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"rule-type-governance","triggers":[{"path_prefix":"src/rules/"}],"routes_to":["guideline:agent-infra/rule-type-governance"],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"runtime-safety","triggers":[{"keyword":"execution"},{"keyword":"automated"},{"keyword":"assisted"},{"keyword":"handler"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"scale-discipline","triggers":[{"keyword":"migration"},{"keyword":"index"},{"keyword":"N+1"},{"keyword":"eager load"},{"keyword":"pagination"},{"keyword":"queue"},{"keyword":"job"},{"keyword":"retention"},{"keyword":"schema"},{"keyword":"SELECT *"},{"phrase":"will this scale"},{"phrase":"review this migration"},{"phrase":"add a table"},{"phrase":"send an email on"}],"routes_to":["skill:schema-review"],"workspaces":["engineering"],"packs":["scale-discipline"]},{"id":"secret-vcs-guard","triggers":[{"keyword":"secret"},{"keyword":"password"},{"keyword":"credential"},{"keyword":"api key"},{"keyword":"token"},{"keyword":".env"},{"keyword":"commit"},{"keyword":"git add"},{"keyword":"svn commit"},{"keyword":"hg commit"},{"keyword":"push"}],"routes_to":["skill:secrets-management"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"security-sensitive-stop","triggers":[{"keyword":"auth"},{"keyword":"billing"},{"keyword":"tenant"},{"keyword":"webhook"},{"keyword":"oauth"},{"keyword":"signing key"}],"routes_to":[],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"senior-engineering-discipline","triggers":[{"keyword":"implement"},{"keyword":"endpoint"},{"keyword":"query"},{"keyword":"migration"},{"keyword":"component"},{"keyword":"seeder"},{"keyword":"dependency"},{"keyword":"refactor"}],"routes_to":["skill:ai-code-blindspots","skill:frontend-render-security","skill:supply-chain-intake","skill:testing-anti-patterns"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"session-canary","triggers":[{"keyword":"canary"},{"keyword":"canary_name"},{"phrase":"session canary"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"skill-improvement-trigger","triggers":[{"phrase":"after completing"},{"keyword":"improvement"},{"keyword":"pipeline"}],"routes_to":["skill:skill-improvement-pipeline"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"source-discovery-gate","triggers":[{"keyword":"schema"},{"keyword":"endpoint"},{"phrase":"new API"},{"phrase":"unknown API"},{"phrase":"new vendor package"},{"phrase":"which fields"}],"routes_to":["skill:source-discovery"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"spreadsheet-source-quality","triggers":[{"keyword":"financial data"},{"keyword":"financial model"},{"keyword":"stock price"},{"keyword":"revenue figures"},{"keyword":"market data"},{"phrase":"pull the numbers"}],"routes_to":[],"workspaces":["finance"],"packs":["finance-basic"]},{"id":"strategy-safety-floor","triggers":[{"keyword":"vision"},{"keyword":"positioning"},{"keyword":"moat"},{"keyword":"competitive"},{"keyword":"market entry"},{"keyword":"OKR"},{"keyword":"build vs buy"},{"keyword":"buy vs partner"},{"keyword":"beachhead"},{"keyword":"GTM"},{"keyword":"category"},{"keyword":"where to play"},{"keyword":"where not to play"},{"phrase":"what's our strategy"},{"phrase":"should we enter"},{"phrase":"what's our moat"},{"phrase":"where should we focus"},{"phrase":"should we reorg"}],"routes_to":["skill:build-buy-partner","skill:competitive-moat-analysis","skill:market-entry-analysis","skill:okr-tree-modeling","skill:positioning-strategy","skill:vision-articulation"],"workspaces":["founder"],"packs":["founder-strategy"]},{"id":"think-before-action","triggers":[{"phrase":"before coding"},{"phrase":"before debugging"},{"phrase":"before modifying"},{"keyword":"implement"},{"keyword":"debug"},{"keyword":"refactor"},{"keyword":"fix"},{"keyword":"optimize"}],"routes_to":[],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"token-budget-discipline","triggers":[{"keyword":"token_budget_class"},{"keyword":"rich skill"}],"routes_to":[],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"token-efficiency","triggers":[{"keyword":"minimize tool calls"},{"phrase":"fetching logs"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"token-optimizer-maintenance","triggers":[{"keyword":"cli-output-handling"},{"keyword":"rtk-output-filtering"},{"keyword":"token-efficiency"},{"keyword":"agent-handoff"},{"keyword":"markitdown"},{"keyword":"token-optimizer"}],"routes_to":["skill:token-optimizer"],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"tool-safety","triggers":[{"keyword":"allowed_tools"},{"keyword":"tool registry"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"ui-audit-gate","triggers":[{"path_prefix":"resources/views/"},{"path_prefix":"resources/js/"},{"keyword":"component"},{"keyword":"design token"}],"routes_to":["skill:existing-ui-audit","skill:iconography","skill:typography-system"],"workspaces":["agent-config-maintainer","engineering"],"packs":["frontend-design"]},{"id":"untrusted-input-defense","triggers":[{"keyword":"untrusted"},{"keyword":"fetched content"},{"keyword":"tool output"},{"keyword":"web page"},{"keyword":"RAG"},{"keyword":"converted"},{"phrase":"treat as instructions"},{"phrase":"from the web"},{"phrase":"scraped"}],"routes_to":["guideline:agent-infra/untrusted-input-spotlighting"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"upstream-proposal","triggers":[{"phrase":"after creating"},{"phrase":"after improving"},{"keyword":"upstream"}],"routes_to":["skill:upstream-contribute"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"user-interrupt-priority","triggers":[{"keyword":"weiter"},{"keyword":"resume"},{"keyword":"continue"},{"phrase":"stop that"},{"phrase":"mach stattdessen"},{"command":"work"},{"command":"roadmap:process-full"},{"command":"roadmap:process-phase"},{"command":"implement-ticket"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]}],"profiles":{"minimal":["__kernel__"],"essential":["__kernel__","downstream-changes"],"full":["__kernel__","__tier_1__","__tier_2__"]}}
1
+ {"schema_version":2,"kernel":["agent-authority","ask-when-uncertain","commit-policy","direct-answers","language-and-tone","no-cheap-questions","non-destructive-by-default","scope-control","verify-before-complete"],"tier_1":[{"id":"architecture","triggers":[{"keyword":"controller"},{"keyword":"service"},{"keyword":"module"}],"routes_to":["skill:module-detect-on-the-fly"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"artifact-engagement-recording","triggers":[{"phrase":"/implement-ticket"},{"phrase":"/work"},{"keyword":"telemetry"}],"routes_to":["contract:artifact-engagement-flow"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"autonomous-execution","triggers":[{"keyword":"personal.autonomy"},{"phrase":"autonomy mode"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"command-suggestion-policy","triggers":[{"phrase":"free-form prompt"},{"phrase":"command suggestion"}],"routes_to":["contract:command-suggestion-flow"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"context-hygiene","triggers":[{"keyword":"3-failure"},{"phrase":"long conversation"}],"routes_to":["guideline:agent-infra/context-hygiene-mechanics"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"copilot-routing","triggers":[{"keyword":"copilot"},{"phrase":"copilot-instructions"},{"phrase":"copilot pr review"}],"routes_to":["skill:copilot-config"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"devcontainer-routing","triggers":[{"keyword":"devcontainer"},{"keyword":"codespaces"},{"keyword":"codespace"},{"phrase":"devcontainer.json"}],"routes_to":["skill:devcontainer"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"docker-commands","triggers":[{"keyword":"docker"},{"keyword":"artisan"},{"keyword":"composer"},{"phrase":"inside the container"}],"routes_to":["skill:docker"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"fast-path-marker-visibility","triggers":[{"keyword":"low-impact council"},{"keyword":"fast-path"},{"keyword":"Resolved via low-impact council"},{"keyword":"low_impact"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"laravel-routing","triggers":[{"keyword":"laravel"},{"keyword":"artisan"},{"keyword":"eloquent"},{"keyword":"FormRequest"}],"routes_to":["skill:laravel"],"workspaces":["engineering"],"packs":["laravel"]},{"id":"low-impact-corpus-privacy-floor","triggers":[{"path_prefix":"agents/decisions/low-impact-decisions"},{"keyword":"low-impact-decisions"},{"keyword":"low-impact corpus"},{"keyword":"learn-low-impact"}],"routes_to":[],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"no-attribution-footers","triggers":[{"keyword":"co-authored"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"no-decorative-emojis-in-git-surfaces","triggers":[{"keyword":"gh pr create"},{"keyword":"git commit"},{"keyword":"🤖"},{"keyword":"🚀"},{"keyword":"🎉"},{"keyword":"✨"},{"keyword":"🔥"},{"keyword":"💡"},{"keyword":"👍"},{"keyword":"❤️"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"no-roadmap-references","triggers":[{"path_prefix":"agents/roadmaps/"},{"path_prefix":"agents/runtime/council/questions/"},{"path_prefix":"agents/runtime/council/responses/"},{"path_prefix":"agents/runtime/council/sessions/"}],"routes_to":["skill:agent-docs-writing","skill:ai-council"],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"onboarding-gate","triggers":[{"phrase":"first turn"},{"keyword":"onboarding"},{"path_prefix":".agent-settings.yml"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"php-coding","triggers":[{"file_pattern":"*.php"},{"keyword":"phpstan"},{"keyword":"ecs"}],"routes_to":["guideline:php/php-coding-patterns"],"workspaces":["engineering"],"packs":["php"]},{"id":"question-not-instruction","triggers":[{"phrase":"warum"},{"phrase":"wieso"},{"phrase":"weshalb"},{"keyword":"why"},{"phrase":"what do you think"},{"phrase":"was denkst du"},{"phrase":"was hältst du"},{"phrase":"geht das"},{"phrase":"kannst du"},{"phrase":"sollte ich"},{"phrase":"should i"},{"phrase":"is it possible"}],"routes_to":[],"workspaces":["engineering"],"packs":["meta"]},{"id":"roadmap-progress-sync","triggers":[{"path_prefix":"agents/roadmaps/"},{"command":"/roadmap:process-step"},{"command":"/roadmap:process-phase"},{"command":"/roadmap:process-full"}],"routes_to":["guideline:agent-infra/roadmap-progress-mechanics"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"skill-quality","triggers":[{"path_prefix":"src/skills/"}],"routes_to":["guideline:agent-infra/skill-quality-checklist"],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"slash-command-routing-policy","triggers":[{"keyword":"/create-pr"},{"keyword":"/commit"},{"keyword":"/fix-ci"},{"phrase":"slash command"}],"routes_to":["skill:command-routing"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"source-confidentiality","triggers":[{"path_prefix":"src/skills/"},{"path_prefix":"src/rules/"},{"path_prefix":"src/domains/"},{"path_prefix":"docs/"},{"path_prefix":"agents/evidence/"},{"path_prefix":"agents/roadmaps/"}],"routes_to":[],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"source-of-truth","triggers":[{"path_prefix":"dist/agent-src/"},{"path_prefix":".augment/"},{"path_prefix":".claude/"},{"path_prefix":".cursor/"}],"routes_to":[],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"symfony-routing","triggers":[{"keyword":"symfony"},{"keyword":"doctrine"},{"keyword":"twig"},{"keyword":"messenger"}],"routes_to":["skill:symfony-workflow"],"workspaces":["engineering"],"packs":["symfony"]},{"id":"user-interaction","triggers":[{"keyword":"option"},{"keyword":"recommendation"},{"phrase":"what do you recommend"},{"phrase":"was empfiehlst du"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]}],"tier_2":[{"id":"active-remediation","triggers":[{"keyword":"refactor"},{"keyword":"duplicate"},{"keyword":"legacy"},{"keyword":"deprecated"},{"keyword":"modernize"},{"keyword":"upgrade"},{"keyword":"cleanup"},{"keyword":"technical debt"}],"routes_to":["guideline:agent-infra/active-remediation-mechanics"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"artifact-drafting-protocol","triggers":[{"phrase":"new skill"},{"phrase":"new rule"},{"phrase":"new command"},{"phrase":"new guideline"},{"phrase":"neue Regel"},{"phrase":"bau mir ein Skill"}],"routes_to":["guideline:agent-infra/artifact-drafting-protocol-mechanics"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"augment-edit-discipline","triggers":[{"path_prefix":".augment/"},{"path_prefix":"src/"},{"keyword":"portable"},{"keyword":"rename"},{"keyword":"delete"}],"routes_to":["guideline:augment-portability-patterns","skill:agent-docs-writing"],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"brand-source-of-truth","triggers":[{"keyword":"brand"},{"keyword":"on-brand"},{"keyword":"off-brand"},{"keyword":"brand tokens"},{"keyword":"brand voice"},{"keyword":"brand guide"},{"keyword":"brand profile"},{"phrase":"brand consistency"},{"phrase":"on brand"},{"phrase":"brand source of truth"}],"routes_to":[],"workspaces":["engineering"],"packs":["brand"]},{"id":"broken-access-control","triggers":[{"keyword":"endpoint"},{"keyword":"route"},{"keyword":"authorization"},{"keyword":"tenant"},{"keyword":"IDOR"},{"keyword":"session"},{"keyword":"login"},{"keyword":"controller"},{"keyword":"findById"}],"routes_to":["skill:authz-review","skill:multi-tenancy","skill:threat-modeling"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"cli-output-handling","triggers":[{"keyword":"git"},{"keyword":"phpstan"},{"keyword":"rector"},{"keyword":"phpunit"},{"keyword":"composer"},{"keyword":"npm"},{"keyword":"pnpm"},{"keyword":"yarn"},{"keyword":"eslint"},{"keyword":"tsc"},{"keyword":"vitest"},{"keyword":"jest"},{"keyword":"pytest"},{"keyword":"ruff"},{"keyword":"mypy"},{"keyword":"pyright"},{"keyword":"cargo"},{"keyword":"golangci-lint"},{"keyword":"docker"},{"keyword":"kubectl"},{"keyword":"terraform"},{"phrase":"go test"},{"phrase":"go build"}],"routes_to":["skill:rtk-output-filtering"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"code-comment-discipline","triggers":[{"keyword":"comment"},{"keyword":"docblock"},{"keyword":"phpdoc"},{"keyword":"jsdoc"},{"keyword":"docstring"},{"keyword":"implement"},{"keyword":"class"},{"keyword":"method"},{"keyword":"refactor"}],"routes_to":["guideline:code-clarity"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"code-provenance","triggers":[{"keyword":"port this"},{"keyword":"adapt this"},{"keyword":"based on this repo"},{"keyword":"similar implementation"},{"keyword":"found this on GitHub"},{"keyword":"borrow"},{"keyword":"vendored"},{"keyword":"reference implementation"}],"routes_to":["skill:license-compliance-audit","skill:license-compliance-borrow-check","skill:license-compliance-credits"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"commit-conventions","triggers":[{"keyword":"commit"},{"keyword":"branch"},{"phrase":"conventional commits"}],"routes_to":["skill:conventional-commits-writing"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"communication-through-line","triggers":[{"phrase":"reporting progress"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"content-quoting-floor","triggers":[{"keyword":"quote"},{"keyword":"excerpt"},{"keyword":"verbatim"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"cross-source-consistency","triggers":[{"keyword":"ticket"},{"keyword":"refine"},{"keyword":"acceptance criteria"},{"keyword":"mockup"},{"keyword":"screenshot"},{"keyword":"attachment"},{"keyword":"roadmap"},{"keyword":"estimate"},{"phrase":"plan this ticket"},{"phrase":"refine this ticket"},{"phrase":"is this ticket clear"},{"phrase":"implement the ticket"}],"routes_to":["guideline:agent-infra/cross-source-consistency-mechanics"],"workspaces":["engineering","product"],"packs":["engineering-base","product-basic"]},{"id":"decision-revisit-gate","triggers":[{"keyword":"don't relitigate"},{"keyword":"honest null"},{"keyword":"already decided"},{"keyword":"locked decision"},{"keyword":"budget blocks"}],"routes_to":["skill:decision-review"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"delegation-policy","triggers":[{"keyword":"delegate"},{"keyword":"orchestrate"},{"keyword":"subagent"},{"keyword":"parallel"},{"phrase":"review these"},{"phrase":"analyze the codebase"},{"phrase":"for each"},{"keyword":"analyse"},{"keyword":"analyze"}],"routes_to":["skill:subagent-orchestration"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"design-fidelity","triggers":[{"keyword":"prototype"},{"keyword":"mockup"},{"keyword":"wireframe"},{"keyword":"design system"},{"keyword":"design spec"},{"keyword":"Figma"},{"keyword":"handoff"},{"keyword":"Claude Design"},{"phrase":"match the design"},{"phrase":"build this design"},{"phrase":"design fidelity"},{"phrase":"stick to the design"},{"phrase":"design.html"},{"phrase":"attached artifact"},{"phrase":"provided artifact"},{"phrase":"übernimm das design"},{"phrase":"baue das nach"},{"phrase":"bau das nach"},{"phrase":"1:1 um"},{"phrase":"1:1 nach"},{"phrase":"claude.site/artifacts"},{"file_pattern":"*design.html"},{"path_prefix":".claude/design-system/"}],"routes_to":["guideline:design-fidelity-mechanics"],"workspaces":["engineering"],"packs":["engineering-base","frontend-design"]},{"id":"design-review-after-ui-write","triggers":[{"path_prefix":"resources/views/"},{"path_prefix":"resources/js/"},{"keyword":"component"},{"keyword":"design token"}],"routes_to":["skill:accessibility-auditor","skill:design-review"],"workspaces":["agent-config-maintainer","engineering"],"packs":["frontend-design"]},{"id":"doc-screenshot-hygiene","triggers":[{"keyword":"screenshot"},{"keyword":"screenshots"},{"keyword":"screen capture"},{"keyword":"screen grab"},{"keyword":"admin panel screenshot"},{"keyword":"dashboard screenshot"},{"keyword":"docs site"},{"keyword":"Starlight"},{"phrase":"add a screenshot"},{"phrase":"screenshot for the docs"},{"phrase":"screenshot in the readme"},{"phrase":"embed an image in the docs"},{"phrase":"put a screenshot"},{"phrase":"generate a docs site"},{"phrase":"capture the ui"},{"path_prefix":"docs/media/"}],"routes_to":["skill:screenshot-hygiene"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"domain-adoption-policy","triggers":[{"keyword":"mobile track"},{"keyword":"ml track"},{"keyword":"blockchain track"},{"path_prefix":"src/skills/"}],"routes_to":["guideline:agent-infra/domain-adoption-gates"],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"domain-safety-disclaimer","triggers":[{"keyword":"legal brief"},{"keyword":"contract redline"},{"keyword":"terms of service"},{"keyword":"privacy policy"},{"keyword":"diagnosis"},{"keyword":"symptoms"},{"keyword":"dosage"},{"keyword":"medication"},{"keyword":"investment memo"},{"keyword":"tax position"},{"keyword":"strategic recommendation"},{"keyword":"board memo"},{"keyword":"executive summary"},{"phrase":"review this contract"},{"phrase":"is this symptom"},{"phrase":"should I invest"},{"phrase":"what should we do"}],"routes_to":["skill:brand-identity","skill:brand-strategy","skill:contracts-cognition","skill:dcf-modeling","skill:decision-record","skill:privacy-review","skill:scenario-modeling","skill:stakeholder-tradeoff"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"domain-safety-pii","triggers":[{"keyword":"support macro"},{"keyword":"ticket response"},{"keyword":"help desk"},{"keyword":"Zendesk"},{"keyword":"Intercom"},{"keyword":"testimonial"},{"keyword":"case study"},{"keyword":"customer story"},{"keyword":"candidate"},{"keyword":"interview notes"},{"keyword":"scorecard"},{"keyword":"rejection email"},{"keyword":"offer letter"},{"keyword":"invoice"},{"keyword":"accounts receivable"},{"keyword":"accounts payable"},{"keyword":"finance memo"},{"keyword":"log"},{"keyword":"logger"},{"keyword":"Sentry"},{"keyword":"Datadog"},{"keyword":"structured log"},{"keyword":"export to CSV"},{"keyword":"data export"},{"keyword":"partner integration"},{"phrase":"draft a response to"},{"phrase":"marketing email featuring"},{"phrase":"draft feedback for"},{"phrase":"log the user"},{"phrase":"send them the spreadsheet"}],"routes_to":["skill:data-handling-judgment","skill:logging-monitoring","skill:privacy-review","skill:secrets-management"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"domain-safety-retention","triggers":[{"keyword":"retention policy"},{"keyword":"data retention"},{"keyword":"record retention"},{"keyword":"ticket retention"},{"keyword":"CRM retention"},{"keyword":"delete financial"},{"keyword":"purge invoice"},{"keyword":"DSAR"},{"keyword":"data subject request"},{"keyword":"right to be forgotten"},{"phrase":"how long should we keep"},{"phrase":"when can we delete"},{"phrase":"delete customer data"},{"phrase":"how long do we keep tickets"}],"routes_to":["skill:data-handling-judgment","skill:privacy-review"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"downstream-changes","triggers":[{"keyword":"callers"},{"keyword":"imports"},{"keyword":"downstream"},{"phrase":"api changed"}],"routes_to":[],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"engineering-safety-floor","triggers":[{"keyword":"production"},{"keyword":"deploy"},{"keyword":"migration"},{"keyword":"schema change"},{"keyword":"DROP TABLE"},{"keyword":"TRUNCATE"},{"keyword":"force push"},{"keyword":"rebase main"},{"keyword":"rollback"},{"keyword":"secrets rotation"},{"keyword":"IAM"},{"keyword":"DNS"},{"keyword":"terraform apply"},{"keyword":"kubectl apply"},{"phrase":"ship to prod"},{"phrase":"deploy to production"},{"phrase":"merge to main"},{"phrase":"release this"}],"routes_to":["skill:launch-readiness","skill:threat-modeling"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"evaluator-independence","triggers":[{"keyword":"blind review"},{"keyword":"blind pass"},{"keyword":"honest null"},{"keyword":"no-findings"},{"keyword":"adversarial review"},{"keyword":"judge"},{"phrase":"review my own"},{"phrase":"commission a review"},{"phrase":"second opinion on my"}],"routes_to":[],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"external-code-graph-interop","triggers":[{"keyword":"scip"},{"keyword":"code-graph"},{"keyword":"code graph"},{"phrase":"graph.json"},{"phrase":"who calls"},{"phrase":"call graph"},{"phrase":"find references"},{"phrase":"where is this used"}],"routes_to":[],"workspaces":["engineering"],"packs":["meta"]},{"id":"external-reference-deep-dive","triggers":[{"keyword":"github.com/"},{"keyword":"source of truth"},{"phrase":"reference repo"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"finance-safety-floor","triggers":[{"keyword":"runway"},{"keyword":"burn"},{"keyword":"valuation"},{"keyword":"DCF"},{"keyword":"IRR"},{"keyword":"MOIC"},{"keyword":"LTV"},{"keyword":"payback"},{"keyword":"sensitivity"},{"keyword":"fundraise"},{"keyword":"term sheet"},{"keyword":"dilution"},{"keyword":"NRR"},{"keyword":"EBITDA"},{"keyword":"free cash flow"},{"phrase":"what's it worth"},{"phrase":"how long do we have"},{"phrase":"should we raise"},{"phrase":"model the scenarios"}],"routes_to":["skill:dcf-modeling","skill:forecasting","skill:runway-cognition","skill:scenario-modeling","skill:unit-economics-modeling"],"workspaces":["finance"],"packs":["finance-advanced","finance-basic"]},{"id":"framework-neutrality-in-generic-skills","triggers":[{"path_prefix":"src/skills/"},{"path_prefix":"src/rules/"},{"path_prefix":"src/agent-src/commands/"},{"keyword":"FormRequest"},{"keyword":"PHPStan"},{"keyword":"php artisan"},{"keyword":"composer.json"},{"keyword":"Eloquent"},{"keyword":"Pest"},{"keyword":"Blade"},{"keyword":"vendor/bin"},{"keyword":"Artisan"},{"keyword":"Rector"},{"phrase":"every controller"},{"phrase":"all controllers"},{"phrase":"generic skill"}],"routes_to":["guideline:agent-infra/framework-neutrality-patterns"],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"git-history-discipline","triggers":[{"keyword":"git rebase"},{"keyword":"rebase --onto"},{"keyword":"reset --hard"},{"keyword":"fixup"},{"keyword":"--amend"},{"keyword":"force-push"},{"keyword":"--force-with-lease"},{"keyword":"squash-merge"},{"phrase":"branch diverged"},{"phrase":"pull --rebase failed"},{"phrase":"ahead and behind"},{"phrase":"unexpected commits on the branch"},{"phrase":"commits I did not create"}],"routes_to":["skill:git-workflow"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"history-discipline","triggers":[{"keyword":"audit"},{"keyword":"audit log"},{"keyword":"activity log"},{"keyword":"history"},{"keyword":"event sourcing"},{"keyword":"changelog"},{"phrase":"who changed"},{"phrase":"wer hat was"},{"phrase":"track changes"},{"phrase":"change history"}],"routes_to":["skill:history-design"],"workspaces":["engineering"],"packs":["history-discipline"]},{"id":"icon-consistency","triggers":[{"keyword":"icon"},{"keyword":"iconography"},{"keyword":"lucide"},{"keyword":"heroicons"},{"keyword":"icon set"},{"phrase":"icon system"}],"routes_to":[],"workspaces":["engineering"],"packs":["frontend-design"]},{"id":"image-likeness-and-rights","triggers":[{"keyword":"/image:"},{"keyword":"image generation"},{"keyword":"generate an image"},{"keyword":"logo"},{"keyword":"likeness"},{"keyword":"trademark"},{"keyword":"brand mark"},{"path_prefix":"scripts/ai-image/adapters/"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering","gtm"],"packs":["ai-image"]},{"id":"improve-before-implement","triggers":[{"keyword":"refactor"},{"keyword":"implement"},{"keyword":"migration"}],"routes_to":["guideline:agent-infra/agent-interaction-and-decision-quality"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"invite-challenge","triggers":[{"keyword":"plan"},{"keyword":"design"},{"keyword":"architecture"},{"keyword":"approach"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"laravel-translations","triggers":[{"path_prefix":"lang/"},{"keyword":"translation"},{"keyword":"__()"},{"keyword":"trans("}],"routes_to":["skill:laravel"],"workspaces":["engineering"],"packs":["laravel"]},{"id":"legal-safety-floor","triggers":[{"keyword":"NDA"},{"keyword":"DPA"},{"keyword":"data processing agreement"},{"keyword":"contract review"},{"keyword":"redline"},{"keyword":"clause"},{"keyword":"GDPR"},{"keyword":"Art. 28"},{"keyword":"controller"},{"keyword":"processor"},{"keyword":"privilege"},{"keyword":"work product"},{"phrase":"review this contract"},{"phrase":"is this a legal problem"},{"phrase":"check this NDA"}],"routes_to":["skill:contract-review","skill:dpa-review","skill:legal-intake-triage","skill:nda-triage"],"workspaces":["legal-review-prep"],"packs":["legal-review-prep"]},{"id":"lethal-trifecta-guard","triggers":[{"path_prefix":"src/skills/"},{"path_prefix":"src/agent-src/commands/"},{"keyword":"lethal trifecta"},{"keyword":"untrusted content"},{"keyword":"exfiltration"},{"keyword":"data exfil"},{"phrase":"fetch and send"},{"phrase":"read the file and post"}],"routes_to":[],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"linked-projects-onboarding-gate","triggers":[{"keyword":"linked project"},{"keyword":"cross-repo"},{"keyword":"sibling repo"},{"path_prefix":".idea/modules.xml"},{"path_prefix":".idea/vcs.xml"}],"routes_to":["guideline:agent-infra/linked-projects-onboarding-gate"],"workspaces":["agent-config-maintainer","engineering"],"packs":["engineering-base"]},{"id":"markdown-safe-codeblocks","triggers":[{"keyword":"triple backticks"},{"file_pattern":"*.md"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"media-governance-routing","triggers":[{"keyword":"/video:"},{"keyword":"/image:"},{"keyword":"/audio:"},{"keyword":"deepfake"},{"keyword":"voice clone"},{"keyword":"voice cloning"},{"keyword":"likeness"},{"keyword":"brand impersonation"},{"phrase":"in the style of"},{"phrase":"in the voice of"},{"phrase":"as [public figure]"},{"phrase":"impersonate"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering","gtm"],"packs":["ai-image","ai-video"]},{"id":"media-sync-ground-truth","triggers":[{"keyword":"lip-sync"},{"keyword":"lip sync"},{"keyword":"lipsync"},{"keyword":"music video"},{"keyword":"beat-cut"},{"keyword":"/video:from-song"},{"keyword":"vocal map"},{"phrase":"cut to the beat"},{"phrase":"sing the"},{"phrase":"mit den lippen"},{"phrase":"lippen passend"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering","gtm"],"packs":["ai-video"]},{"id":"minimal-safe-diff","triggers":[{"keyword":"drive-by"},{"keyword":"rewrite"},{"keyword":"fix"},{"phrase":"from scratch"},{"phrase":"second system"}],"routes_to":["guideline:agent-infra/minimal-safe-diff-mechanics"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"missing-tool-handling","triggers":[{"keyword":"command not found"},{"keyword":"not installed"}],"routes_to":["guideline:agent-infra/missing-tool-handling"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"model-recommendation","triggers":[{"phrase":"switch task"},{"phrase":"new task"},{"phrase":"which model"},{"keyword":"model_tier"}],"routes_to":["guideline:agent-infra/model-recommendation"],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"no-pr-progress-comments","triggers":[{"keyword":"gh pr comment"},{"keyword":"PullRequestComment"},{"phrase":"status comment"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"notes-first-reasoning","triggers":[{"keyword":"debug"},{"keyword":"investigate"},{"keyword":"hypothesis"},{"keyword":"root cause"},{"phrase":"figure out why"},{"phrase":"should we use"}],"routes_to":["skill:memory-consolidation"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"output-discipline","triggers":[{"keyword":"// rest of component"},{"keyword":"for brevity"},{"keyword":"rest follows the same pattern"},{"phrase":"similar pattern"}],"routes_to":[],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"persona-governance","triggers":[{"path_prefix":"src/agent-src/personas/"},{"path_prefix":"dist/agent-src/personas/"},{"keyword":"persona"},{"keyword":"personas"},{"phrase":"new persona"},{"phrase":"add a persona"},{"phrase":"specialist persona"},{"phrase":"review lens"}],"routes_to":["contract:persona-schema"],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"prefer-enums-over-literals","triggers":[{"keyword":"enum"},{"keyword":"status"},{"keyword":"kind"},{"keyword":"category"},{"keyword":"migration"}],"routes_to":[],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"preservation-guard","triggers":[{"keyword":"Iron Law"}],"routes_to":[],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"provider-lifecycle-discipline","triggers":[{"keyword":"/video:"},{"keyword":"/image:"},{"keyword":"/audio:"},{"keyword":"ai-video"},{"keyword":"ai-image"},{"keyword":"ai-audio"},{"keyword":"adapter"},{"keyword":"provider"},{"path_prefix":"scripts/ai-video/adapters/"},{"path_prefix":"scripts/ai-image/adapters/"},{"path_prefix":"scripts/media/lib/"},{"path_prefix":"agents/.ai-video.xml"},{"phrase":"lifecycle"},{"phrase":"default provider"}],"routes_to":["contract:provider-lifecycle"],"workspaces":["agent-config-maintainer","engineering","gtm"],"packs":["ai-image","ai-video"]},{"id":"reviewer-awareness","triggers":[{"keyword":"reviewer"},{"phrase":"suggest reviewers"},{"phrase":"risk hotspot"},{"phrase":"ownership map"},{"phrase":"review this pr"}],"routes_to":["skill:review-routing"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"roadmap-ci-steps-policy","triggers":[{"path_prefix":"agents/roadmaps/"},{"path_prefix":"{module_root}/"},{"keyword":"task ci"},{"keyword":"make test"},{"keyword":"npm run check"},{"keyword":"pnpm run check"},{"keyword":"yarn check"},{"keyword":"composer test"},{"phrase":"run the quality pipeline"},{"phrase":"run task ci"},{"phrase":"run the full ci"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"role-mode-adherence","triggers":[{"keyword":"active_role"},{"keyword":"role-mode"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"rule-type-governance","triggers":[{"path_prefix":"src/rules/"}],"routes_to":["guideline:agent-infra/rule-type-governance"],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"runtime-safety","triggers":[{"keyword":"execution"},{"keyword":"automated"},{"keyword":"assisted"},{"keyword":"handler"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"scale-discipline","triggers":[{"keyword":"migration"},{"keyword":"index"},{"keyword":"N+1"},{"keyword":"eager load"},{"keyword":"pagination"},{"keyword":"queue"},{"keyword":"job"},{"keyword":"retention"},{"keyword":"schema"},{"keyword":"SELECT *"},{"phrase":"will this scale"},{"phrase":"review this migration"},{"phrase":"add a table"},{"phrase":"send an email on"}],"routes_to":["skill:schema-review"],"workspaces":["engineering"],"packs":["scale-discipline"]},{"id":"secret-vcs-guard","triggers":[{"keyword":"secret"},{"keyword":"password"},{"keyword":"credential"},{"keyword":"api key"},{"keyword":"token"},{"keyword":".env"},{"keyword":"commit"},{"keyword":"git add"},{"keyword":"svn commit"},{"keyword":"hg commit"},{"keyword":"push"}],"routes_to":["skill:secrets-management"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"security-sensitive-stop","triggers":[{"keyword":"auth"},{"keyword":"billing"},{"keyword":"tenant"},{"keyword":"webhook"},{"keyword":"oauth"},{"keyword":"signing key"}],"routes_to":[],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"senior-engineering-discipline","triggers":[{"keyword":"implement"},{"keyword":"endpoint"},{"keyword":"query"},{"keyword":"migration"},{"keyword":"component"},{"keyword":"seeder"},{"keyword":"dependency"},{"keyword":"refactor"}],"routes_to":["skill:ai-code-blindspots","skill:frontend-render-security","skill:supply-chain-intake","skill:testing-anti-patterns"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"session-canary","triggers":[{"keyword":"canary"},{"keyword":"canary_name"},{"phrase":"session canary"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"settings-ask-protocol","triggers":[{"keyword":"settings:set"},{"keyword":"canary_name"},{"keyword":"rich_skills"},{"keyword":"budget_routing"},{"keyword":"adversarial_council"},{"keyword":"learn_on_session_end"},{"keyword":"open_edited_files"},{"phrase":"ask about a setting"},{"phrase":"settings question"},{"phrase":"should I enable"},{"phrase":"nickname"},{"path_prefix":"docs/contracts/settings-classes.md"}],"routes_to":["contract:settings-classes"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"skill-improvement-trigger","triggers":[{"phrase":"after completing"},{"keyword":"improvement"},{"keyword":"pipeline"}],"routes_to":["skill:skill-improvement-pipeline"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"source-discovery-gate","triggers":[{"keyword":"schema"},{"keyword":"endpoint"},{"phrase":"new API"},{"phrase":"unknown API"},{"phrase":"new vendor package"},{"phrase":"which fields"}],"routes_to":["skill:source-discovery"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"spreadsheet-source-quality","triggers":[{"keyword":"financial data"},{"keyword":"financial model"},{"keyword":"stock price"},{"keyword":"revenue figures"},{"keyword":"market data"},{"phrase":"pull the numbers"}],"routes_to":[],"workspaces":["finance"],"packs":["finance-basic"]},{"id":"strategy-safety-floor","triggers":[{"keyword":"vision"},{"keyword":"positioning"},{"keyword":"moat"},{"keyword":"competitive"},{"keyword":"market entry"},{"keyword":"OKR"},{"keyword":"build vs buy"},{"keyword":"buy vs partner"},{"keyword":"beachhead"},{"keyword":"GTM"},{"keyword":"category"},{"keyword":"where to play"},{"keyword":"where not to play"},{"phrase":"what's our strategy"},{"phrase":"should we enter"},{"phrase":"what's our moat"},{"phrase":"where should we focus"},{"phrase":"should we reorg"}],"routes_to":["skill:build-buy-partner","skill:competitive-moat-analysis","skill:market-entry-analysis","skill:okr-tree-modeling","skill:positioning-strategy","skill:vision-articulation"],"workspaces":["founder"],"packs":["founder-strategy"]},{"id":"think-before-action","triggers":[{"phrase":"before coding"},{"phrase":"before debugging"},{"phrase":"before modifying"},{"keyword":"implement"},{"keyword":"debug"},{"keyword":"refactor"},{"keyword":"fix"},{"keyword":"optimize"}],"routes_to":[],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"token-budget-discipline","triggers":[{"keyword":"token_budget_class"},{"keyword":"rich skill"}],"routes_to":[],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"token-efficiency","triggers":[{"keyword":"minimize tool calls"},{"phrase":"fetching logs"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]},{"id":"token-optimizer-maintenance","triggers":[{"keyword":"cli-output-handling"},{"keyword":"rtk-output-filtering"},{"keyword":"token-efficiency"},{"keyword":"agent-handoff"},{"keyword":"markitdown"},{"keyword":"token-optimizer"}],"routes_to":["skill:token-optimizer"],"workspaces":["agent-config-maintainer"],"packs":["meta"]},{"id":"tool-safety","triggers":[{"keyword":"allowed_tools"},{"keyword":"tool registry"}],"routes_to":[],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"ui-audit-gate","triggers":[{"path_prefix":"resources/views/"},{"path_prefix":"resources/js/"},{"keyword":"component"},{"keyword":"design token"}],"routes_to":["skill:existing-ui-audit","skill:iconography","skill:typography-system"],"workspaces":["agent-config-maintainer","engineering"],"packs":["frontend-design"]},{"id":"untrusted-input-defense","triggers":[{"keyword":"untrusted"},{"keyword":"fetched content"},{"keyword":"tool output"},{"keyword":"web page"},{"keyword":"RAG"},{"keyword":"converted"},{"phrase":"treat as instructions"},{"phrase":"from the web"},{"phrase":"scraped"}],"routes_to":["guideline:agent-infra/untrusted-input-spotlighting"],"workspaces":["engineering"],"packs":["engineering-base"]},{"id":"upstream-proposal","triggers":[{"phrase":"after creating"},{"phrase":"after improving"},{"keyword":"upstream"}],"routes_to":["skill:upstream-contribute"],"workspaces":["agent-config-maintainer","engineering"],"packs":["meta"]},{"id":"user-interrupt-priority","triggers":[{"keyword":"weiter"},{"keyword":"resume"},{"keyword":"continue"},{"phrase":"stop that"},{"phrase":"mach stattdessen"},{"command":"work"},{"command":"roadmap:process-full"},{"command":"roadmap:process-phase"},{"command":"implement-ticket"}],"routes_to":[],"workspaces":["agent-config-maintainer","construction","engineering","finance","founder","gtm","legal-review-prep","ops","product","small-business"],"packs":["meta"]}],"profiles":{"minimal":["__kernel__"],"essential":["__kernel__","downstream-changes"],"full":["__kernel__","__tier_1__","__tier_2__"]}}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * The Node-side half of the nickname prefill — running git, and the last-resort
3
+ * `userInfo()` floor.
4
+ *
5
+ * The order itself is pure and lives in `src/shared/nicknamePrefill.ts`; this
6
+ * file exists only because `src/shared/**` may not import Node built-ins (the
7
+ * `no-restricted-imports` lint enforces it, and the split is the point: the
8
+ * chain stays testable without a machine, the I/O stays where I/O belongs).
9
+ *
10
+ * @see src/shared/nicknamePrefill.ts — the chain
11
+ * @see src/rules/settings-ask-protocol.md § Worked example — the nickname
12
+ */
13
+ import { execFileSync } from 'node:child_process';
14
+ import { userInfo } from 'node:os';
15
+ import { nicknamePrefill } from '../shared/nicknamePrefill.js';
16
+ /**
17
+ * `git config user.name`, or `undefined`.
18
+ *
19
+ * Every failure mode collapses to `undefined` on purpose — no git on PATH, no
20
+ * name configured (exit 1), a slow or hung invocation. A prefill is a
21
+ * convenience; it must never delay or break the surface that wanted it, which
22
+ * is why this carries its own short timeout instead of trusting the caller's.
23
+ *
24
+ * Deliberately NOT `--local`: the merged config includes `~/.gitconfig`, so the
25
+ * wizard still finds a name when it runs outside a repository.
26
+ */
27
+ export function readGitUserName() {
28
+ try {
29
+ const out = execFileSync('git', ['config', 'user.name'], {
30
+ encoding: 'utf8',
31
+ timeout: 1000,
32
+ stdio: ['ignore', 'pipe', 'ignore'],
33
+ });
34
+ const name = out.trim();
35
+ return name === '' ? undefined : name;
36
+ }
37
+ catch {
38
+ return undefined;
39
+ }
40
+ }
41
+ function _defaultOsAccount() {
42
+ try {
43
+ const name = userInfo().username;
44
+ return typeof name === 'string' && name.trim() !== '' ? name.trim() : undefined;
45
+ }
46
+ catch {
47
+ // No resolvable account — an empty prefill is a legal outcome.
48
+ return undefined;
49
+ }
50
+ }
51
+ /** The documented chain, resolved against the real machine. */
52
+ export function resolveNicknamePrefill(env = process.env, probes = {}) {
53
+ const git = (probes.gitUserName ?? readGitUserName)();
54
+ const resolved = nicknamePrefill({ env, gitUserName: git });
55
+ if (resolved.source !== 'none') {
56
+ return resolved;
57
+ }
58
+ // `userInfo()` is what the previous implementation used ALONE. Kept as a
59
+ // floor rather than dropped: on a machine with neither a git identity nor a
60
+ // USER variable it is the only remaining answer, and an empty prefill is
61
+ // strictly worse than a login handle. What changed is its rank — last,
62
+ // not first — and it reports `os-account` so that rank is observable.
63
+ const account = (probes.osAccount ?? _defaultOsAccount)();
64
+ if (account !== undefined && account.trim() !== '') {
65
+ return { name: account.trim(), source: 'os-account' };
66
+ }
67
+ return resolved;
68
+ }
69
+ let _cached;
70
+ /**
71
+ * `resolveNicknamePrefill`, computed at most once per process.
72
+ *
73
+ * The uncached function forks git, and `execFileSync` blocks the event loop for
74
+ * up to its timeout. That is fine once and not fine per request: `GET
75
+ * /api/v1/ping` is a liveness probe polled by the UI bundle and by CI smoke
76
+ * tests, so an un-memoised call there stalls every other route behind a
77
+ * subprocess on a cold or network-backed PATH.
78
+ *
79
+ * Caching is safe because the answer is machine-static for the process
80
+ * lifetime — a git identity or a `USER` variable does not change under a
81
+ * running server — and it is deliberately NOT hidden inside
82
+ * `resolveNicknamePrefill` itself: a general-purpose resolver that silently
83
+ * ignores a changed environment is a trap for the next caller. The server opts
84
+ * in by name.
85
+ */
86
+ export function cachedNicknamePrefill() {
87
+ _cached ??= resolveNicknamePrefill();
88
+ return _cached;
89
+ }
90
+ /**
91
+ * Fill the memo before the server serves anything.
92
+ *
93
+ * Memoisation alone bounds the fork to once per process, but "once" was still
94
+ * landing on the FIRST `GET /api/v1/ping` — the request the UI bundle blocks on
95
+ * at startup, with the event loop held for the duration and every concurrent
96
+ * request queued behind it. Paying it at route-registration time moves the cost
97
+ * out of the request path entirely, which is where it belongs: it is
98
+ * process-startup work, not per-request work.
99
+ *
100
+ * Errors are swallowed for the same reason the resolver swallows them — a
101
+ * prefill is a convenience and must never be the thing that stops a server
102
+ * from starting.
103
+ */
104
+ export function warmNicknamePrefill() {
105
+ try {
106
+ cachedNicknamePrefill();
107
+ }
108
+ catch {
109
+ // A cold memo simply means the first caller resolves it instead.
110
+ }
111
+ }
112
+ /** Drop the memo. Tests only — a process never needs this. */
113
+ export function _resetNicknamePrefillCache() {
114
+ _cached = undefined;
115
+ }
116
+ //# sourceMappingURL=nicknameResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nicknameResolver.js","sourceRoot":"","sources":["../../src/server/nicknameResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,eAAe,EAAwB,MAAM,8BAA8B,CAAC;AAErF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe;IAC3B,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE;YACrD,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACtC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AAiBD,SAAS,iBAAiB;IACtB,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC,QAAQ,CAAC;QACjC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACL,+DAA+D;QAC/D,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,sBAAsB,CAClC,MAAyB,OAAO,CAAC,GAAG,EACpC,SAAyB,EAAE;IAE3B,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,eAAe,CAAC,EAAE,CAAC;IACtD,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,yEAAyE;IACzE,4EAA4E;IAC5E,yEAAyE;IACzE,uEAAuE;IACvE,sEAAsE;IACtE,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,iBAAiB,CAAC,EAAE,CAAC;IAC1D,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,IAAI,OAAoC,CAAC;AAEzC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB;IACjC,OAAO,KAAK,sBAAsB,EAAE,CAAC;IACrC,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,mBAAmB;IAC/B,IAAI,CAAC;QACD,qBAAqB,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACL,iEAAiE;IACrE,CAAC;AACL,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,0BAA0B;IACtC,OAAO,GAAG,SAAS,CAAC;AACxB,CAAC"}
@@ -8,18 +8,26 @@
8
8
  */
9
9
  import { z } from 'zod';
10
10
  import { readFileSync } from 'node:fs';
11
- import { userInfo } from 'node:os';
12
11
  import { PACKAGE_JSON } from '../../cli/paths.js';
13
12
  import { CAPABILITIES } from '../../shared/capabilities.js';
14
13
  import { detectAgentSwitchProfile } from '../../install/agentSwitchProfile.js';
14
+ import { cachedNicknamePrefill, warmNicknamePrefill } from '../nicknameResolver.js';
15
+ /**
16
+ * The wizard's name prefill.
17
+ *
18
+ * Delegates to the one implementation of the chain
19
+ * `src/rules/settings-ask-protocol.md` documents — git user name, then `$USER`,
20
+ * then `$USERNAME`. This used to read `userInfo().username` and nothing else,
21
+ * which is the `$USER`-alone shape that rule forbids in as many words, so the
22
+ * shipped prefill contradicted the shipped rule.
23
+ *
24
+ * The CACHED variant is load-bearing here, not a micro-optimisation: the chain
25
+ * forks git, this route is a liveness probe, and `execFileSync` blocks the
26
+ * event loop — so an uncached call would stall every other route behind a
27
+ * subprocess on each poll. The value is machine-static for the process lifetime.
28
+ */
15
29
  function systemUserName() {
16
- try {
17
- const name = userInfo().username;
18
- return typeof name === 'string' ? name : '';
19
- }
20
- catch {
21
- return '';
22
- }
30
+ return cachedNicknamePrefill().name;
23
31
  }
24
32
  export const PingResponseSchema = z.object({
25
33
  ok: z.literal(true),
@@ -40,9 +48,14 @@ export const PingResponseSchema = z.object({
40
48
  */
41
49
  projectScopeAvailable: z.boolean(),
42
50
  /**
43
- * Best-effort OS account name (e.g. `matze`), used to pre-fill the
44
- * welcome step's name field on a fresh wizard. Empty string when the
45
- * platform does not expose it.
51
+ * Best-effort display name for the human at this machine, used to pre-fill
52
+ * the welcome step's name field on a fresh wizard. Resolves the chain
53
+ * `src/rules/settings-ask-protocol.md` documents — `git config user.name`
54
+ * (so typically a real name, `Mathias Berg`), then `$USER`, then
55
+ * `$USERNAME`, with the OS account as the last-resort floor. It is
56
+ * therefore NOT an OS account name, which is what it used to be and what
57
+ * a consumer reading this field as a login handle would still assume.
58
+ * Empty string when nothing resolves.
46
59
  */
47
60
  systemUser: z.string(),
48
61
  /**
@@ -99,6 +112,11 @@ function readPackageVersion() {
99
112
  }
100
113
  export function pingRoute(opts) {
101
114
  const plugin = async (app) => {
115
+ // Pay the git fork at registration, not on the first poll. Memoisation
116
+ // alone still landed it on request #1 — the one the UI bundle blocks on
117
+ // at startup — with the event loop held and everything else queued
118
+ // behind it. This is process-startup work; it belongs here.
119
+ warmNicknamePrefill();
102
120
  app.get('/api/v1/ping', async () => {
103
121
  const response = {
104
122
  ok: true,
@@ -1 +1 @@
1
- {"version":3,"file":"ping.js","sourceRoot":"","sources":["../../../src/server/routes/ping.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,SAAS,cAAc;IACnB,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC,QAAQ,CAAC;QACjC,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B;;;OAGG;IACH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACnB;;;;;OAKG;IACH,qBAAqB,EAAE,CAAC,CAAC,OAAO,EAAE;IAClC;;;;OAIG;IACH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB;;;;;OAKG;IACH,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE;IAC3B;;;;;OAKG;IACH,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE;IACxB;;;;;;;OAOG;IACH,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE;QACvB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;YACZ,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;YACtB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;YACnB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;SACnD,CAAC;KACL,CAAC;IACF;;;;;;OAMG;IACH,kBAAkB,EAAE,CAAC,CAAC,MAAM,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;QACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACjC,CAAC;CACL,CAAC,CAAC;AAIH,SAAS,kBAAkB;IACvB,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAA0B,CAAC;QACpF,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,OAAO,CAAC;IACnB,CAAC;AACL,CAAC;AAgBD,MAAM,UAAU,SAAS,CAAC,IAAsB;IAC5C,MAAM,MAAM,GAAuB,KAAK,EAAE,GAAoB,EAAE,EAAE;QAC9D,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;YAC/B,MAAM,QAAQ,GAAiB;gBAC3B,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,kBAAkB,EAAE;gBAC7B,WAAW,EAAE,IAAI,CAAC,SAAS;gBAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,IAAI;gBAC5B,qBAAqB,EAAE,IAAI,CAAC,gBAAgB,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI;gBAC5F,UAAU,EAAE,cAAc,EAAE;gBAC5B,cAAc,EAAE,IAAI,CAAC,cAAc,KAAK,IAAI;gBAC5C,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG;gBACjE,YAAY,EAAE,EAAE,GAAG,YAAY,EAAE;gBACjC,kBAAkB,EAAE,wBAAwB,EAAE;aACjD,CAAC;YACF,OAAO,QAAQ,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IACF,OAAO,MAAM,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"ping.js","sourceRoot":"","sources":["../../../src/server/routes/ping.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Is there a human at the other end of this execution?
3
+ *
4
+ * Phase 4 of `road-to-zero-ceremony-settings`: *"Skip cleanly in non-TTY, CI,
5
+ * and headless contexts: no file, defaults, no questions, ever."* A settings
6
+ * question posed where nobody can answer it is not a question — it is either a
7
+ * hang or a silently-taken default wearing a prompt's clothes.
8
+ *
9
+ * WHY THIS MODULE EXISTS RATHER THAN A FOURTH INLINE CHECK. The tree already
10
+ * carries several CI-detection shapes that disagree:
11
+ *
12
+ * - `set && !== '0'` — `src/cli/firstRunNotice.ts`, `src/cli/initRouting.ts`
13
+ * - truthy only — `src/scripts/install.ts`, `src/scripts/release.ts`
14
+ * - exact match — `src/scripts/_lib/exec_evidence.ts` (`'true' | '1'`)
15
+ * - widest, three variables — `src/scripts/reach_doctor.ts`
16
+ * (`CI`, `GITHUB_ACTIONS`, `AGENT_CONFIG_CI`)
17
+ *
18
+ * This module takes the **widest** shape, because the failure modes are
19
+ * asymmetric: a false "interactive" hangs an automated run or fabricates a
20
+ * consent, while a false "non-interactive" merely declines to ask and takes a
21
+ * conservative default — which is the documented behaviour anyway.
22
+ *
23
+ * It deliberately does NOT rewrite those four call sites. Their behaviour is
24
+ * correct for what they gate (a printed notice, a browser launch), and
25
+ * converting them here would be a drive-by change to code this concern does not
26
+ * own. The divergence is recorded rather than repaired — see the roadmap note on
27
+ * Phase 4 step 3.
28
+ *
29
+ * Pure — the environment and the TTY flags are arguments, never read from
30
+ * `process` inside the predicate, so a test never depends on the machine it
31
+ * runs on.
32
+ */
33
+ /**
34
+ * The CI variables this predicate honours, widest-first.
35
+ *
36
+ * A variable counts as set when it is present and not the literal `0` — the
37
+ * `set && !== '0'` convention already used by the first-run notice, kept so a
38
+ * consumer who exports `CI=0` to mean "not CI" is believed.
39
+ */
40
+ const CI_ENV_KEYS = ['CI', 'GITHUB_ACTIONS', 'AGENT_CONFIG_CI'];
41
+ function _flagSet(env, key) {
42
+ const raw = (env[key] ?? '').trim();
43
+ return raw !== '' && raw !== '0';
44
+ }
45
+ /**
46
+ * The reason this execution may not ask, or `null` when a human is reachable.
47
+ *
48
+ * Order is deliberate and is the order a reader should think in: an explicit
49
+ * request not to be asked outranks a capability probe, and CI outranks
50
+ * everything because a CI run that asks is a CI run that hangs.
51
+ */
52
+ export function nonInteractiveReason(probe) {
53
+ for (const key of CI_ENV_KEYS) {
54
+ if (_flagSet(probe.env, key)) {
55
+ return 'ci';
56
+ }
57
+ }
58
+ if (_flagSet(probe.env, 'AGENT_CONFIG_NO_UI')) {
59
+ return 'no-ui-requested';
60
+ }
61
+ if (!probe.stdinTty || !probe.stdoutTty) {
62
+ return 'not-a-tty';
63
+ }
64
+ if (probe.headless === true) {
65
+ return 'headless';
66
+ }
67
+ return null;
68
+ }
69
+ /** Convenience inverse — `true` when a question is answerable. */
70
+ export function isInteractiveSession(probe) {
71
+ return nonInteractiveReason(probe) === null;
72
+ }
73
+ //# sourceMappingURL=interactiveContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactiveContext.js","sourceRoot":"","sources":["../../src/shared/interactiveContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAwBH;;;;;;GAMG;AACH,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,gBAAgB,EAAE,iBAAiB,CAAU,CAAC;AAEzE,SAAS,QAAQ,CAAC,GAAsB,EAAE,GAAW;IACjD,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,OAAO,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG,CAAC;AACrC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAmB;IACpD,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,oBAAoB,CAAC,EAAE,CAAC;QAC5C,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACtC,OAAO,WAAW,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC;IACtB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,oBAAoB,CAAC,KAAmB;IACpD,OAAO,oBAAoB,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AAChD,CAAC"}