@ironbee-ai/cli 0.15.0 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/dist/analytics/{emit.d.ts → claude/emit.d.ts} +1 -1
- package/dist/analytics/claude/emit.d.ts.map +1 -0
- package/dist/analytics/{emit.js → claude/emit.js} +34 -7
- package/dist/analytics/claude/emit.js.map +1 -0
- package/dist/analytics/{hook-trigger.d.ts → claude/hook-trigger.d.ts} +1 -1
- package/dist/analytics/claude/hook-trigger.d.ts.map +1 -0
- package/dist/analytics/{hook-trigger.js → claude/hook-trigger.js} +2 -2
- package/dist/analytics/claude/hook-trigger.js.map +1 -0
- package/dist/analytics/claude/log.d.ts.map +1 -0
- package/dist/analytics/{log.js → claude/log.js} +1 -1
- package/dist/analytics/claude/log.js.map +1 -0
- package/dist/analytics/{merge.d.ts → claude/merge.d.ts} +2 -1
- package/dist/analytics/claude/merge.d.ts.map +1 -0
- package/dist/analytics/{merge.js → claude/merge.js} +13 -1
- package/dist/analytics/claude/merge.js.map +1 -0
- package/dist/analytics/{pricing.d.ts → claude/pricing.d.ts} +1 -13
- package/dist/analytics/claude/pricing.d.ts.map +1 -0
- package/dist/analytics/{pricing.js → claude/pricing.js} +6 -14
- package/dist/analytics/claude/pricing.js.map +1 -0
- package/dist/analytics/{projection.d.ts → claude/projection.d.ts} +31 -7
- package/dist/analytics/claude/projection.d.ts.map +1 -0
- package/dist/analytics/{projection.js → claude/projection.js} +631 -327
- package/dist/analytics/claude/projection.js.map +1 -0
- package/dist/analytics/{spawn.d.ts → claude/spawn.d.ts} +4 -4
- package/dist/analytics/claude/spawn.d.ts.map +1 -0
- package/dist/analytics/{spawn.js → claude/spawn.js} +4 -3
- package/dist/analytics/claude/spawn.js.map +1 -0
- package/dist/analytics/{state.d.ts → claude/state.d.ts} +1 -1
- package/dist/analytics/claude/state.d.ts.map +1 -0
- package/dist/analytics/{state.js → claude/state.js} +2 -2
- package/dist/analytics/claude/state.js.map +1 -0
- package/dist/analytics/claude/transcript.d.ts.map +1 -0
- package/dist/analytics/{transcript.js → claude/transcript.js} +1 -1
- package/dist/analytics/claude/transcript.js.map +1 -0
- package/dist/analytics/codex/api-request.d.ts +108 -0
- package/dist/analytics/codex/api-request.d.ts.map +1 -0
- package/dist/analytics/codex/api-request.js +155 -0
- package/dist/analytics/codex/api-request.js.map +1 -0
- package/dist/analytics/codex/apply-patch.d.ts +21 -0
- package/dist/analytics/codex/apply-patch.d.ts.map +1 -0
- package/dist/analytics/codex/apply-patch.js +49 -0
- package/dist/analytics/codex/apply-patch.js.map +1 -0
- package/dist/analytics/codex/classifier.d.ts +28 -0
- package/dist/analytics/codex/classifier.d.ts.map +1 -0
- package/dist/analytics/codex/classifier.js +111 -0
- package/dist/analytics/codex/classifier.js.map +1 -0
- package/dist/analytics/codex/emit.d.ts +47 -0
- package/dist/analytics/codex/emit.d.ts.map +1 -0
- package/dist/analytics/codex/emit.js +158 -0
- package/dist/analytics/codex/emit.js.map +1 -0
- package/dist/analytics/codex/events-emit.d.ts +62 -0
- package/dist/analytics/codex/events-emit.d.ts.map +1 -0
- package/dist/analytics/codex/events-emit.js +555 -0
- package/dist/analytics/codex/events-emit.js.map +1 -0
- package/dist/analytics/codex/pricing.d.ts +57 -0
- package/dist/analytics/codex/pricing.d.ts.map +1 -0
- package/dist/analytics/codex/pricing.js +125 -0
- package/dist/analytics/codex/pricing.js.map +1 -0
- package/dist/analytics/codex/projection.d.ts +51 -0
- package/dist/analytics/codex/projection.d.ts.map +1 -0
- package/dist/analytics/codex/projection.js +1477 -0
- package/dist/analytics/codex/projection.js.map +1 -0
- package/dist/analytics/codex/spawn.d.ts +27 -0
- package/dist/analytics/codex/spawn.d.ts.map +1 -0
- package/dist/analytics/codex/spawn.js +64 -0
- package/dist/analytics/codex/spawn.js.map +1 -0
- package/dist/analytics/codex/status-snapshot.d.ts +80 -0
- package/dist/analytics/codex/status-snapshot.d.ts.map +1 -0
- package/dist/analytics/codex/status-snapshot.js +206 -0
- package/dist/analytics/codex/status-snapshot.js.map +1 -0
- package/dist/analytics/codex/transcript.d.ts +51 -0
- package/dist/analytics/codex/transcript.d.ts.map +1 -0
- package/dist/analytics/codex/transcript.js +134 -0
- package/dist/analytics/codex/transcript.js.map +1 -0
- package/dist/analytics/codex/types.d.ts +253 -0
- package/dist/analytics/codex/types.d.ts.map +1 -0
- package/dist/analytics/codex/types.js +29 -0
- package/dist/analytics/codex/types.js.map +1 -0
- package/dist/analytics/shared/classifier.d.ts.map +1 -0
- package/dist/analytics/{classifier.js → shared/classifier.js} +9 -0
- package/dist/analytics/shared/classifier.js.map +1 -0
- package/dist/analytics/shared/errors.d.ts.map +1 -0
- package/dist/analytics/shared/errors.js.map +1 -0
- package/dist/analytics/shared/tokens.d.ts +14 -0
- package/dist/analytics/shared/tokens.d.ts.map +1 -0
- package/dist/analytics/shared/tokens.js +17 -0
- package/dist/analytics/shared/tokens.js.map +1 -0
- package/dist/analytics/{types.d.ts → shared/types.d.ts} +42 -9
- package/dist/analytics/shared/types.d.ts.map +1 -0
- package/dist/analytics/shared/types.js.map +1 -0
- package/dist/clients/base.d.ts +9 -0
- package/dist/clients/base.d.ts.map +1 -1
- package/dist/clients/claude/hooks/activity-end.js +1 -1
- package/dist/clients/claude/hooks/activity-end.js.map +1 -1
- package/dist/clients/claude/hooks/activity-start.js +1 -1
- package/dist/clients/claude/hooks/activity-start.js.map +1 -1
- package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -1
- package/dist/clients/claude/hooks/clear-verdict.js +14 -0
- package/dist/clients/claude/hooks/clear-verdict.js.map +1 -1
- package/dist/clients/claude/hooks/session-end.d.ts.map +1 -1
- package/dist/clients/claude/hooks/session-end.js +7 -1
- package/dist/clients/claude/hooks/session-end.js.map +1 -1
- package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
- package/dist/clients/claude/hooks/session-start.js +7 -1
- package/dist/clients/claude/hooks/session-start.js.map +1 -1
- package/dist/clients/claude/hooks/session-status.d.ts.map +1 -1
- package/dist/clients/claude/hooks/session-status.js +13 -9
- package/dist/clients/claude/hooks/session-status.js.map +1 -1
- package/dist/clients/claude/hooks/track-action.d.ts.map +1 -1
- package/dist/clients/claude/hooks/track-action.js +26 -1
- package/dist/clients/claude/hooks/track-action.js.map +1 -1
- package/dist/clients/claude/hooks/verify-gate.d.ts.map +1 -1
- package/dist/clients/claude/hooks/verify-gate.js +8 -1
- package/dist/clients/claude/hooks/verify-gate.js.map +1 -1
- package/dist/clients/claude/index.d.ts +1 -0
- package/dist/clients/claude/index.d.ts.map +1 -1
- package/dist/clients/claude/index.js +7 -0
- package/dist/clients/claude/index.js.map +1 -1
- package/dist/clients/claude/util.d.ts.map +1 -1
- package/dist/clients/claude/util.js +55 -0
- package/dist/clients/claude/util.js.map +1 -1
- package/dist/clients/codex/commands/ironbee-verify/SKILL.md +58 -0
- package/dist/clients/codex/hooks/activity-end.d.ts +9 -0
- package/dist/clients/codex/hooks/activity-end.d.ts.map +1 -0
- package/dist/clients/codex/hooks/activity-end.js +65 -0
- package/dist/clients/codex/hooks/activity-end.js.map +1 -0
- package/dist/clients/codex/hooks/activity-start.d.ts +17 -0
- package/dist/clients/codex/hooks/activity-start.d.ts.map +1 -0
- package/dist/clients/codex/hooks/activity-start.js +38 -0
- package/dist/clients/codex/hooks/activity-start.js.map +1 -0
- package/dist/clients/codex/hooks/clear-verdict.d.ts +55 -0
- package/dist/clients/codex/hooks/clear-verdict.d.ts.map +1 -0
- package/dist/clients/codex/hooks/clear-verdict.js +299 -0
- package/dist/clients/codex/hooks/clear-verdict.js.map +1 -0
- package/dist/clients/codex/hooks/require-verdict.d.ts +30 -0
- package/dist/clients/codex/hooks/require-verdict.d.ts.map +1 -0
- package/dist/clients/codex/hooks/require-verdict.js +109 -0
- package/dist/clients/codex/hooks/require-verdict.js.map +1 -0
- package/dist/clients/codex/hooks/require-verification.d.ts +12 -0
- package/dist/clients/codex/hooks/require-verification.d.ts.map +1 -0
- package/dist/clients/codex/hooks/require-verification.js +136 -0
- package/dist/clients/codex/hooks/require-verification.js.map +1 -0
- package/dist/clients/codex/hooks/session-start.d.ts +10 -0
- package/dist/clients/codex/hooks/session-start.d.ts.map +1 -0
- package/dist/clients/codex/hooks/session-start.js +94 -0
- package/dist/clients/codex/hooks/session-start.js.map +1 -0
- package/dist/clients/codex/hooks/track-action-monitor.d.ts +10 -0
- package/dist/clients/codex/hooks/track-action-monitor.d.ts.map +1 -0
- package/dist/clients/codex/hooks/track-action-monitor.js +168 -0
- package/dist/clients/codex/hooks/track-action-monitor.js.map +1 -0
- package/dist/clients/codex/hooks/track-action-pre.d.ts +18 -0
- package/dist/clients/codex/hooks/track-action-pre.d.ts.map +1 -0
- package/dist/clients/codex/hooks/track-action-pre.js +35 -0
- package/dist/clients/codex/hooks/track-action-pre.js.map +1 -0
- package/dist/clients/codex/hooks/track-action.d.ts +22 -0
- package/dist/clients/codex/hooks/track-action.d.ts.map +1 -0
- package/dist/clients/codex/hooks/track-action.js +350 -0
- package/dist/clients/codex/hooks/track-action.js.map +1 -0
- package/dist/clients/codex/hooks/verify-gate.d.ts +15 -0
- package/dist/clients/codex/hooks/verify-gate.d.ts.map +1 -0
- package/dist/clients/codex/hooks/verify-gate.js +105 -0
- package/dist/clients/codex/hooks/verify-gate.js.map +1 -0
- package/dist/clients/codex/index.d.ts +42 -0
- package/dist/clients/codex/index.d.ts.map +1 -0
- package/dist/clients/codex/index.js +427 -0
- package/dist/clients/codex/index.js.map +1 -0
- package/dist/clients/codex/platforms/command-verify.backend.md +108 -0
- package/dist/clients/codex/platforms/command-verify.browser.md +108 -0
- package/dist/clients/codex/platforms/command-verify.node.md +61 -0
- package/dist/clients/codex/platforms/rule.backend.md +32 -0
- package/dist/clients/codex/platforms/rule.browser.md +17 -0
- package/dist/clients/codex/platforms/rule.node.md +28 -0
- package/dist/clients/codex/platforms/skill.backend.md +95 -0
- package/dist/clients/codex/platforms/skill.browser.md +28 -0
- package/dist/clients/codex/platforms/skill.node.md +62 -0
- package/dist/clients/codex/rules/ironbee-verification.md +48 -0
- package/dist/clients/codex/skills/ironbee-verification.md +80 -0
- package/dist/clients/codex/util.d.ts +193 -0
- package/dist/clients/codex/util.d.ts.map +1 -0
- package/dist/clients/codex/util.js +784 -0
- package/dist/clients/codex/util.js.map +1 -0
- package/dist/clients/cursor/hooks/activity-end.js +1 -1
- package/dist/clients/cursor/hooks/activity-end.js.map +1 -1
- package/dist/clients/cursor/hooks/clear-verdict.d.ts +5 -2
- package/dist/clients/cursor/hooks/clear-verdict.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/clear-verdict.js +12 -3
- package/dist/clients/cursor/hooks/clear-verdict.js.map +1 -1
- package/dist/clients/cursor/hooks/session-end.js +1 -1
- package/dist/clients/cursor/hooks/session-end.js.map +1 -1
- package/dist/clients/cursor/hooks/verify-gate.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/verify-gate.js +6 -1
- package/dist/clients/cursor/hooks/verify-gate.js.map +1 -1
- package/dist/clients/cursor/index.d.ts +1 -0
- package/dist/clients/cursor/index.d.ts.map +1 -1
- package/dist/clients/cursor/index.js +13 -0
- package/dist/clients/cursor/index.js.map +1 -1
- package/dist/clients/registry.d.ts.map +1 -1
- package/dist/clients/registry.js +2 -1
- package/dist/clients/registry.js.map +1 -1
- package/dist/commands/{claude.d.ts → claude/index.d.ts} +1 -1
- package/dist/commands/claude/index.d.ts.map +1 -0
- package/dist/commands/{claude.js → claude/index.js} +12 -6
- package/dist/commands/claude/index.js.map +1 -0
- package/dist/commands/{otel.d.ts → claude/otel.d.ts} +5 -1
- package/dist/commands/claude/otel.d.ts.map +1 -0
- package/dist/commands/{otel.js → claude/otel.js} +9 -5
- package/dist/commands/claude/otel.js.map +1 -0
- package/dist/commands/claude/process-analytics.d.ts +19 -0
- package/dist/commands/claude/process-analytics.d.ts.map +1 -0
- package/dist/commands/{process-analytics.js → claude/process-analytics.js} +16 -15
- package/dist/commands/claude/process-analytics.js.map +1 -0
- package/dist/commands/{statusline-toggle.d.ts → claude/statusline-toggle.d.ts} +2 -2
- package/dist/commands/claude/statusline-toggle.d.ts.map +1 -0
- package/dist/commands/{statusline-toggle.js → claude/statusline-toggle.js} +8 -8
- package/dist/commands/claude/statusline-toggle.js.map +1 -0
- package/dist/commands/{statusline.d.ts → claude/statusline.d.ts} +1 -1
- package/dist/commands/claude/statusline.d.ts.map +1 -0
- package/dist/commands/{statusline.js → claude/statusline.js} +4 -4
- package/dist/commands/claude/statusline.js.map +1 -0
- package/dist/commands/codex/index.d.ts +11 -0
- package/dist/commands/codex/index.d.ts.map +1 -0
- package/dist/commands/codex/index.js +17 -0
- package/dist/commands/codex/index.js.map +1 -0
- package/dist/commands/codex/process-analytics.d.ts +14 -0
- package/dist/commands/codex/process-analytics.d.ts.map +1 -0
- package/dist/commands/codex/process-analytics.js +111 -0
- package/dist/commands/codex/process-analytics.js.map +1 -0
- package/dist/commands/hook.js +12 -0
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/import.js +3 -3
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/queue.js +3 -1
- package/dist/commands/queue.js.map +1 -1
- package/dist/hooks/core/actions.d.ts +17 -1
- package/dist/hooks/core/actions.d.ts.map +1 -1
- package/dist/hooks/core/actions.js +13 -0
- package/dist/hooks/core/actions.js.map +1 -1
- package/dist/hooks/core/activity-end.d.ts.map +1 -1
- package/dist/hooks/core/activity-end.js +4 -0
- package/dist/hooks/core/activity-end.js.map +1 -1
- package/dist/hooks/core/session-state.d.ts +15 -1
- package/dist/hooks/core/session-state.d.ts.map +1 -1
- package/dist/hooks/core/session-state.js +102 -7
- package/dist/hooks/core/session-state.js.map +1 -1
- package/dist/import/claude/analytics-runner.d.ts +1 -1
- package/dist/import/claude/analytics-runner.d.ts.map +1 -1
- package/dist/import/claude/analytics-runner.js +5 -5
- package/dist/import/claude/analytics-runner.js.map +1 -1
- package/dist/import/claude/auth-mode.d.ts +1 -1
- package/dist/import/claude/auth-mode.d.ts.map +1 -1
- package/dist/import/claude/discovery.js +1 -1
- package/dist/import/claude/discovery.js.map +1 -1
- package/dist/import/claude/encoding.js +1 -1
- package/dist/import/claude/encoding.js.map +1 -1
- package/dist/import/claude/events/file-change.d.ts +10 -1
- package/dist/import/claude/events/file-change.d.ts.map +1 -1
- package/dist/import/claude/events/file-change.js +79 -5
- package/dist/import/claude/events/file-change.js.map +1 -1
- package/dist/import/claude/events/tool-call.d.ts +16 -1
- package/dist/import/claude/events/tool-call.d.ts.map +1 -1
- package/dist/import/claude/events/tool-call.js +122 -15
- package/dist/import/claude/events/tool-call.js.map +1 -1
- package/dist/import/claude/runner.d.ts.map +1 -1
- package/dist/import/claude/runner.js +45 -3
- package/dist/import/claude/runner.js.map +1 -1
- package/dist/import/claude/summary.js +1 -1
- package/dist/import/claude/summary.js.map +1 -1
- package/dist/import/claude/transcript-walk.d.ts +1 -1
- package/dist/import/claude/transcript-walk.d.ts.map +1 -1
- package/dist/import/claude/transcript-walk.js +11 -4
- package/dist/import/claude/transcript-walk.js.map +1 -1
- package/dist/import/codex/analytics-runner.d.ts +46 -0
- package/dist/import/codex/analytics-runner.d.ts.map +1 -0
- package/dist/import/codex/analytics-runner.js +116 -0
- package/dist/import/codex/analytics-runner.js.map +1 -0
- package/dist/import/codex/discovery.d.ts +33 -0
- package/dist/import/codex/discovery.d.ts.map +1 -0
- package/dist/import/codex/discovery.js +202 -0
- package/dist/import/codex/discovery.js.map +1 -0
- package/dist/import/codex/events/file-change.d.ts +42 -0
- package/dist/import/codex/events/file-change.d.ts.map +1 -0
- package/dist/import/codex/events/file-change.js +125 -0
- package/dist/import/codex/events/file-change.js.map +1 -0
- package/dist/import/codex/events/tool-call.d.ts +49 -0
- package/dist/import/codex/events/tool-call.d.ts.map +1 -0
- package/dist/import/codex/events/tool-call.js +151 -0
- package/dist/import/codex/events/tool-call.js.map +1 -0
- package/dist/import/codex/runner.d.ts +34 -0
- package/dist/import/codex/runner.d.ts.map +1 -0
- package/dist/import/codex/runner.js +456 -0
- package/dist/import/codex/runner.js.map +1 -0
- package/dist/import/codex/summary.d.ts +20 -0
- package/dist/import/codex/summary.d.ts.map +1 -0
- package/dist/import/codex/summary.js +206 -0
- package/dist/import/codex/summary.js.map +1 -0
- package/dist/import/events/activity.d.ts.map +1 -1
- package/dist/import/events/activity.js +17 -2
- package/dist/import/events/activity.js.map +1 -1
- package/dist/import/events/session.d.ts +11 -1
- package/dist/import/events/session.d.ts.map +1 -1
- package/dist/import/events/session.js +19 -1
- package/dist/import/events/session.js.map +1 -1
- package/dist/import/ids.js +3 -3
- package/dist/import/ids.js.map +1 -1
- package/dist/import/pipeline.d.ts +22 -15
- package/dist/import/pipeline.d.ts.map +1 -1
- package/dist/import/pipeline.js +99 -18
- package/dist/import/pipeline.js.map +1 -1
- package/dist/import/types.d.ts +4 -0
- package/dist/import/types.d.ts.map +1 -1
- package/dist/import/types.js.map +1 -1
- package/dist/index.js +9 -11
- package/dist/index.js.map +1 -1
- package/dist/lib/collector.d.ts +2 -1
- package/dist/lib/collector.d.ts.map +1 -1
- package/dist/lib/collector.js +28 -3
- package/dist/lib/collector.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/event.d.ts +18 -1
- package/dist/lib/event.d.ts.map +1 -1
- package/dist/lib/event.js +25 -1
- package/dist/lib/event.js.map +1 -1
- package/dist/lib/platform-section.d.ts.map +1 -1
- package/dist/lib/platform-section.js +8 -0
- package/dist/lib/platform-section.js.map +1 -1
- package/dist/otel/{context → claude/context}/build.d.ts +1 -1
- package/dist/otel/claude/context/build.d.ts.map +1 -0
- package/dist/otel/{context → claude/context}/build.js +3 -7
- package/dist/otel/claude/context/build.js.map +1 -0
- package/dist/otel/claude/context/classify.d.ts.map +1 -0
- package/dist/otel/claude/context/classify.js.map +1 -0
- package/dist/otel/{context → claude/context}/extract.d.ts +1 -1
- package/dist/otel/claude/context/extract.d.ts.map +1 -0
- package/dist/otel/claude/context/extract.js.map +1 -0
- package/dist/otel/claude/context/markers.d.ts.map +1 -0
- package/dist/otel/{context → claude/context}/markers.js +22 -3
- package/dist/otel/claude/context/markers.js.map +1 -0
- package/dist/otel/claude/context/util.d.ts.map +1 -0
- package/dist/otel/claude/context/util.js.map +1 -0
- package/dist/otel/{daemon → claude/daemon}/ensure.d.ts +1 -1
- package/dist/otel/claude/daemon/ensure.d.ts.map +1 -0
- package/dist/otel/{daemon → claude/daemon}/ensure.js +6 -6
- package/dist/otel/claude/daemon/ensure.js.map +1 -0
- package/dist/otel/{daemon → claude/daemon}/forward.d.ts +1 -1
- package/dist/otel/claude/daemon/forward.d.ts.map +1 -0
- package/dist/otel/{daemon → claude/daemon}/forward.js +0 -0
- package/dist/otel/claude/daemon/forward.js.map +1 -0
- package/dist/otel/claude/daemon/paths.d.ts.map +1 -0
- package/dist/otel/claude/daemon/paths.js.map +1 -0
- package/dist/otel/{daemon → claude/daemon}/process.d.ts +1 -1
- package/dist/otel/claude/daemon/process.d.ts.map +1 -0
- package/dist/otel/{daemon → claude/daemon}/process.js +1 -1
- package/dist/otel/claude/daemon/process.js.map +1 -0
- package/dist/otel/claude/daemon/reprocess.d.ts.map +1 -0
- package/dist/otel/{daemon → claude/daemon}/reprocess.js +2 -2
- package/dist/otel/claude/daemon/reprocess.js.map +1 -0
- package/dist/otel/claude/log-handler.d.ts.map +1 -0
- package/dist/otel/{log-handler.js → claude/log-handler.js} +1 -1
- package/dist/otel/claude/log-handler.js.map +1 -0
- package/dist/otel/collector.js +4 -4
- package/dist/otel/collector.js.map +1 -1
- package/dist/queue/flush.d.ts +23 -0
- package/dist/queue/flush.d.ts.map +1 -1
- package/dist/queue/flush.js +44 -0
- package/dist/queue/flush.js.map +1 -1
- package/dist/queue/handlers/send-event.d.ts.map +1 -1
- package/dist/queue/handlers/send-event.js +5 -4
- package/dist/queue/handlers/send-event.js.map +1 -1
- package/dist/queue/index.d.ts +2 -2
- package/dist/queue/index.d.ts.map +1 -1
- package/dist/queue/index.js +4 -1
- package/dist/queue/index.js.map +1 -1
- package/dist/queue/spawn.d.ts +20 -0
- package/dist/queue/spawn.d.ts.map +1 -1
- package/dist/queue/spawn.js +37 -0
- package/dist/queue/spawn.js.map +1 -1
- package/dist/tui/import/area.js +3 -3
- package/dist/tui/import/area.js.map +1 -1
- package/package.json +2 -1
- package/dist/analytics/classifier.d.ts.map +0 -1
- package/dist/analytics/classifier.js.map +0 -1
- package/dist/analytics/emit.d.ts.map +0 -1
- package/dist/analytics/emit.js.map +0 -1
- package/dist/analytics/errors.d.ts.map +0 -1
- package/dist/analytics/errors.js.map +0 -1
- package/dist/analytics/hook-trigger.d.ts.map +0 -1
- package/dist/analytics/hook-trigger.js.map +0 -1
- package/dist/analytics/log.d.ts.map +0 -1
- package/dist/analytics/log.js.map +0 -1
- package/dist/analytics/merge.d.ts.map +0 -1
- package/dist/analytics/merge.js.map +0 -1
- package/dist/analytics/pricing.d.ts.map +0 -1
- package/dist/analytics/pricing.js.map +0 -1
- package/dist/analytics/projection.d.ts.map +0 -1
- package/dist/analytics/projection.js.map +0 -1
- package/dist/analytics/spawn.d.ts.map +0 -1
- package/dist/analytics/spawn.js.map +0 -1
- package/dist/analytics/state.d.ts.map +0 -1
- package/dist/analytics/state.js.map +0 -1
- package/dist/analytics/transcript.d.ts.map +0 -1
- package/dist/analytics/transcript.js.map +0 -1
- package/dist/analytics/types.d.ts.map +0 -1
- package/dist/analytics/types.js.map +0 -1
- package/dist/commands/claude.d.ts.map +0 -1
- package/dist/commands/claude.js.map +0 -1
- package/dist/commands/otel.d.ts.map +0 -1
- package/dist/commands/otel.js.map +0 -1
- package/dist/commands/process-analytics.d.ts +0 -18
- package/dist/commands/process-analytics.d.ts.map +0 -1
- package/dist/commands/process-analytics.js.map +0 -1
- package/dist/commands/statusline-toggle.d.ts.map +0 -1
- package/dist/commands/statusline-toggle.js.map +0 -1
- package/dist/commands/statusline.d.ts.map +0 -1
- package/dist/commands/statusline.js.map +0 -1
- package/dist/otel/context/build.d.ts.map +0 -1
- package/dist/otel/context/build.js.map +0 -1
- package/dist/otel/context/classify.d.ts.map +0 -1
- package/dist/otel/context/classify.js.map +0 -1
- package/dist/otel/context/extract.d.ts.map +0 -1
- package/dist/otel/context/extract.js.map +0 -1
- package/dist/otel/context/markers.d.ts.map +0 -1
- package/dist/otel/context/markers.js.map +0 -1
- package/dist/otel/context/util.d.ts.map +0 -1
- package/dist/otel/context/util.js.map +0 -1
- package/dist/otel/daemon/ensure.d.ts.map +0 -1
- package/dist/otel/daemon/ensure.js.map +0 -1
- package/dist/otel/daemon/forward.d.ts.map +0 -1
- package/dist/otel/daemon/forward.js.map +0 -1
- package/dist/otel/daemon/paths.d.ts.map +0 -1
- package/dist/otel/daemon/paths.js.map +0 -1
- package/dist/otel/daemon/process.d.ts.map +0 -1
- package/dist/otel/daemon/process.js.map +0 -1
- package/dist/otel/daemon/reprocess.d.ts.map +0 -1
- package/dist/otel/daemon/reprocess.js.map +0 -1
- package/dist/otel/log-handler.d.ts.map +0 -1
- package/dist/otel/log-handler.js.map +0 -1
- /package/dist/analytics/{log.d.ts → claude/log.d.ts} +0 -0
- /package/dist/analytics/{transcript.d.ts → claude/transcript.d.ts} +0 -0
- /package/dist/analytics/{classifier.d.ts → shared/classifier.d.ts} +0 -0
- /package/dist/analytics/{errors.d.ts → shared/errors.d.ts} +0 -0
- /package/dist/analytics/{errors.js → shared/errors.js} +0 -0
- /package/dist/analytics/{types.js → shared/types.js} +0 -0
- /package/dist/otel/{context → claude/context}/classify.d.ts +0 -0
- /package/dist/otel/{context → claude/context}/classify.js +0 -0
- /package/dist/otel/{context → claude/context}/extract.js +0 -0
- /package/dist/otel/{context → claude/context}/markers.d.ts +0 -0
- /package/dist/otel/{context → claude/context}/util.d.ts +0 -0
- /package/dist/otel/{context → claude/context}/util.js +0 -0
- /package/dist/otel/{daemon → claude/daemon}/paths.d.ts +0 -0
- /package/dist/otel/{daemon → claude/daemon}/paths.js +0 -0
- /package/dist/otel/{daemon → claude/daemon}/reprocess.d.ts +0 -0
- /package/dist/otel/{log-handler.d.ts → claude/log-handler.d.ts} +0 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
<!-- Browser cycle verification is ENABLED for this project. The Stop hook
|
|
2
|
+
enforces a browser cycle whenever an edited file matches
|
|
3
|
+
`browser.verifyPatterns`. The `/ironbee-verify` slash command's mode
|
|
4
|
+
arguments (default / full / visual / functional) tune the depth of the
|
|
5
|
+
browser-cycle pass. -->
|
|
6
|
+
|
|
7
|
+
## Mode arguments (browser cycle)
|
|
8
|
+
|
|
9
|
+
- `/ironbee-verify` — **default** — focus on what changed, visual + functional checks on affected areas
|
|
10
|
+
- `/ironbee-verify full` — **full scope** — entire application, all checklists, edge cases, responsive, accessibility deep dive
|
|
11
|
+
- `/ironbee-verify visual` — **visual only** — contrast, layout, spacing, fonts, images, theming
|
|
12
|
+
- `/ironbee-verify functional` — **functional only** — clicks, forms, navigation, data flow, error handling
|
|
13
|
+
|
|
14
|
+
If no argument is given, use **default** mode. `default` and `full` apply to every active cycle (browser, node, backend) — each cycle interprets them in its own terms (see each platform section). `visual` and `functional` apply ONLY to the browser cycle; other active cycles run in `default` mode when these are passed.
|
|
15
|
+
|
|
16
|
+
## Browser steps (all modes)
|
|
17
|
+
|
|
18
|
+
1. **Start verification**: Run `echo '{"session_id":"<your-session-id>"}' | ironbee hook verification-start` via Bash (substitute the actual session ID printed by the SessionStart hook).
|
|
19
|
+
2. **Build and start** the application if not already running
|
|
20
|
+
3. **For EVERY page you visit**, repeat this cycle:
|
|
21
|
+
a. **Navigate** using `mcp__browser-devtools__bdt_navigation_go-to`
|
|
22
|
+
b. **Take a FULL PAGE screenshot** using `mcp__browser-devtools__bdt_content_take-screenshot` with `fullPage: true`
|
|
23
|
+
c. **Take an ARIA snapshot** using `mcp__browser-devtools__bdt_a11y_take-aria-snapshot`
|
|
24
|
+
d. **STOP and visually analyze the screenshot** — switch your focus entirely to finding visual problems. Look at this screenshot as if your ONLY job is to find visual defects:
|
|
25
|
+
**WARNING: ARIA reports DOM content, not what the user actually sees.** Do NOT assume the page looks correct just because ARIA shows the right content. Only the screenshot tells you what the user actually sees.
|
|
26
|
+
- Text readability — is it readable against its background? Look for text that blends in or poor contrast
|
|
27
|
+
- Layout — overlapping elements, unexpected gaps, overflow, content cut off
|
|
28
|
+
- Spacing — consistent padding/margin? Too cramped or too far apart?
|
|
29
|
+
- Colors — intentional and consistent? Any jarring mismatches?
|
|
30
|
+
- Typography — right sizes? Clipped or truncated text?
|
|
31
|
+
- Images/icons — loaded? Right size and aspect ratio?
|
|
32
|
+
- States — empty, loading, disabled, error states rendered properly?
|
|
33
|
+
Report your visual findings before continuing.
|
|
34
|
+
e. **Read the ARIA snapshot** — verify headings, labels, landmarks, and structure
|
|
35
|
+
f. If anything looks wrong → note it as an issue
|
|
36
|
+
4. **Functionally test** — run the checklist for your mode (see below). After each significant interaction, take another screenshot and repeat the visual analysis.
|
|
37
|
+
5. **Check console** for errors using `mcp__browser-devtools__bdt_o11y_get-console-messages`
|
|
38
|
+
6. **Stop** the dev server when verification is complete
|
|
39
|
+
7. **If recording was started, stop it now** — `mcp__browser-devtools__bdt_content_stop-recording`. submit-verdict rejects with `"recording is still active"` when this step is skipped. (Recording is a server-side opt-in via `recording.enable` — when on, the gate forces `mcp__browser-devtools__bdt_content_start-recording` BEFORE the steps above and demands the matching stop here.)
|
|
40
|
+
8. **Submit your verdict** via Bash:
|
|
41
|
+
- Pass: `echo '{"session_id":"...","status":"pass","checks":["..."]}' | ironbee hook submit-verdict`
|
|
42
|
+
- Fail: `echo '{"session_id":"...","status":"fail","checks":["..."],"issues":["describe what failed"]}' | ironbee hook submit-verdict`
|
|
43
|
+
9. **If failed** → collect ALL issues first (finish testing all affected pages), submit one fail verdict with all issues, then fix everything, rebuild, and re-verify. Do not fix one issue at a time — batch fixes to avoid repeated build/restart cycles.
|
|
44
|
+
10. If pass after a previous fail, include `"fixes"` in the verdict describing what was fixed
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Default Mode
|
|
49
|
+
|
|
50
|
+
Focus on the code you changed — not the entire application.
|
|
51
|
+
|
|
52
|
+
### 1. Study the changes
|
|
53
|
+
1. Run `git diff --name-only` and `git diff --name-only HEAD~1`
|
|
54
|
+
2. **Ignore `.ironbee/`, `.claude/`, `.cursor/`** — tool config, not application code
|
|
55
|
+
3. **Read the full diff** (`git diff` and/or `git diff HEAD~1`) — understand every change: what was added, removed, modified. Note specific values (colors, sizes, conditions, logic, API endpoints, component props).
|
|
56
|
+
4. Before opening the browser, you should be able to answer: what exactly changed, what should look or behave differently, and what could go wrong?
|
|
57
|
+
|
|
58
|
+
### 2. Verify in the browser
|
|
59
|
+
- **Cross-reference the diff against what you see.** For each change in the diff, verify it is correctly reflected in the browser. If the diff changes a color → check that color. If it changes a calculation → verify the result. If it adds a component → confirm it renders.
|
|
60
|
+
- **Test the flow end-to-end** — navigate, click, fill forms, submit, verify the outcome
|
|
61
|
+
- **Check one edge case** — empty input, invalid data, or double-click
|
|
62
|
+
- **Console** — any new errors or warnings?
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Full Mode (`/ironbee-verify full`)
|
|
67
|
+
|
|
68
|
+
Comprehensive verification of the **entire application**. Do NOT run `git diff` or scope to recent changes. Test every page, every flow, every visual detail. Any issue is a failure, regardless of when it was introduced.
|
|
69
|
+
|
|
70
|
+
### Visual Checklist
|
|
71
|
+
In addition to the per-page visual analysis in step 3d:
|
|
72
|
+
- **Responsiveness** — does the layout adapt if viewport changes? No horizontal scrolling on standard widths
|
|
73
|
+
- **Borders & separators** — visible and consistent? Not too faint or missing
|
|
74
|
+
- **Scroll behavior** — does the page scroll smoothly? No content hidden behind sticky headers/footers?
|
|
75
|
+
|
|
76
|
+
### Functional Checklist
|
|
77
|
+
- **Navigation** — do links and buttons navigate to the correct pages?
|
|
78
|
+
- **Forms** — fill inputs with real data, select options, submit. Do validation messages appear correctly?
|
|
79
|
+
- **Buttons & interactions** — do click handlers fire? Do toggles, dropdowns, and modals work?
|
|
80
|
+
- **Data flow** — does submitted data appear where expected?
|
|
81
|
+
- **Error handling** — what happens with invalid input? Does the UI handle errors gracefully?
|
|
82
|
+
- **Authentication** — if applicable, do protected routes redirect correctly?
|
|
83
|
+
- **API calls** — do network requests succeed? Check for failed requests in console/network
|
|
84
|
+
- **State persistence** — does state survive page refresh where expected?
|
|
85
|
+
- **Edge cases** — empty inputs, very long text, special characters, rapid clicks
|
|
86
|
+
|
|
87
|
+
### Accessibility (deep dive)
|
|
88
|
+
- Are headings hierarchical? Do form inputs have labels? Are landmarks present?
|
|
89
|
+
- Check for missing alt text on images
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Visual Mode (`/ironbee-verify visual`)
|
|
94
|
+
|
|
95
|
+
Focus exclusively on visual quality. Run the per-page visual analysis from step 3d on every page, plus:
|
|
96
|
+
- **Responsiveness** — viewport changes, no horizontal scrolling
|
|
97
|
+
- **Borders & separators** — visible and consistent?
|
|
98
|
+
- **Scroll behavior** — smooth scrolling, no hidden content
|
|
99
|
+
|
|
100
|
+
Take screenshots of **multiple states** if applicable (hover, active, disabled, empty, populated).
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Functional Mode (`/ironbee-verify functional`)
|
|
105
|
+
|
|
106
|
+
Focus exclusively on behavior. Use the same functional checklist as Full Mode above.
|
|
107
|
+
|
|
108
|
+
Test the **complete user flow**, not just the single step you changed.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<!-- Node backend verification is ENABLED for this project. -->
|
|
2
|
+
|
|
3
|
+
## Backend Node Mode (when `node.verifyPatterns` matches an edited file)
|
|
4
|
+
|
|
5
|
+
> **Precondition: the backend must actually be Node.js.** If you see `pom.xml`, `build.gradle`, `requirements.txt`, `pyproject.toml`, `go.mod`, `Cargo.toml`, etc., this section does NOT apply — `ndt_*` tools won't connect to non-Node processes. Just do browser verification.
|
|
6
|
+
|
|
7
|
+
If the project has node backend verification enabled (`ironbee node enable` once at setup, by an operator who confirmed the backend is Node.js) and your edits touch matching paths (e.g. `server/**`, `pages/api/**`), the Stop hook also enforces a Node cycle. The same `verification-start` covers both cycles; one platform-agnostic verdict covers both.
|
|
8
|
+
|
|
9
|
+
### Mode behavior (node cycle)
|
|
10
|
+
- **default** (no arg or `default`): probe / log only the code paths your diff touched. Map each changed file → the handler(s) it affects → place probes there.
|
|
11
|
+
- **full**: probe / log every Node code path reachable from files matching `node.verifyPatterns`, not just the changed files. Expect a much larger probe set and longer runtime.
|
|
12
|
+
- `visual` / `functional`: browser-only modes; this cycle behaves as `default` when they are passed.
|
|
13
|
+
|
|
14
|
+
### Steps (additive to the browser flow above)
|
|
15
|
+
1. **Identify the running Node process** — note its PID, container name (`docker compose ps`), or inspector port.
|
|
16
|
+
2. **Connect**: `mcp__node-devtools__ndt_debug_connect` with one of `pid` / `processName` / `containerId` / `containerName` / `inspectorPort` / `wsUrl`. Inspector is auto-activated via SIGUSR1 if needed.
|
|
17
|
+
3. **Pick an evidence path** for each changed code path:
|
|
18
|
+
- **Probe path** (proves the code path executed): `mcp__node-devtools__ndt_debug_put-tracepoint` (or `put-logpoint` / `put-exceptionpoint`) at the changed code, exercise the path (e.g. trigger the API call from the browser), then `mcp__node-devtools__ndt_debug_get-probe-snapshots`. At least one probe must come back with `triggered: true`.
|
|
19
|
+
- **Log path** (proves no errors): exercise the path, then `mcp__node-devtools__ndt_debug_get-logs` with the error level filter.
|
|
20
|
+
4. **Disconnect** (optional): `mcp__node-devtools__ndt_debug_disconnect`.
|
|
21
|
+
5. **Submit verdict** — platform-agnostic, just status + checks (+ issues/fixes).
|
|
22
|
+
|
|
23
|
+
### Verdict (platform-agnostic)
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"session_id": "...",
|
|
27
|
+
"status": "pass",
|
|
28
|
+
"checks": ["POST /api/orders returned 201", "tracepoint at handler.ts:42 fired once"]
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
For a multi-cycle pass, both browser and node pass criteria must hold.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Default Mode (node cycle)
|
|
37
|
+
|
|
38
|
+
Focus on the code you changed — not the entire Node service.
|
|
39
|
+
|
|
40
|
+
### 1. Study the changes
|
|
41
|
+
1. Run `git diff --name-only` and `git diff --name-only HEAD~1`
|
|
42
|
+
2. **Ignore `.ironbee/`, `.claude/`, `.cursor/`** — tool config, not application code
|
|
43
|
+
3. **Read the full diff** for every Node file in scope (handler / route / service / middleware) — note new branches, new validations, new error paths, new external calls, changed return values
|
|
44
|
+
4. Before connecting, you should be able to answer: which function(s) execute on the changed path? Where does a tracepoint prove the new code fired? What error logs would prove a regression?
|
|
45
|
+
|
|
46
|
+
### 2. Verify against the running process
|
|
47
|
+
- **Place a probe at each changed code site** — `mcp__node-devtools__ndt_debug_put-tracepoint` for "did it run", `put-logpoint` for variable capture, `put-exceptionpoint` for new throw branches
|
|
48
|
+
- **Exercise the path end-to-end** (trigger from browser, curl, or the backend cycle if active)
|
|
49
|
+
- **Each touched probe must report `triggered: true`** in `mcp__node-devtools__ndt_debug_get-probe-snapshots`
|
|
50
|
+
- **Check one edge case per new branch** — invalid input, missing field, auth failure, …
|
|
51
|
+
- **Logs** — `mcp__node-devtools__ndt_debug_get-logs` at error level; no ERROR-level entries are expected for `pass`
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Full Mode (`/ironbee-verify full`, node cycle)
|
|
56
|
+
|
|
57
|
+
Probe every Node code path reachable from files matching `node.verifyPatterns`, not just the changed files. Do NOT run `git diff` or scope to recent changes.
|
|
58
|
+
|
|
59
|
+
- Place probes at every handler / route / service entry point in scope, plus key internal branch points (early returns, error catches, conditional middleware)
|
|
60
|
+
- Exercise each path with at least one happy-path call AND one failure-path call
|
|
61
|
+
- No ERROR-level log entries are expected after the full run — any unexpected log error is a fail, regardless of when it was introduced
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<!-- Backend protocol verification is ENABLED for this project. The Stop hook
|
|
2
|
+
enforces a backend cycle in addition to the browser cycle whenever an
|
|
3
|
+
edited file matches `backend.verifyPatterns`. -->
|
|
4
|
+
|
|
5
|
+
## Backend cycle (runtime-agnostic protocol verification)
|
|
6
|
+
|
|
7
|
+
When the file matches `backend.verifyPatterns`, the Stop hook ALSO requires verification through the **backend-devtools** MCP server (prefix `bedt_`). The cycle is satisfied by **any one of three** evidence paths: a real protocol call (HTTP / gRPC / GraphQL / WebSocket) against the running service, log inspection from the running service (file / docker / kubernetes) when an external driver is hitting the endpoint, OR direct database inspection for schema / data-state changes. Pick whichever fits the task — language- and framework-independent in all three cases.
|
|
8
|
+
|
|
9
|
+
The backend cycle and the node cycle are **independent**. Node attaches to a Node.js V8 inspector with non-blocking probes (`ndt_*`); backend drives wire protocols and/or reads logs / DB state from outside (`bedt_*`). They can be active in the same task; both must be satisfied for `status: pass`.
|
|
10
|
+
|
|
11
|
+
### Backend-cycle additions to the main flow
|
|
12
|
+
|
|
13
|
+
These attach to the **Required steps** above — they don't replace any step. Numbering follows the main flow:
|
|
14
|
+
|
|
15
|
+
- **Within step 3 (run flow):** also run the backend flow via ONE of three evidence paths:
|
|
16
|
+
- **Protocol-call** — identify the affected endpoint(s) → call the matching protocol tool (`bedt_request_http` / `bedt_request_grpc` / `bedt_request_graphql` / `bedt_request_websocket-open` / `bedt_request_replay`) → inspect status / body / `traceId` → chain follow-up calls when verifying side effects. **A 4xx / 5xx response is a normal result, not an error** — only transport failures populate the `error` field.
|
|
17
|
+
- **Log evidence** — `bedt_log_register-source` (file / docker / kubernetes) → `bedt_log_read` (point-in-time, supports `tail` / `since-until` / `pattern` / `level` / `parseJson` + `jsonFilter` / `contextBefore-After` / `select` / `coalesce`) OR `bedt_log_follow` + `bedt_log_get-followed` (streaming). Fit for jobs / queue workers / async handlers, or any case where an external driver is hitting the endpoint and you only need to verify what the server logged. `bedt_log_register-source` is mandatory on this path (the gate counts it as the setup step).
|
|
18
|
+
- **DB evidence** — `bedt_db_connect` (named, `connectionStringEnv` preferred, default readonly) → ONE of `bedt_db_query` / `bedt_db_describe-table` / `bedt_db_list-tables` / `bedt_db_snapshot` (+ optional `bedt_db_diff`) / `bedt_db_get-changes`. Fit for migrations, seed-data changes, query-result regressions, and any code change whose side effect lives in a relational DB. `bedt_db_connect` is mandatory on this path (same anti-fluke rule as `log-evidence` — the connection name is on the wire).
|
|
19
|
+
- **Within step 6 (submit verdict):** submit one platform-agnostic verdict (`status` + `checks` + optionally `issues` / `fixes`). The gate requires that at least one evidence path (protocol-call, log-evidence, or DB-evidence) was exercised in your `bedt_*` tool calls.
|
|
20
|
+
|
|
21
|
+
### Trace correlation (`o11y_*` is auxiliary, not evidence)
|
|
22
|
+
|
|
23
|
+
IronBee already injects the active verification `traceId` into every backend tool call via `_metadata.traceId`. That id outranks anything `bedt_o11y_new-trace-id` / `bedt_o11y_set-trace-context` would pin for the cycle, so the orchestrator's correlation root stays authoritative. The `o11y_*` tools are still useful for log searches (`bedt_log_read { pattern: traceId }` against an explicit id), but they don't count toward the gate.
|
|
24
|
+
|
|
25
|
+
### Additional BANNED for backend cycle
|
|
26
|
+
|
|
27
|
+
- Calling `bedt_*` tools without first opening a verification cycle (`ironbee hook verification-start`).
|
|
28
|
+
- Treating a 4xx / 5xx response as a transport failure when the test was specifically asking for that error condition (e.g. "POST should reject malformed body with 400"). Decide PASS/FAIL based on the test's intent, not the status code's HTTP-class default.
|
|
29
|
+
- Claiming `status: pass` for a backend cycle without exercising at least one evidence path (no `bedt_request_*` call, no `bedt_log_register-source` + read, no `bedt_db_connect` + read). The gate will reject.
|
|
30
|
+
- Inferring backend behavior by reading code without exercising any evidence path. The cycle is satisfied only by making a real protocol call, reading real logs, or inspecting real DB state on the running service.
|
|
31
|
+
- Reading a pre-existing log source / DB unrelated to your task to fake the log-evidence or db-evidence path. `bedt_log_register-source` and `bedt_db_connect` are required setup steps on those paths so the registration / connection is on the wire.
|
|
32
|
+
- Opening a DB connection with `allowWrites: true` to "set up" verification data without an explicit need (seed / migration). Read-only is the default for a reason — flipping it widens the blast radius if a query goes wrong.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- Browser cycle verification is ENABLED for this project. The Stop hook
|
|
2
|
+
enforces a browser cycle whenever an edited file matches
|
|
3
|
+
`browser.verifyPatterns`. -->
|
|
4
|
+
|
|
5
|
+
**Browser cycle** — frontend file changes (default: most code extensions). Tools come from the **browser-devtools** MCP server (prefix `bdt_`). Verification means navigating to the affected page and FUNCTIONALLY exercising the change in the browser — clicking, typing, submitting — not just looking at it.
|
|
6
|
+
|
|
7
|
+
## Browser flow steps
|
|
8
|
+
|
|
9
|
+
Run the **Browser cycle** flow when an edited file activates it: navigate (`bdt_navigation_go-to`) → functionally test → screenshot (`bdt_content_take-screenshot`) → accessibility (`bdt_a11y_take-aria-snapshot`) → console (`bdt_o11y_get-console-messages`). All four are MANDATORY.
|
|
10
|
+
|
|
11
|
+
- If `recording.enable` is on, the gate forces `bdt_content_start-recording` BEFORE the steps above and rejects the verdict if you don't call `bdt_content_stop-recording` AFTER them. Always pair start/stop around the steps above.
|
|
12
|
+
- The verdict you submit carries only semantic judgment (`status`, `checks`, optionally `issues` / `fixes`). The gate enforces that the required `bdt_*` tools were called and that `checks` is non-empty.
|
|
13
|
+
|
|
14
|
+
## Browser-cycle BANNED
|
|
15
|
+
|
|
16
|
+
- Calling `bdt_*` tools without first opening a verification cycle (`ironbee hook verification-start`).
|
|
17
|
+
- **Submitting a verdict while a browser recording is still active** — always call `bdt_content_stop-recording` BEFORE `ironbee hook submit-verdict`. The recording start/stop pair brackets the verification flow.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!-- Node backend verification is ENABLED for this project. The Stop hook
|
|
2
|
+
enforces a node cycle in addition to the browser cycle whenever an
|
|
3
|
+
edited file matches `node.verifyPatterns`. -->
|
|
4
|
+
|
|
5
|
+
## Node cycle
|
|
6
|
+
|
|
7
|
+
Backend file changes IF the file matches `node.verifyPatterns` ALSO require verification through the **node-devtools** MCP server (prefix `ndt_`). Node-cycle verification means attaching to the running Node process via the V8 inspector, setting a probe (tracepoint / logpoint / exceptionpoint) at the changed code, exercising the path so the probe fires, and reading snapshots — OR inspecting runtime error logs.
|
|
8
|
+
|
|
9
|
+
Both cycles can be active simultaneously (e.g. you edit both a React component and an API handler in the same task). One `verification-start` covers all active cycles; one platform-agnostic verdict covers them all; one retry counter applies globally.
|
|
10
|
+
|
|
11
|
+
### ⚠️ `node-devtools` is ONLY for Node.js backends
|
|
12
|
+
|
|
13
|
+
`node-devtools` is a V8 inspector wrapper. It does NOT work for Java, Python, Go, Rust, Ruby, .NET, PHP, or any other runtime. If you see `pom.xml`, `build.gradle`, `requirements.txt`, `pyproject.toml`, `go.mod`, `Cargo.toml`, etc., the backend is NOT Node.js and you must NOT call `ndt_*` tools — they will fail to connect to non-Node processes.
|
|
14
|
+
|
|
15
|
+
**Misconfiguration recovery.** If you reach this state, the operator enabled the node cycle for a non-Node project by mistake. The Stop hook will keep blocking with `incomplete_tools` for the node cycle until you call `ndt_debug_connect` (which will fail) or until `maxRetries` is exhausted. Don't attempt the connection. Instead, stop and clearly report to the user: the project's backend is not Node.js, and they must run `ironbee node disable` to unblock the gate. Continue with browser-cycle verification only in the meantime.
|
|
16
|
+
|
|
17
|
+
### Node-cycle additions to the main flow
|
|
18
|
+
|
|
19
|
+
These attach to the **Required steps** above — they don't replace any step. Numbering follows the main flow:
|
|
20
|
+
|
|
21
|
+
- **Within step 3 (run flow):** also run the node flow: connect (`ndt_debug_connect`) → set probe (`ndt_debug_put-tracepoint` / `put-logpoint` / `put-exceptionpoint`) AND exercise + read snapshots (`ndt_debug_get-probe-snapshots`), OR exercise + read logs (`ndt_debug_get-logs`). When both browser and node cycles are active, run BOTH within the same verification cycle.
|
|
22
|
+
- **Within step 6 (submit verdict):** submit one platform-agnostic verdict with `status` + `checks` (+ `issues`/`fixes` as needed). Node-cycle pass criteria: process connected, probe triggered (or log path used with no ERROR entries).
|
|
23
|
+
|
|
24
|
+
### Additional BANNED for node cycle
|
|
25
|
+
|
|
26
|
+
- Calling `ndt_*` tools without first opening a verification cycle (`ironbee hook verification-start`).
|
|
27
|
+
- **Calling `ndt_*` tools when the project's backend is NOT Node.js** (Java / Python / Go / Rust / .NET / Ruby / PHP / Elixir / etc.). Use the browser cycle only for non-Node backends.
|
|
28
|
+
- Claiming `status: pass` for a node cycle when no probe triggered AND no log path was used — those criteria must hold.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
<!-- Backend protocol verification is ENABLED for this project. The Stop hook
|
|
2
|
+
enforces a backend cycle in addition to the browser cycle whenever an
|
|
3
|
+
edited file matches `backend.verifyPatterns`. The cycle is runtime- and
|
|
4
|
+
language-agnostic — it binds to wire protocols, not frameworks. -->
|
|
5
|
+
|
|
6
|
+
## Backend cycle — runtime- and language-agnostic
|
|
7
|
+
|
|
8
|
+
The **backend protocol cycle** verifies backend changes by driving real protocol calls (HTTP / gRPC / GraphQL / WebSocket) against the running service and reading the responses, OR by inspecting the logs of the running service (file / docker / kubernetes) when an external driver is hitting the endpoint. It works for ANY backend runtime: Node, Java, Python, Go, Rust, Ruby, .NET, PHP, Elixir, Kotlin, Scala — the agent never attaches to a process.
|
|
9
|
+
|
|
10
|
+
**This is different from the node cycle.** Node-cycle (`ndt_*`) attaches to a V8 inspector and sets non-blocking probes inside a running Node.js process — it's Node-only. Backend-cycle (`bedt_*`) makes outside-in protocol calls and/or reads logs of any service. They can be active at the same time when both are enabled.
|
|
11
|
+
|
|
12
|
+
## Backend flow (three evidence paths — at least one is required)
|
|
13
|
+
|
|
14
|
+
You can satisfy the cycle via **protocol-call evidence** (you drive the request yourself), **log evidence** (something else drives the request, you read the resulting logs), **DB evidence** (you inspect database state directly), or any combination. Pick whichever fits the task; one is enough.
|
|
15
|
+
|
|
16
|
+
### Path A — Protocol-call evidence
|
|
17
|
+
|
|
18
|
+
1. **Confirm a backend service is running** (the user's dev server, Docker compose, k8s port-forward, …). The agent itself does not start the service — ask the user if uncertain.
|
|
19
|
+
2. **Identify the affected endpoint(s)** for your code change. Look at routes / handlers / controllers in the changed files. Map them to wire-level addresses (URL, gRPC service+method, GraphQL operation name, WebSocket path).
|
|
20
|
+
3. **Make a real protocol call** with one of:
|
|
21
|
+
- **HTTP/1.1 + HTTP/2**: `mcp__backend-devtools__bedt_request_http` — full method/headers/body/query/follow-redirects support; ALPN auto-negotiates H2 on TLS, falls back to H1.1.
|
|
22
|
+
- **gRPC**: `mcp__backend-devtools__bedt_request_grpc` — unary + 3 streaming modes; pass `.proto` text or descriptor.
|
|
23
|
+
- **GraphQL**: `mcp__backend-devtools__bedt_request_graphql` — query/mutation, variables, persisted query support.
|
|
24
|
+
- **WebSocket** (stateful — open/send/receive/close cycle):
|
|
25
|
+
- `mcp__backend-devtools__bedt_request_websocket-open` — establish session.
|
|
26
|
+
- `mcp__backend-devtools__bedt_request_websocket-send` / `bedt_request_websocket-receive` — exchange frames.
|
|
27
|
+
- `mcp__backend-devtools__bedt_request_websocket-close` — clean teardown (and `bedt_request_websocket-list` for running sessions).
|
|
28
|
+
- **Replay**: `mcp__backend-devtools__bedt_request_replay` — re-issue a captured curl command or HAR entry.
|
|
29
|
+
4. **Inspect the response** — `status` (HTTP / gRPC code), body, headers, returned `traceId` (always W3C `traceparent`).
|
|
30
|
+
**`4xx/5xx and gRPC non-OK are normal results, not errors.** A test for "404 Not Found" SHOULD return 404. Only transport-level failures (DNS, TLS, timeout, abort) populate the response's `error` field. Decide PASS/FAIL based on what your task actually requires.
|
|
31
|
+
5. **Chain follow-up calls** if you need to verify side effects (e.g. POST then GET to confirm the new resource is readable). Use `bedt_request_set-default-headers` to pin auth tokens once per host, `bedt_request_set-cookies` for session cookies — both stay scoped to that target across calls.
|
|
32
|
+
|
|
33
|
+
### Path B — Log evidence (when an external driver hits the endpoint)
|
|
34
|
+
|
|
35
|
+
Useful when an integration test, the user, or a deploy script is already driving the protocol — your job is to verify "side B" by reading what the server logged. Also a fit for jobs / queue workers / cron handlers where there is no synchronous request to make.
|
|
36
|
+
|
|
37
|
+
1. **Register the log source** with `mcp__backend-devtools__bedt_log_register-source` — pick `type: "file"` for any process whose stdout is redirected to a file, `type: "docker"` for a container (`container: "<name|id>"`), `type: "kubernetes"` for a pod (`pod`, optionally `kubernetesContainer` / `namespace`). Source names are session-unique; re-register to overwrite. Listing/check helpers: `bedt_log_list-sources`, `bedt_log_check-source`.
|
|
38
|
+
2. **Read or follow the source**:
|
|
39
|
+
- `mcp__backend-devtools__bedt_log_read` / `bedt_log_read-multi` — point-in-time read across one or many sources. Filters: `tail` (last N lines), `since` / `until` (ISO-8601 — natively docker; file sources require `parseJson: true` so timestamp is extracted from a JSON field), `pattern` (substring; use for trace-id correlation), `level` (ERROR/WARN/INFO/DEBUG/TRACE/FATAL), `limit`, `parseJson`, `jsonFilter` (dot-path equality predicates against parsed JSON), `contextBefore` / `contextAfter`, `select` (dot-path projection to trim verbose JSONL), `coalesce` (fold multi-line stack traces into one line).
|
|
40
|
+
- `mcp__backend-devtools__bedt_log_follow` — open a streaming subscription that pushes lines into a ring buffer; `bedt_log_get-followed` drains it on demand; `bedt_log_stop-follow` tears it down. Use this when you need to capture logs that emit AFTER your trigger.
|
|
41
|
+
3. **Verify the lines you got match the expectation** — error gone, expected log line present, trace-id chained through. Plain-text and JSON sources are both supported; JSON sources accept structural predicates (`jsonFilter: { 'level': 'error', 'route': '/api/orders' }`).
|
|
42
|
+
4. **Unregister when done** — `bedt_log_unregister-source` cleans up. Optional; the session tears them down at end too.
|
|
43
|
+
|
|
44
|
+
### Path C — DB evidence (when the change touches database state)
|
|
45
|
+
|
|
46
|
+
Best fit for schema migrations, seed-data changes, query-result regressions, and any backend change whose side effect is visible in a relational DB. The agent opens a named, read-only-by-default connection and inspects the state — no need to drive a protocol call when the verification IS reading the DB.
|
|
47
|
+
|
|
48
|
+
1. **Open a named connection** with `mcp__backend-devtools__bedt_db_connect` — `type: "postgres" | "mysql" | "sqlite"`, `connectionString` or (preferred) `connectionStringEnv`. Default is `allowWrites: false` (server-side READ ONLY mode); only set `allowWrites: true` if you need to seed test data. The session can hold multiple named connections side-by-side (`bedt_db_list-connections` to inspect).
|
|
49
|
+
2. **Inspect state** — pick the tool that fits:
|
|
50
|
+
- `mcp__backend-devtools__bedt_db_list-tables` — discover tables.
|
|
51
|
+
- `mcp__backend-devtools__bedt_db_describe-table` — verify schema (columns / types / indexes / FKs) after a migration.
|
|
52
|
+
- `mcp__backend-devtools__bedt_db_query` — run an arbitrary read query (`SELECT count(*) FROM orders WHERE …`, etc.). Always parameterized — the gate honors readonly mode.
|
|
53
|
+
- `mcp__backend-devtools__bedt_db_snapshot` + `bedt_db_diff` — pre/post state diff for verifying that a code path changed exactly the rows it should.
|
|
54
|
+
- `mcp__backend-devtools__bedt_db_watch-changes` + `bedt_db_get-changes` — streaming change capture when a protocol call (or external driver) triggers writes you want to verify after the fact.
|
|
55
|
+
3. **(Optional) Seed / migrate** — `bedt_db_seed` (structured) and `bedt_db_run-script` (raw SQL) write data; both require `allowWrites: true` at connect time. Use sparingly and prefer per-test transactions (`bedt_db_transaction-begin` / `-commit` / `-rollback`) so the seed doesn't leak across tests.
|
|
56
|
+
4. **Disconnect when done** — `bedt_db_disconnect` releases the connection cleanly. Optional; the session tears them down at end too.
|
|
57
|
+
|
|
58
|
+
### Trace correlation across paths (`o11y_*` primitives)
|
|
59
|
+
|
|
60
|
+
The IronBee verification cycle already pins a W3C trace id on every backend tool call via `_metadata.traceId` (see `require-verification`). It outranks any trace pin the agent sets, so you usually don't need the `o11y_*` tools. They are still available when you want to grep logs by trace id, or anchor a multi-tool flow under an explicit id:
|
|
61
|
+
|
|
62
|
+
- `mcp__backend-devtools__bedt_o11y_new-trace-id` — generate a fresh 32-hex id and pin it on the session (shadowed by IronBee's verification traceId for the cycle).
|
|
63
|
+
- `mcp__backend-devtools__bedt_o11y_set-trace-context` — set / clear specific trace-context values.
|
|
64
|
+
- `mcp__backend-devtools__bedt_o11y_get-trace-context` — inspect the current pin (useful for `bedt_log_read { pattern: "<traceId>" }`).
|
|
65
|
+
|
|
66
|
+
### Submit verdict
|
|
67
|
+
|
|
68
|
+
The verdict is platform-agnostic — `status`, `checks`, and (when applicable) `issues` / `fixes`. The gate enforces that AT LEAST one backend evidence path was exercised in your `bedt_*` tool calls (protocol-call OR log-evidence OR DB-evidence) and that `checks` is non-empty.
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"session_id": "<sid>",
|
|
73
|
+
"status": "pass",
|
|
74
|
+
"checks": ["POST /api/orders returned 201 with order id", "GET /api/orders/:id reflects new order"]
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Multi-cycle (browser + backend, or browser + node + backend)
|
|
79
|
+
|
|
80
|
+
Common case: a feature edit touches a `.tsx` page (browser-cycle) and a `routes/orders.ts` (node-cycle if Node.js, plus backend-cycle for protocol verification when `backend` is enabled). All active cycles must be satisfied for `status: pass`. **Single** `verification-start`, **single** verdict, **single** retry counter cover all of them. The verdict shape doesn't change with the number of active cycles — same minimal verdict regardless:
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"session_id": "<sid>",
|
|
85
|
+
"status": "pass",
|
|
86
|
+
"checks": [
|
|
87
|
+
"checkout page renders",
|
|
88
|
+
"POST /api/orders returned 201",
|
|
89
|
+
"tracepoint at handler.ts:42 fired once",
|
|
90
|
+
"orders table reflects the new row"
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
For a multi-cycle pass, EVERY active cycle's pass criteria must hold.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!-- Browser cycle verification is ENABLED for this project. The Stop hook
|
|
2
|
+
enforces a browser cycle whenever an edited file matches
|
|
3
|
+
`browser.verifyPatterns` (default: most code extensions). -->
|
|
4
|
+
|
|
5
|
+
## Browser flow
|
|
6
|
+
|
|
7
|
+
> **Recording (only when `recording.enable` is on in config):** the gate blocks every other browser tool until you first call `mcp__browser-devtools__bdt_content_start-recording`, and `submit-verdict` rejects with `"recording is still active"` unless you call `mcp__browser-devtools__bdt_content_stop-recording` after the steps below. **Treat start/stop as bookends around steps 1-5.** The same is enforced as step 6 of the Universal flow.
|
|
8
|
+
|
|
9
|
+
1. **Navigate**: `mcp__browser-devtools__bdt_navigation_go-to` — go to the affected page(s)
|
|
10
|
+
2. **Interact**: actually exercise what changed — click buttons, fill forms, submit data, trigger workflows. Don't just look at the page.
|
|
11
|
+
3. **Screenshot**: `mcp__browser-devtools__bdt_content_take-screenshot` — capture the final visual state
|
|
12
|
+
4. **Accessibility**: `mcp__browser-devtools__bdt_a11y_take-aria-snapshot` — verify page structure
|
|
13
|
+
5. **Console**: `mcp__browser-devtools__bdt_o11y_get-console-messages` — check for errors
|
|
14
|
+
|
|
15
|
+
All four tools are MANDATORY (the Stop hook checks each). Functional interaction is expected for every verification.
|
|
16
|
+
|
|
17
|
+
### Verdict fields
|
|
18
|
+
The verdict is platform-agnostic — you submit only semantic judgment:
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"session_id": "<sid>",
|
|
23
|
+
"status": "pass",
|
|
24
|
+
"checks": ["form submits successfully", "new item appears in list", "no console errors"]
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
On fail, include `issues`. On pass after a previous fail, include `fixes`.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
<!-- Node backend verification is ENABLED for this project. The Stop hook
|
|
2
|
+
enforces a node cycle in addition to the browser cycle whenever an
|
|
3
|
+
edited file matches `node.verifyPatterns`. -->
|
|
4
|
+
|
|
5
|
+
## ⚠️ CRITICAL: when NOT to use node-devtools
|
|
6
|
+
|
|
7
|
+
**`node-devtools` is ONLY for Node.js backends.** It is a V8 inspector wrapper (`node --inspect` attach via PID / inspector port / Docker container). It does **NOT** work with any other runtime. Do **NOT** call `ndt_*` tools for projects whose backend is:
|
|
8
|
+
- Java (Spring, Quarkus, Micronaut, …) — use the JVM debugger, not supported by IronBee yet
|
|
9
|
+
- Python (FastAPI, Django, Flask, …) — not supported yet
|
|
10
|
+
- Go, Rust, Ruby, .NET, PHP, Elixir, Kotlin/JVM, Swift — not supported yet
|
|
11
|
+
|
|
12
|
+
**How to tell whether the backend is Node.js:**
|
|
13
|
+
- `package.json` is the main project manifest, with `"type": "module"` or `"engines": { "node": ... }`, or scripts that run `node`/`tsx`/`ts-node`.
|
|
14
|
+
- The dev server command is `npm run dev`, `next dev`, `nest start`, `nodemon`, etc.
|
|
15
|
+
|
|
16
|
+
If you see `pom.xml`, `build.gradle`, `requirements.txt`, `pyproject.toml`, `go.mod`, `Cargo.toml`, `Gemfile`, `composer.json`, `*.csproj` — the backend is NOT Node.js. Do NOT call any `ndt_*` tools.
|
|
17
|
+
|
|
18
|
+
**Misconfiguration recovery.** If you read this section it means the operator enabled the node cycle for this project. If the backend isn't actually Node.js, this was a mistake — the Stop hook will keep blocking the gate (with `incomplete_tools` for the node cycle) until you call `ndt_debug_connect` (which will fail) or `maxRetries` is exhausted. Don't attempt the connection. Stop and tell the user clearly: the project's backend is not Node.js; ask them to run `ironbee node disable` to unblock the gate. Continue with browser-cycle verification only in the meantime.
|
|
19
|
+
|
|
20
|
+
## Node flow
|
|
21
|
+
|
|
22
|
+
1. **Identify the running Node process** — note its PID, container name (`docker compose ps`), or inspector port.
|
|
23
|
+
2. **Connect**: `mcp__node-devtools__ndt_debug_connect` with one of `pid` / `processName` / `containerId` / `containerName` / `inspectorPort` / `wsUrl`. SIGUSR1 is auto-sent if the inspector isn't on; for Docker, it goes through `docker exec`.
|
|
24
|
+
3. **Pick an evidence path** per changed code path:
|
|
25
|
+
- **Probe path** (proves the code path executed):
|
|
26
|
+
- Set a probe at the changed location: `ndt_debug_put-tracepoint` (checkpoint), `ndt_debug_put-logpoint` (logged expression), or `ndt_debug_put-exceptionpoint` (caught/uncaught exception).
|
|
27
|
+
- **Exercise the path** (e.g. send a request from the browser, run a CLI command, post to a queue) — without this the probe never fires.
|
|
28
|
+
- Read collected snapshots: `ndt_debug_get-probe-snapshots`. At least one probe must come back with `triggered: true`.
|
|
29
|
+
- **Log path** (proves no errors during execution):
|
|
30
|
+
- Exercise the path.
|
|
31
|
+
- Read errors: `ndt_debug_get-logs` with the error-level filter.
|
|
32
|
+
4. **Disconnect** (optional): `ndt_debug_disconnect`.
|
|
33
|
+
|
|
34
|
+
### Verdict fields
|
|
35
|
+
The verdict is platform-agnostic — you submit only semantic judgment:
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"session_id": "<sid>",
|
|
40
|
+
"status": "pass",
|
|
41
|
+
"checks": ["POST /api/orders returned 201", "tracepoint at handler.ts:42 fired once"]
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Node-cycle pass criteria:
|
|
46
|
+
- If probes were set, at least one must have triggered (proves the code path executed).
|
|
47
|
+
- If only logs were used, no ERROR-level entries.
|
|
48
|
+
- If both forms were used, both conditions must hold.
|
|
49
|
+
|
|
50
|
+
## Multi-cycle (browser + node simultaneously)
|
|
51
|
+
|
|
52
|
+
Common case: in the same task you edit a `.tsx` component (browser-cycle) and a `server/api/*.ts` handler (node-cycle). Both cycles activate. **Single** `verification-start`, **single** `verdict.json`, **single** retry counter cover both. The verdict shape doesn't change — one verdict regardless of how many cycles ran:
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"session_id": "<sid>",
|
|
57
|
+
"status": "pass",
|
|
58
|
+
"checks": ["checkout submits", "POST /api/orders returned 201", "no console errors"]
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
For a multi-cycle `pass`, BOTH cycles' pass criteria must hold.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
You MUST verify all code changes through real tools before completing any task. After every verification attempt, you MUST submit a verdict (pass or fail) via `ironbee hook submit-verdict` before doing anything else. If verification fails, submit the fail verdict first, then fix.
|
|
2
|
+
|
|
3
|
+
Verification runs in **cycles** decided by file-pattern match — you don't choose, the gate detects. Multiple cycles can run in parallel within a single Stop hook; each one has its own activation patterns, tools, and verdict fields.
|
|
4
|
+
|
|
5
|
+
**See the platform sections near the bottom of this file** for which cycles are active for this project, the tools they expose, and the per-cycle verdict fields you must include.
|
|
6
|
+
|
|
7
|
+
## Application lifecycle
|
|
8
|
+
|
|
9
|
+
You manage the running application during verification:
|
|
10
|
+
- **Build** if needed (e.g. `npm run build`, `docker compose build`).
|
|
11
|
+
- **Start** before navigating/connecting (e.g. `npm run dev`, `docker compose up -d`).
|
|
12
|
+
- **Stop** the dev server after verification is complete.
|
|
13
|
+
|
|
14
|
+
Skip start if already running. Fix build errors before proceeding. **Don't guess ports** — check actual via `docker compose ps`, process output, or config.
|
|
15
|
+
|
|
16
|
+
## Required steps
|
|
17
|
+
|
|
18
|
+
1. Build and start the application if not already running.
|
|
19
|
+
2. **Start verification**: `echo '{"session_id":"<your-session-id>"}' | ironbee hook verification-start` — required before any devtools tool call.
|
|
20
|
+
3. **Run the per-cycle flow for every active cycle** — see the platform sections near the bottom of this file. Multiple cycles can be active in the same Stop run; every one of them must be exercised within this single verification cycle.
|
|
21
|
+
4. Stop the dev server when done — every cycle, including the final one.
|
|
22
|
+
5. **Honor any cycle-specific teardown** noted in the platform sections BEFORE submit-verdict.
|
|
23
|
+
6. **IMMEDIATELY submit your verdict** — do NOT edit any code before submitting: `echo '<verdict-json>' | ironbee hook submit-verdict`.
|
|
24
|
+
- Platform-agnostic shape: `status`, `checks` (always required); add `issues` on fail; add `fixes` on pass-after-fail. One verdict regardless of how many cycles ran.
|
|
25
|
+
|
|
26
|
+
The Stop hook checks tool usage for every active cycle and that the verdict carries non-empty `checks`. After EVERY verification attempt, you MUST submit a verdict before doing anything else — even if it failed. Do not skip to fixing code.
|
|
27
|
+
|
|
28
|
+
If verification fails: submit fail verdict → fix the code → re-verify → submit again.
|
|
29
|
+
|
|
30
|
+
Every code edit (Write/Edit) automatically clears your verdict, requiring re-verification.
|
|
31
|
+
|
|
32
|
+
## BANNED
|
|
33
|
+
|
|
34
|
+
- Writing `verdict.json` directly — always use `ironbee hook submit-verdict`.
|
|
35
|
+
- Skipping the fail verdict — always submit fail before fixing, so issues are tracked.
|
|
36
|
+
- Submitting a verdict without actually performing verification through real tools.
|
|
37
|
+
- Submitting a verdict based on assumptions, code reading, or prior knowledge.
|
|
38
|
+
- Copying example verdicts from hook messages without doing real verification first.
|
|
39
|
+
- Calling devtools tools for any cycle without first opening a verification cycle (`ironbee hook verification-start`).
|
|
40
|
+
|
|
41
|
+
<!--IRONBEE:PLATFORM:browser-->
|
|
42
|
+
<!--/IRONBEE:PLATFORM:browser-->
|
|
43
|
+
|
|
44
|
+
<!--IRONBEE:PLATFORM:node-->
|
|
45
|
+
<!--/IRONBEE:PLATFORM:node-->
|
|
46
|
+
|
|
47
|
+
<!--IRONBEE:PLATFORM:backend-->
|
|
48
|
+
<!--/IRONBEE:PLATFORM:backend-->
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ironbee-verification
|
|
3
|
+
description: >
|
|
4
|
+
MANDATORY verification after code changes. Activates when implementing features, fixing
|
|
5
|
+
bugs, modifying UI components, API endpoints, styles, refactoring, or any task that
|
|
6
|
+
changes application behavior. Verification runs in cycles activated by file-pattern
|
|
7
|
+
match — which cycles are wired up for this project is shown in the platform sections
|
|
8
|
+
near the bottom of this file. After every code edit you MUST verify the affected
|
|
9
|
+
cycle(s) through real tools and submit a single verdict (pass or fail) before
|
|
10
|
+
reporting task completion. If verification fails, submit the fail verdict first,
|
|
11
|
+
then fix.
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# IronBee Verification
|
|
15
|
+
|
|
16
|
+
## Rule
|
|
17
|
+
No task is complete until changes are verified — through **real tools**, not by reading code or inferring behavior. After verification, you MUST submit a verdict (pass or fail) before doing anything else. If verification fails, submit the fail verdict first, then fix.
|
|
18
|
+
|
|
19
|
+
## Cycles
|
|
20
|
+
|
|
21
|
+
IronBee runs verification in **cycles**. A single Stop hook can drive multiple cycles in parallel — every active cycle must pass for your task to complete.
|
|
22
|
+
|
|
23
|
+
You don't choose which cycle runs — the file pattern decides. A single edited file can match multiple cycles' patterns and activate them all. Cycles always run in parallel within a single Stop run. Each cycle has its own tools, flow steps, and verdict fields.
|
|
24
|
+
|
|
25
|
+
**See the platform sections near the bottom of this file** for which cycles are active for this project, the tools they expose, and the per-cycle verdict fields you must include.
|
|
26
|
+
|
|
27
|
+
## Application lifecycle (your responsibility)
|
|
28
|
+
|
|
29
|
+
For every active cycle you manage the running application:
|
|
30
|
+
- **Build** if needed (`npm run build`, `docker compose build`, …)
|
|
31
|
+
- **Start** before navigating/connecting (`npm run dev`, `docker compose up -d`, …)
|
|
32
|
+
- **Stop** when verification is complete
|
|
33
|
+
|
|
34
|
+
If already running, skip start. If the build fails, fix it before proceeding.
|
|
35
|
+
|
|
36
|
+
**Don't guess ports.** After starting, check the actual port via `docker compose ps`, process output, or config files.
|
|
37
|
+
|
|
38
|
+
## Universal flow
|
|
39
|
+
|
|
40
|
+
1. Implement your changes (write/edit code).
|
|
41
|
+
2. **Start verification** (one cycle covers every active mode — every active cycle's flow runs within the same verification cycle):
|
|
42
|
+
```
|
|
43
|
+
echo '{"session_id":"<your-session-id>"}' | ironbee hook verification-start
|
|
44
|
+
```
|
|
45
|
+
Devtools tools are blocked without this.
|
|
46
|
+
3. Build and start the application if not already running.
|
|
47
|
+
4. **Run the per-cycle flows for every active cycle.** See the platform sections near the bottom of this file — each enabled cycle's section has its own flow steps and mandatory tools. All active cycles must be exercised within this one verification cycle.
|
|
48
|
+
5. Stop the dev server when verification is complete (every cycle — including the final one).
|
|
49
|
+
6. **Honor any cycle-specific teardown** noted in the platform sections (e.g. recording stop) BEFORE submitting your verdict.
|
|
50
|
+
7. **Submit your verdict immediately** — do NOT edit any code first:
|
|
51
|
+
```
|
|
52
|
+
echo '<verdict-json>' | ironbee hook submit-verdict
|
|
53
|
+
```
|
|
54
|
+
- Verdict shape is platform-agnostic: `status`, `checks`, optionally `issues` / `fixes`. One verdict regardless of how many cycles ran.
|
|
55
|
+
- Pass → `{ "session_id": "...", "status": "pass", "checks": [...] }`
|
|
56
|
+
- Fail → add `"issues": [...]` describing what failed.
|
|
57
|
+
- Pass after a previous fail → add `"fixes": [...]` describing what was repaired.
|
|
58
|
+
- **The Stop hook enforces that you called the required tools for every active cycle and that the verdict carries non-empty `checks`.**
|
|
59
|
+
8. If failed → fix → rebuild → go back to step 2 → repeat until pass.
|
|
60
|
+
|
|
61
|
+
<!--IRONBEE:PLATFORM:browser-->
|
|
62
|
+
<!--/IRONBEE:PLATFORM:browser-->
|
|
63
|
+
|
|
64
|
+
<!--IRONBEE:PLATFORM:node-->
|
|
65
|
+
<!--/IRONBEE:PLATFORM:node-->
|
|
66
|
+
|
|
67
|
+
<!--IRONBEE:PLATFORM:backend-->
|
|
68
|
+
<!--/IRONBEE:PLATFORM:backend-->
|
|
69
|
+
|
|
70
|
+
## Important
|
|
71
|
+
- **Always submit a verdict after every verification attempt** — both pass AND fail. Fail verdicts are tracked for analytics.
|
|
72
|
+
- The Stop hook checks that the required tools were used for every active cycle and that the verdict carries non-empty `checks`.
|
|
73
|
+
- Submit verdicts via `ironbee hook submit-verdict`, never write `verdict.json` directly.
|
|
74
|
+
- Every code edit (Write/Edit) automatically clears your session's verdict.
|
|
75
|
+
- After 3 failed verification attempts, you may complete but must report unresolved issues.
|
|
76
|
+
|
|
77
|
+
## Subagent teams
|
|
78
|
+
- Subagents focus on implementation only — do NOT verify.
|
|
79
|
+
- The main orchestrator agent verifies ALL changes after subagents complete.
|
|
80
|
+
- Each session's verification is isolated via session-specific verdict files.
|