gennady 0.8.3 → 0.8.4-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +230 -3
- package/ai/directives/agent-inbox/arch-interrogation.directive.xml +298 -0
- package/ai/directives/agent-inbox/code-interrogation.directive.xml +53 -0
- package/ai/directives/agent-inbox/golden-chat-output.example.md +137 -0
- package/ai/directives/agent-inbox/posting-rules.directive.xml +131 -0
- package/ai/directives/coding/result-conventions.xml +4 -4
- package/ai/directives/coding/svelte5-runes.xml +30 -30
- package/ai/directives/coding/sveltekit-rules.xml +27 -27
- package/ai/directives/coding/typescript-rules.xml +22 -22
- package/ai/directives/coding/uikit-component-storybook.xml +32 -32
- package/ai/directives/coding/uikit-component-svelte.xml +35 -35
- package/ai/directives/coding/uikit-spec-drafting.xml +22 -22
- package/ai/directives/dbc-audit.directive.xml +38 -38
- package/ai/directives/dev-review.directive.xml +41 -41
- package/ai/directives/infra/eslint-setup.xml +29 -29
- package/ai/directives/infra/git-setup.xml +25 -25
- package/ai/directives/infra/nodejs-npm-setup.xml +36 -36
- package/ai/directives/infra/storybook-setup.xml +22 -22
- package/ai/directives/perf-auditor/perf-auditor.directive.xml +21 -21
- package/ai/directives/perf-auditor/rules/async-latency.xml +50 -50
- package/ai/directives/perf-auditor/rules/data-structures.xml +50 -50
- package/ai/directives/perf-auditor/rules/iteration-fusion.xml +50 -50
- package/ai/directives/perf-auditor/rules/memory-gc.xml +51 -51
- package/ai/directives/sdd/audit.directive.xml +51 -40
- package/ai/directives/sdd/critic-protocol.xml +131 -38
- package/ai/directives/sdd/critic.directive.xml +107 -23
- package/ai/directives/sdd/discovery.directive.xml +499 -202
- package/ai/directives/sdd/fix.directive.xml +104 -12
- package/ai/directives/sdd/interview-protocol.xml +243 -0
- package/ai/directives/sdd/module-decomposition.directive.xml +173 -43
- package/ai/directives/sdd/phase-execution-protocol.xml +57 -19
- package/ai/directives/sdd/scaffold.directive.xml +127 -50
- package/ai/directives/sdd/setup.directive.xml +67 -15
- package/ai/directives/sdd/svelte-ui-discovery.directive.xml +110 -12
- package/ai/directives/sdd/visual-vocabulary.xml +206 -0
- package/ai/directives/semantic-change-extractor.directive.xml +31 -31
- package/ai/directives/testing/common.xml +6 -6
- package/ai/directives/testing/node-test.xml +22 -22
- package/ai/directives/testing/playwright-cli.xml +29 -29
- package/ai/directives/testing/playwright-e2e.xml +29 -29
- package/ai/directives/testing/storybook-usage.xml +27 -27
- package/ai/directives/testing/svelte-testing.xml +27 -27
- package/ai/directives/testing/vitest-rules.xml +25 -25
- package/ai/skills/README.md +150 -0
- package/ai/skills/agent-inbox/SKILL.md +211 -0
- package/ai/skills/prd-interview/PRD_TEMPLATE.md +84 -0
- package/ai/skills/prd-interview/SKILL.md +133 -0
- package/ai/skills/sdd-check/SKILL.md +19 -9
- package/ai/skills/sdd-execute/scripts/README.md +3 -0
- package/ai/skills/sdd-execute/scripts/_sdd-lib.sh +60 -0
- package/ai/skills/sdd-execute/scripts/check.sh +238 -0
- package/ai/skills/sdd-execute/scripts/sdd +12 -0
- package/ai/skills/sdd-hooks-install/SKILL.md +89 -0
- package/ai/skills/workspace-permission-setup/SKILL.md +194 -0
- package/cli/cmd/README.md +221 -0
- package/dist/ai/directives/agent-inbox/arch-interrogation.directive.xml +298 -0
- package/dist/ai/directives/agent-inbox/code-interrogation.directive.xml +53 -0
- package/dist/ai/directives/agent-inbox/golden-chat-output.example.md +137 -0
- package/dist/ai/directives/agent-inbox/posting-rules.directive.xml +131 -0
- package/dist/ai/directives/coding/result-conventions.xml +4 -4
- package/dist/ai/directives/coding/svelte5-runes.xml +30 -30
- package/dist/ai/directives/coding/sveltekit-rules.xml +27 -27
- package/dist/ai/directives/coding/typescript-rules.xml +22 -22
- package/dist/ai/directives/coding/uikit-component-storybook.xml +32 -32
- package/dist/ai/directives/coding/uikit-component-svelte.xml +35 -35
- package/dist/ai/directives/coding/uikit-spec-drafting.xml +22 -22
- package/dist/ai/directives/dbc-audit.directive.xml +38 -38
- package/dist/ai/directives/dev-review.directive.xml +41 -41
- package/dist/ai/directives/infra/eslint-setup.xml +29 -29
- package/dist/ai/directives/infra/git-setup.xml +25 -25
- package/dist/ai/directives/infra/nodejs-npm-setup.xml +36 -36
- package/dist/ai/directives/infra/storybook-setup.xml +22 -22
- package/dist/ai/directives/perf-auditor/perf-auditor.directive.xml +21 -21
- package/dist/ai/directives/perf-auditor/rules/async-latency.xml +50 -50
- package/dist/ai/directives/perf-auditor/rules/data-structures.xml +50 -50
- package/dist/ai/directives/perf-auditor/rules/iteration-fusion.xml +50 -50
- package/dist/ai/directives/perf-auditor/rules/memory-gc.xml +51 -51
- package/dist/ai/directives/sdd/audit.directive.xml +51 -40
- package/dist/ai/directives/sdd/critic-protocol.xml +131 -38
- package/dist/ai/directives/sdd/critic.directive.xml +107 -23
- package/dist/ai/directives/sdd/discovery.directive.xml +499 -202
- package/dist/ai/directives/sdd/fix.directive.xml +104 -12
- package/dist/ai/directives/sdd/interview-protocol.xml +243 -0
- package/dist/ai/directives/sdd/module-decomposition.directive.xml +173 -43
- package/dist/ai/directives/sdd/phase-execution-protocol.xml +57 -19
- package/dist/ai/directives/sdd/scaffold.directive.xml +127 -50
- package/dist/ai/directives/sdd/setup.directive.xml +67 -15
- package/dist/ai/directives/sdd/svelte-ui-discovery.directive.xml +110 -12
- package/dist/ai/directives/sdd/visual-vocabulary.xml +206 -0
- package/dist/ai/directives/semantic-change-extractor.directive.xml +31 -31
- package/dist/ai/directives/testing/common.xml +6 -6
- package/dist/ai/directives/testing/node-test.xml +22 -22
- package/dist/ai/directives/testing/playwright-cli.xml +29 -29
- package/dist/ai/directives/testing/playwright-e2e.xml +29 -29
- package/dist/ai/directives/testing/storybook-usage.xml +27 -27
- package/dist/ai/directives/testing/svelte-testing.xml +27 -27
- package/dist/ai/directives/testing/vitest-rules.xml +25 -25
- package/dist/ai/skills/README.md +150 -0
- package/dist/ai/skills/agent-inbox/SKILL.md +211 -0
- package/dist/ai/skills/prd-interview/PRD_TEMPLATE.md +84 -0
- package/dist/ai/skills/prd-interview/SKILL.md +133 -0
- package/dist/ai/skills/sdd-check/SKILL.md +19 -9
- package/dist/ai/skills/sdd-execute/scripts/README.md +3 -0
- package/dist/ai/skills/sdd-execute/scripts/_sdd-lib.sh +60 -0
- package/dist/ai/skills/sdd-execute/scripts/check.sh +238 -0
- package/dist/ai/skills/sdd-execute/scripts/sdd +12 -0
- package/dist/ai/skills/sdd-hooks-install/SKILL.md +89 -0
- package/dist/ai/skills/workspace-permission-setup/SKILL.md +194 -0
- package/dist/chunks/classify-mr-stage.logic-r9UoBm08.js +50 -0
- package/dist/chunks/help-7_tFXS-7.js +6 -0
- package/dist/chunks/help-BD8-LEeF.js +6 -0
- package/dist/chunks/help-BOdcV1vC.js +8 -0
- package/dist/chunks/help-BZy6KWe9.js +8 -0
- package/dist/chunks/help-BiBPW0kL.js +8 -0
- package/dist/chunks/help-BlgP1zki.js +7 -0
- package/dist/chunks/help-By6Oox_T.js +8 -0
- package/dist/chunks/help-C0GfohvW.js +16 -0
- package/dist/chunks/help-C5KvQuZg.js +6 -0
- package/dist/chunks/help-CQwu2mX9.js +10 -0
- package/dist/chunks/help-CX4FSDZF.js +8 -0
- package/dist/chunks/{help-_Y_TN4DZ.js → help-CXLu7Or0.js} +3 -1
- package/dist/chunks/help-Cko5nwe9.js +6 -0
- package/dist/chunks/help-CmjZqviE.js +18 -0
- package/dist/chunks/help-CseAHWgb.js +8 -0
- package/dist/chunks/help-DWR0EaHq.js +6 -0
- package/dist/chunks/help-Dne6xxS-.js +8 -0
- package/dist/chunks/help-Dv9vgOqy.js +16 -0
- package/dist/chunks/help-Dz9QG1fT.js +6 -0
- package/dist/chunks/{help.cmd-BDO4k0_z.js → help.cmd-BJ6-lc4I.js} +8 -0
- package/dist/chunks/{index-BgKyH0dB.js → index-AHtpvdDo.js} +1 -1
- package/dist/chunks/index-B1F4er8N.js +164 -0
- package/dist/chunks/{index-DoaxOhQ8.js → index-BBm9zeai.js} +1 -2
- package/dist/chunks/index-BEtOYJC5.js +165 -0
- package/dist/chunks/index-BVvD4fSE.js +377 -0
- package/dist/chunks/index-Bw9-54Mu.js +161 -0
- package/dist/chunks/{index-BmABG4HA.js → index-C5B_vY8J.js} +3 -3
- package/dist/chunks/{index-ZpU_VoI0.js → index-CDM6lQ5g.js} +1 -1
- package/dist/chunks/{index-DICatQqS.js → index-CKHpOQ1l.js} +2 -2
- package/dist/chunks/{index-DQpmjvCj.js → index-CL_aLkgt.js} +2 -2
- package/dist/chunks/index-CSZFsxeM.js +259 -0
- package/dist/chunks/{index-9JlEjsvH.js → index-CSz4HqEu.js} +2 -2
- package/dist/chunks/index-CatK_HzA.js +20 -0
- package/dist/chunks/index-CiRNZljf.js +49 -0
- package/dist/chunks/index-D3oX4PrK.js +622 -0
- package/dist/chunks/index-D9zXaNK2.js +100 -0
- package/dist/chunks/index-DHvmyJgt.js +69 -0
- package/dist/chunks/index-DZTNIonC.js +94 -0
- package/dist/chunks/index-DcENgDCF.js +87 -0
- package/dist/chunks/index-DcqdJ116.js +95 -0
- package/dist/chunks/{index-BXWDYM_9.js → index-DfS5AAVu.js} +1 -1
- package/dist/chunks/index-Dlb8K8GQ.js +52 -0
- package/dist/chunks/{index-mkUNzixA.js → index-Isv3MMxW.js} +1 -1
- package/dist/chunks/{index-B4ODZbtC.js → index-N5P1Aadf.js} +2 -2
- package/dist/chunks/index-QHOWgn8q.js +296 -0
- package/dist/chunks/index-SDjD_RBF.js +83 -0
- package/dist/chunks/index-e6-st8zp.js +163 -0
- package/dist/chunks/index-fxRBsDvT.js +94 -0
- package/dist/chunks/index-qFD4Gwhm.js +127 -0
- package/dist/chunks/index-wvamJD3a.js +970 -0
- package/dist/chunks/index-zy8MA-fd.js +140 -0
- package/dist/chunks/locate-clone.logic-CeMtgud4.js +86 -0
- package/dist/chunks/run-review-command.logic-CXcCegK2.js +331 -0
- package/dist/chunks/services-Bv_nk_yC.js +3973 -0
- package/dist/chunks/shared--i1fbMFp.js +891 -0
- package/dist/chunks/worktree-ops.logic-BmJ0w0WS.js +104 -0
- package/dist/cli/cmd/_shared/log-filter.d.ts +6 -0
- package/dist/cli/cmd/_shared/vcs-context-resolver.d.ts +63 -0
- package/dist/cli/cmd/alt-opinion/alt-opinion-parser.d.ts +1 -6
- package/dist/cli/cmd/alt-opinion/alt-opinion-runner.d.ts +1 -5
- package/dist/cli/cmd/alt-opinion/alt-opinion.cmd.d.ts +1 -5
- package/dist/cli/cmd/inbox/_core/logic/build-inbox-context.logic.d.ts +11 -0
- package/dist/cli/cmd/inbox/_core/logic/build-inbox-view.logic.d.ts +88 -0
- package/dist/cli/cmd/inbox/_core/logic/classify-inbox.logic.d.ts +20 -0
- package/dist/cli/cmd/inbox/_core/logic/classify-mr-stage.logic.d.ts +70 -0
- package/dist/cli/cmd/inbox/_core/logic/inbox-registry.logic.d.ts +54 -0
- package/dist/cli/cmd/inbox/_core/logic/render-inbox-view.logic.d.ts +31 -0
- package/dist/cli/cmd/inbox/_core/logic/repos-map.logic.d.ts +19 -0
- package/dist/cli/cmd/inbox/_core/logic/state-paths.logic.d.ts +18 -0
- package/dist/cli/cmd/inbox/help.d.ts +4 -0
- package/dist/cli/cmd/inbox/inbox.cmd.d.ts +2 -0
- package/dist/cli/cmd/inbox/index.d.ts +1 -0
- package/dist/cli/cmd/inbox-context/help.d.ts +4 -0
- package/dist/cli/cmd/inbox-context/inbox-context.cmd.d.ts +2 -0
- package/dist/cli/cmd/inbox-context/index.d.ts +2 -0
- package/dist/cli/cmd/lint/checks/anchor-class-body.check.d.ts +1 -4
- package/dist/cli/cmd/lint/checks/anchor-thin.check.d.ts +10 -0
- package/dist/cli/cmd/lint/checks/region-comment.check.d.ts +14 -0
- package/dist/cli/cmd/lint/checks/word-count.check.d.ts +13 -0
- package/dist/cli/cmd/lint/lint.cmd.d.ts +1 -1
- package/dist/cli/cmd/lint/lint.types.d.ts +14 -3
- package/dist/cli/cmd/lint/utils/resolve-references.fn.d.ts +1 -2
- package/dist/cli/cmd/review/_core/logic/load-review-context-mr.logic.d.ts +3 -2
- package/dist/cli/cmd/review/_core/types/review-command-args.type.d.ts +6 -0
- package/dist/cli/cmd/review/_core/types/review-command-options.type.d.ts +3 -0
- package/dist/cli/cmd/review/_core/types/review-context-mr.type.d.ts +2 -0
- package/dist/cli/cmd/review/_core/xml/build-review-artifact.xml.d.ts +4 -2
- package/dist/cli/cmd/run/help.d.ts +4 -0
- package/dist/cli/cmd/run/index.d.ts +1 -0
- package/dist/cli/cmd/run/run.cmd.d.ts +12 -0
- package/dist/cli/cmd/sync/sync.cmd.d.ts +1 -4
- package/dist/cli/cmd/sync-skills/sync-skills.cmd.d.ts +1 -4
- package/dist/cli/cmd/testcov/help.d.ts +4 -0
- package/dist/cli/cmd/testcov/index.d.ts +1 -0
- package/dist/cli/cmd/testcov/testcov.cmd.d.ts +1 -0
- package/dist/cli/cmd/vcs-approve/help.d.ts +5 -0
- package/dist/cli/cmd/vcs-approve/index.d.ts +1 -0
- package/dist/cli/cmd/vcs-approve/vcs-approve.cmd.d.ts +29 -0
- package/dist/cli/cmd/vcs-diff/help.d.ts +5 -0
- package/dist/cli/cmd/vcs-diff/index.d.ts +2 -0
- package/dist/cli/cmd/vcs-diff/vcs-diff.cmd.d.ts +29 -0
- package/dist/cli/cmd/vcs-discussions/help.d.ts +5 -0
- package/dist/cli/cmd/vcs-discussions/index.d.ts +1 -0
- package/dist/cli/cmd/vcs-discussions/vcs-discussions.cmd.d.ts +18 -0
- package/dist/cli/cmd/vcs-draft-note/help.d.ts +5 -0
- package/dist/cli/cmd/vcs-draft-note/index.d.ts +1 -0
- package/dist/cli/cmd/vcs-draft-note/vcs-draft-note.cmd.d.ts +30 -0
- package/dist/cli/cmd/vcs-job/help.d.ts +5 -0
- package/dist/cli/cmd/vcs-job/index.d.ts +2 -0
- package/dist/cli/cmd/vcs-job/vcs-job.cmd.d.ts +31 -0
- package/dist/cli/cmd/vcs-job-log/help.d.ts +5 -0
- package/dist/cli/cmd/vcs-job-log/index.d.ts +2 -0
- package/dist/cli/cmd/vcs-job-log/vcs-job-log.cmd.d.ts +28 -0
- package/dist/cli/cmd/vcs-mr-create/help.d.ts +5 -0
- package/dist/cli/cmd/vcs-mr-create/index.d.ts +1 -0
- package/dist/cli/cmd/vcs-mr-create/vcs-mr-create.cmd.d.ts +19 -0
- package/dist/cli/cmd/vcs-mr-edit/help.d.ts +5 -0
- package/dist/cli/cmd/vcs-mr-edit/index.d.ts +1 -0
- package/dist/cli/cmd/vcs-mr-edit/vcs-mr-edit.cmd.d.ts +18 -0
- package/dist/cli/cmd/vcs-pipeline/help.d.ts +5 -0
- package/dist/cli/cmd/vcs-pipeline/index.d.ts +2 -0
- package/dist/cli/cmd/vcs-pipeline/vcs-pipeline.cmd.d.ts +29 -0
- package/dist/cli/cmd/vcs-react/help.d.ts +5 -0
- package/dist/cli/cmd/vcs-react/index.d.ts +1 -0
- package/dist/cli/cmd/vcs-react/vcs-react.cmd.d.ts +17 -0
- package/dist/cli/cmd/vcs-reply/vcs-reply.cmd.d.ts +38 -6
- package/dist/cli/cmd/vcs-todo/help.d.ts +4 -0
- package/dist/cli/cmd/vcs-todo/index.d.ts +1 -0
- package/dist/cli/cmd/vcs-todo/vcs-todo.cmd.d.ts +35 -0
- package/dist/cli/cmd/vcs-worktree/_core/logic/locate-clone.logic.d.ts +38 -0
- package/dist/cli/cmd/vcs-worktree/_core/logic/worktree-ops.logic.d.ts +62 -0
- package/dist/cli/cmd/vcs-worktree/help.d.ts +4 -0
- package/dist/cli/cmd/vcs-worktree/index.d.ts +1 -0
- package/dist/cli/cmd/vcs-worktree/vcs-worktree.cmd.d.ts +2 -0
- package/dist/gennady.js +120 -24
- package/dist/index.js +6 -6
- package/dist/services/agent-mon/providers/claude/claude-provider.d.ts +0 -2
- package/dist/services/agent-mon/providers/opencode/db.d.ts +1 -1
- package/dist/services/agent-mon/providers/opencode/opencode-provider.d.ts +0 -2
- package/dist/services/agent-run/core/agent-run-error.d.ts +22 -0
- package/dist/services/agent-run/core/ports/agent-engine.port.d.ts +34 -0
- package/dist/services/agent-run/core/registry.d.ts +35 -0
- package/dist/services/agent-run/core/run-options.type.d.ts +39 -0
- package/dist/services/agent-run/core/run.d.ts +27 -0
- package/dist/services/agent-run/engines/opencode/opencode-engine.d.ts +41 -0
- package/dist/services/agent-run/engines/opencode/opencode-error-map.d.ts +31 -0
- package/dist/services/agent-run/index.d.ts +4 -0
- package/dist/services/dbc/linter/dbc-ast-adapter.types.d.ts +2 -2
- package/dist/services/dbc/linter/dbc-linter.types.d.ts +7 -0
- package/dist/services/dbc/linter/implementations/ts/dbc-ts-ast-adapter.d.ts +6 -11
- package/dist/services/dbc/linter/implementations/ts/dbc-ts-linter.d.ts +28 -23
- package/dist/services/dbc/parser/implementations/jsdoc/dbc-jsdoc-parser.d.ts +0 -2
- package/dist/services/vcs-client/abstract/vcs-client-inbox.d.ts +25 -0
- package/dist/services/vcs-client/abstract/vcs-client-merge-discussions.d.ts +170 -0
- package/dist/services/vcs-client/abstract/vcs-client-merge-requests.d.ts +60 -0
- package/dist/services/vcs-client/abstract/vcs-client-pipeline.d.ts +37 -0
- package/dist/services/vcs-client/abstract/vcs-client-reactions.d.ts +19 -0
- package/dist/services/vcs-client/abstract/vcs-client.d.ts +9 -0
- package/dist/services/vcs-client/entities/vcs-actionable-mr.type.d.ts +56 -0
- package/dist/services/vcs-client/entities/vcs-delete-discussion-query.type.d.ts +9 -0
- package/dist/services/vcs-client/entities/vcs-delete-note-query.type.d.ts +11 -0
- package/dist/services/vcs-client/entities/vcs-draft-note.type.d.ts +9 -0
- package/dist/services/vcs-client/entities/vcs-job-query.type.d.ts +7 -0
- package/dist/services/vcs-client/entities/vcs-job.type.d.ts +15 -0
- package/dist/services/vcs-client/entities/vcs-merge-request-approve-query.type.d.ts +7 -0
- package/dist/services/vcs-client/entities/vcs-merge-request-create-query.type.d.ts +26 -0
- package/dist/services/vcs-client/entities/vcs-merge-request-update-query.type.d.ts +30 -0
- package/dist/services/vcs-client/entities/vcs-pipeline-status.type.d.ts +14 -0
- package/dist/services/vcs-client/entities/vcs-reaction-query.type.d.ts +14 -0
- package/dist/services/vcs-client/entities/vcs-resolve-discussion-query.type.d.ts +11 -0
- package/dist/services/vcs-client/entities/vcs-update-note-query.type.d.ts +11 -0
- package/dist/services/vcs-client/github/vcs-github-client.d.ts +10 -2
- package/dist/services/vcs-client/github/vcs-github-merge-discussions.d.ts +109 -0
- package/dist/services/vcs-client/github/vcs-github-merge-requests.d.ts +52 -10
- package/dist/services/vcs-client/github/vcs-github-reactions.d.ts +31 -0
- package/dist/services/vcs-client/gitlab/vcs-gitlab-client.d.ts +20 -0
- package/dist/services/vcs-client/gitlab/vcs-gitlab-inbox.d.ts +34 -0
- package/dist/services/vcs-client/gitlab/vcs-gitlab-merge-discussions.d.ts +91 -1
- package/dist/services/vcs-client/gitlab/vcs-gitlab-merge-requests.d.ts +64 -3
- package/dist/services/vcs-client/gitlab/vcs-gitlab-pipeline.d.ts +51 -0
- package/dist/services/vcs-client/gitlab/vcs-gitlab-reactions.d.ts +31 -0
- package/dist/shared/common/parse-args.d.ts +1 -1
- package/package.json +5 -3
- package/services/agent-run/engines/opencode/readonly.config.json +14 -0
- package/ai/drafts/DRAFT.md +0 -120
- package/ai/drafts/agent-devgen-class-from-description.rules.xml +0 -123
- package/ai/drafts/agent-typescript-devgen.v1.xml +0 -303
- package/ai/drafts/d.md +0 -65
- package/ai/drafts/music-posts.md +0 -105
- package/dist/ai/drafts/DRAFT.md +0 -120
- package/dist/ai/drafts/agent-devgen-class-from-description.rules.xml +0 -123
- package/dist/ai/drafts/agent-typescript-devgen.v1.xml +0 -303
- package/dist/ai/drafts/d.md +0 -65
- package/dist/ai/drafts/music-posts.md +0 -105
- package/dist/chunks/help-CSPhOoI9.js +0 -8
- package/dist/chunks/help-DL_QBMwy.js +0 -8
- package/dist/chunks/index-4fUNp3za.js +0 -156
- package/dist/chunks/index-9e72uZq7.js +0 -97
- package/dist/chunks/index-C9UEDrqg.js +0 -754
- package/dist/chunks/index-DS_1ZX6G.js +0 -7
- package/dist/chunks/index-jOIhIHdS.js +0 -369
- package/dist/chunks/run-review-command.logic-CHVCVJWO.js +0 -267
- package/dist/chunks/services-IgZptnTi.js +0 -2732
- package/dist/chunks/shared-9J_oXE74.js +0 -763
package/README.md
CHANGED
|
@@ -21,6 +21,24 @@ npx gennady
|
|
|
21
21
|
npx gennady commit
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
+
### 🔧 Установка из исходников
|
|
25
|
+
|
|
26
|
+
Если `npx gennady` недоступен (например, корпоративный npm-registry возвращает `403`):
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
git clone https://github.com/rubaxa/gennady
|
|
30
|
+
cd gennady
|
|
31
|
+
npm ci
|
|
32
|
+
npm run build
|
|
33
|
+
npm link
|
|
34
|
+
|
|
35
|
+
gennady help
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
- Для стабильной работы собирайте релизный тег (`git checkout v0.8.4`), а не `main`.
|
|
39
|
+
- После правок кода пересоберите: `npm run build` (повторный `npm link` не нужен).
|
|
40
|
+
- Для разработки без сборки: `npm run dev -- <команда>`.
|
|
41
|
+
|
|
24
42
|
---
|
|
25
43
|
|
|
26
44
|
## 🧩 Что нужно в окружении
|
|
@@ -73,6 +91,7 @@ npx gennady commit --apply
|
|
|
73
91
|
npx gennady cat ./src
|
|
74
92
|
npx gennady cat "./src/**/*.ts" --output=md
|
|
75
93
|
npx gennady cat ./src --plain
|
|
94
|
+
npx gennady cat --url="https://gitlab.com/.../-/merge_requests/123"
|
|
76
95
|
```
|
|
77
96
|
|
|
78
97
|
**Опции:**
|
|
@@ -81,6 +100,22 @@ npx gennady cat ./src --plain
|
|
|
81
100
|
- `--plain`: без ANSI-цветов
|
|
82
101
|
- `--exclude`, `-e`: исключить паттерны
|
|
83
102
|
- `--ext`: фильтр по расширениям
|
|
103
|
+
- `--url`: MR/PR URL для удалённого сбора файлов
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### 🔍 `review`
|
|
108
|
+
|
|
109
|
+
AI-ревью staged изменений.
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
npx gennady review
|
|
113
|
+
npx gennady review --branch=develop
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**Опции:**
|
|
117
|
+
|
|
118
|
+
- `--branch`, `-b`: target branch для diff (по умолчанию origin/main)
|
|
84
119
|
|
|
85
120
|
---
|
|
86
121
|
|
|
@@ -160,7 +195,6 @@ echo '[{"discussionId":"123","body":"✅ Fixed"}]' | \
|
|
|
160
195
|
npx gennady vcs-reply --project=group/project --iid=123
|
|
161
196
|
|
|
162
197
|
# Проверка без отправки
|
|
163
|
-
|
|
164
198
|
echo '[{"discussionId":"123","body":"✅ Fixed"}]' | \
|
|
165
199
|
npx gennady vcs-reply --project=group/project --iid=123 --dry-run
|
|
166
200
|
```
|
|
@@ -179,19 +213,212 @@ echo '[{"discussionId":"123","body":"✅ Fixed"}]' | \
|
|
|
179
213
|
|
|
180
214
|
---
|
|
181
215
|
|
|
216
|
+
### 🧹 `lint`
|
|
217
|
+
|
|
218
|
+
Валидация TypeScript-файлов: file-header, anchors, DbC-контракты, invariant-count.
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
npx gennady lint ./src
|
|
222
|
+
npx gennady lint --staged
|
|
223
|
+
npx gennady lint ./src --autofix --verbose
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Опции:**
|
|
227
|
+
|
|
228
|
+
- `--autofix`: автоисправление DbC-контрактов
|
|
229
|
+
- `--staged`: только staged и untracked `.ts` (взаимоисключающий с путями)
|
|
230
|
+
- `--verbose`, `-v`: debug-логи
|
|
231
|
+
- `--max-invariants`: макс. инвариантов на сущность (по умолчанию 3)
|
|
232
|
+
- `--exclude`: исключить файлы по glob (повторяемый)
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
### 🗯️ `alt-opinion`
|
|
237
|
+
|
|
238
|
+
Мульти-модельные мнения с опциональным синтезом.
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
# Мнение двух моделей с синтезом
|
|
242
|
+
npx gennady alt-opinion \
|
|
243
|
+
--model="llmproxy/kimi-k2.6" \
|
|
244
|
+
--model="llmproxy/glm-5.1" \
|
|
245
|
+
--synthModel="llmproxy/deepseek-v4-pro" \
|
|
246
|
+
--file="./spec.md"
|
|
247
|
+
|
|
248
|
+
# Через stdin
|
|
249
|
+
cat spec.md | npx gennady alt-opinion \
|
|
250
|
+
--model="llmproxy/gpt-4o" \
|
|
251
|
+
--model="openrouter/claude-sonnet"
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**Опции:**
|
|
255
|
+
|
|
256
|
+
- `--model`: дескриптор модели `provider/model[::prompt.md]` (повторяемый)
|
|
257
|
+
- `--synthModel`: модель-синтезатор
|
|
258
|
+
- `--file`: путь к входному файлу
|
|
259
|
+
- `--modelPrompt`: промпт для всех моделей
|
|
260
|
+
- `--synthPrompt`: промпт для синтезатора
|
|
261
|
+
- `--strict`: exit 1 при ошибке любой модели
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
### 🔄 `sync`
|
|
266
|
+
|
|
267
|
+
Синхронизация `ai/directives/` из npm-пакета в текущий проект.
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
npx gennady sync
|
|
271
|
+
npx gennady sync --dry-run
|
|
272
|
+
npx gennady sync ts-patterns typescript --dry-run
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**Опции:**
|
|
276
|
+
|
|
277
|
+
- `--dry-run`: предпросмотр без записи
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
### 🔄 `sync-skills`
|
|
282
|
+
|
|
283
|
+
Синхронизация SDD-навыков из `ai/skills/` в `.claude/skills/` проекта.
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
npx gennady sync-skills
|
|
287
|
+
npx gennady sync-skills --dry-run
|
|
288
|
+
npx gennady sync-skills sdd-execute
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
**Опции:**
|
|
292
|
+
|
|
293
|
+
- `--dry-run`: предпросмотр без записи
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
### 🧭 `orient`
|
|
298
|
+
|
|
299
|
+
Навигация по проекту: file-header разметка, DBC-контракты, граф зависимостей.
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
npx gennady orient # карта проекта
|
|
303
|
+
npx gennady orient --task=TSK-03 # файлы задачи
|
|
304
|
+
npx gennady orient --consumer=DbcTsLinter # кто потребляет модуль
|
|
305
|
+
npx gennady orient --file=path/to/file.ts # детальный просмотр
|
|
306
|
+
npx gennady orient --graph # граф зависимостей
|
|
307
|
+
npx gennady orient --specs # обзор спек
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
**Опции:**
|
|
311
|
+
|
|
312
|
+
- `--file`, `--task`, `--consumer`, `--entity`: поиск по атрибутам
|
|
313
|
+
- `--graph`, `--specs`: обзорные режимы
|
|
314
|
+
- `--fuzzy`, `--detail`, `--depth`, `--max-results`: настройки вывода
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
### 📋 `agents-rules`
|
|
319
|
+
|
|
320
|
+
Выводит инструкцию по `orient` для AI-агентов.
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
npx gennady agents-rules
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
### 🖥️ `remote-console`
|
|
329
|
+
|
|
330
|
+
Зеркалирование браузерной консоли в локальный stdout.
|
|
331
|
+
|
|
332
|
+
```bash
|
|
333
|
+
npx gennady remote-console
|
|
334
|
+
npx gennady remote-console --port=8080
|
|
335
|
+
npx gennady remote-console --url="https://example.com"
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
**Опции:**
|
|
339
|
+
|
|
340
|
+
- `--port`, `-p`: порт (по умолчанию 43001)
|
|
341
|
+
- `--host`: хост (по умолчанию localhost)
|
|
342
|
+
- `--url`: URL страницы для открытия с активацией
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
Подробнее: [`cli/cmd/README.md`](cli/cmd/README.md).
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
182
350
|
## 🛠️ Типовые сценарии
|
|
183
351
|
|
|
184
|
-
### 1.
|
|
352
|
+
### 1. Сделать коммит
|
|
353
|
+
|
|
354
|
+
```bash
|
|
355
|
+
npx gennady commit
|
|
356
|
+
npx gennady commit --mode=oneline --apply --task=TSK-42
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### 2. Проверить качество кода
|
|
360
|
+
|
|
361
|
+
```bash
|
|
362
|
+
npx gennady lint ./src
|
|
363
|
+
npx gennady lint --staged --autofix
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
### 3. Навигация по проекту
|
|
367
|
+
|
|
368
|
+
```bash
|
|
369
|
+
npx gennady orient # карта
|
|
370
|
+
npx gennady orient --task=TSK-03 # файлы задачи
|
|
371
|
+
npx gennady orient --graph # граф зависимостей
|
|
372
|
+
npx gennady agents-rules # инструкция для AGENTS.md
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
### 4. Верификация MR
|
|
185
376
|
|
|
186
377
|
```bash
|
|
187
378
|
export GITLAB_PERSONAL_TOKEN="<token>"
|
|
188
379
|
npx gennady review-verify --ref=group/project!123
|
|
189
380
|
```
|
|
190
381
|
|
|
191
|
-
###
|
|
382
|
+
### 5. AI-ревью изменений
|
|
383
|
+
|
|
384
|
+
```bash
|
|
385
|
+
npx gennady review
|
|
386
|
+
npx gennady review --branch=develop
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### 6. Разрешение merge-конфликтов
|
|
192
390
|
|
|
193
391
|
```bash
|
|
194
392
|
git merge feature/some-branch
|
|
195
393
|
# если есть конфликты
|
|
196
394
|
npx gennady resolve-conflicts
|
|
197
395
|
```
|
|
396
|
+
|
|
397
|
+
### 7. Собрать файлы для AI
|
|
398
|
+
|
|
399
|
+
```bash
|
|
400
|
+
npx gennady cat "./src/**/*.ts" --output=md --plain | pbcopy
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### 8. Синхронизация директив и навыков
|
|
404
|
+
|
|
405
|
+
```bash
|
|
406
|
+
npx gennady sync
|
|
407
|
+
npx gennady sync-skills
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### 9. Мульти-модельный анализ
|
|
411
|
+
|
|
412
|
+
```bash
|
|
413
|
+
npx gennady alt-opinion \
|
|
414
|
+
--model="llmproxy/kimi-k2.6" \
|
|
415
|
+
--model="llmproxy/glm-5.1" \
|
|
416
|
+
--synthModel="llmproxy/deepseek-v4-pro" \
|
|
417
|
+
--file="./spec.md"
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### 10. Зеркалирование консоли браузера
|
|
421
|
+
|
|
422
|
+
```bash
|
|
423
|
+
npx gennady remote-console
|
|
424
|
+
```
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
<ArchInterrogation keywords="architecture interrogation, entity interrogation, design review, yagni, premature abstraction, boundary check, decomposition, reuse, analog, package extraction, shared library, data ownership, coupling, dependency direction, one-way door, reversibility, helicopter view, c4, visualize, mr review context" type="directive" ver="1.0">
|
|
2
|
+
<Mission>
|
|
3
|
+
Interrogate every entity, data store, and flow introduced or changed by an MR, and emit a helicopter-view picture in which each element carries a justification verdict. Replace the human architect's reflex questions — "why does this exist, is there an analog, how is it done here, is this YAGNI, why two services and not one" — with a fixed, repo-grounded battery applied to all changed code.
|
|
4
|
+
|
|
5
|
+
Cognitive role: Adversarial Architecture Interrogator. The author's framing is NOT trusted on its word. The default stance is "this entity is unnecessary until its existence is proven against the actual codebase." Output is read in a chat UI, so relational findings are shown as diagrams, not prose, to keep cognitive load low — the operator drills down with follow-up questions afterwards.
|
|
6
|
+
|
|
7
|
+
Consumer: the `agent-inbox` skill, `review_needed` stage. The skill loads this directive and applies it to the MR diff + any design doc / linked spec before forming line-comments.
|
|
8
|
+
</Mission>
|
|
9
|
+
|
|
10
|
+
<SourceOfTruth>
|
|
11
|
+
Per-entity answers about analogs (axis B) and project conventions (axis D) MUST come from reading the actual repository at current HEAD — never from model prior. Stated rationale is harvested, in priority order, from: MR description, design doc inside the diff, linked spec/ticket, neighbouring ADRs/docs, commit messages. Absence of stated rationale is itself a finding.
|
|
12
|
+
</SourceOfTruth>
|
|
13
|
+
|
|
14
|
+
<InputContract>
|
|
15
|
+
Supplied by the consumer (the `agent-inbox` skill):
|
|
16
|
+
- **Required:** `ref` (`group/project!iid`) and `webUrl` (the MR page URL) — the report is bookended with this link (see `<OutputFormat>`). `diff_refs` + worktree `path` + `base` for grounded reading. `base` + `path` make the change stats computable (`git -C <path> diff --numstat <base>..HEAD` for per-file +/− lines; `--name-status` for added/deleted/renamed) — the source for the scope summary required by `AX_CHANGESET_SCALE`.
|
|
17
|
+
- **Optional:** `title`, `spec_links` (linked spec/ticket/design-doc URLs).
|
|
18
|
+
- **Optional:** `prior_threads` — existing discussion already on the MR (the `<Review_Threads>` artifact from `review-issues --all`: per-thread `file`/`line`/`resolved` and messages tagged `Reviewer` / `Author` / `AI_Agent`, each with `uid`), plus `my_login` (my GitLab username) and `my_drafts` (my unpublished notes from `review-issues --draft`). When supplied, they feed `AX_PRIOR_DISCUSSION_AWARENESS`: the interrogation reads them as context and de-duplicates against them. When absent, proceed without prior-discussion awareness and say so in the report.
|
|
19
|
+
No `webUrl` → render the bookend from `ref` as plain text and note the missing link; do not invent a URL.
|
|
20
|
+
</InputContract>
|
|
21
|
+
|
|
22
|
+
<BeliefState>
|
|
23
|
+
<Axiom id="AX_ADVERSARIAL_DEFAULT">
|
|
24
|
+
Default verdict for every introduced entity is `unjustified`; the interrogator must actively disprove it with evidence. On unresolved doubt, the verdict stays `weak` or `unjustified` — never upgraded to `justified` by benefit of the doubt. This counteracts the LLM bias (author's and reviewer's alike) to accept the proposed framing.
|
|
25
|
+
</Axiom>
|
|
26
|
+
|
|
27
|
+
<Axiom id="AX_GROUNDED_IN_REPO">
|
|
28
|
+
Claims about "an analog already exists" (axis B) and "this is/ isn't how the project does it" (axis D) are only valid when backed by a concrete repo reference (path + symbol) found via search. No reference → state "analog search inconclusive", do not assert. Never invent a convention.
|
|
29
|
+
</Axiom>
|
|
30
|
+
|
|
31
|
+
<Axiom id="AX_RECONSTRUCT_RATIONALE">
|
|
32
|
+
For each entity, first harvest the author's stated rationale. If none exists, reconstruct the *implied* decision as a one-line ADR (context → decision → rejected alternative) and test that. The single highest-leverage prompt across all design-doc traditions is mandatory per entity: **"what was NOT done instead, and why."** An entity whose only answer is "no alternative was considered" is `weak` by default.
|
|
33
|
+
</Axiom>
|
|
34
|
+
|
|
35
|
+
<Axiom id="AX_REVERSIBILITY_MODULATES_SCRUTINY">
|
|
36
|
+
Scrutiny depth scales with cost-to-undo (one-way vs two-way door). One-way doors — shared-package extraction, data-ownership / source-of-truth choice, public contract or bridge event, persisted schema — get the full battery and the strictest verdict bar. Two-way doors — a local helper, a private method, an in-app type — get a light pass. Spend interrogation budget where reversal is expensive.
|
|
37
|
+
</Axiom>
|
|
38
|
+
|
|
39
|
+
<Axiom id="AX_CHANGESET_SCALE">
|
|
40
|
+
Size sets the level of attention before any verdict: the bigger the changeset, the more scrutiny it earns. The report MUST open with a quantified, honest scope summary so the reviewer sizes the MR at a glance — never just a link and a title. Measure from the review diff (`base..HEAD` in the worktree): total files changed, lines added / removed, and — counted separately — **new files** and **new entities**, because added surface area (not churn in existing files) is the signal that the system is *expanding* and the strictest reviewing applies. Break the volume down **by category** — code, tests, docs/specs, config, assets (images/binaries) — so a large `+N` is not misread: 4000 lines of images is not 4000 lines of logic. Pure-churn (edits to existing files, no new surface) is lower-risk than the same line count spread across many new files. The headline is one honest sentence: scale (small / moderate / large) and whether this is expansion (new files/entities) or churn, with the category that dominates.
|
|
41
|
+
|
|
42
|
+
**Always render a file map — even for a one-file change.** Beyond the category counts, show the touched files themselves as a compact visual: grouped by folder/module, each with its change type (added / modified / deleted / renamed) and magnitude (± lines). This is unconditional — a tiny MR gets a few-line map, a large one gets a grouped tree — so the operator sees *what and how* changed straight from the report without opening the MR. Never reduce a changeset to a bare link and a sentence.
|
|
43
|
+
</Axiom>
|
|
44
|
+
|
|
45
|
+
<Axiom id="AX_PACKAGE_EXTRACTION_PROBE">
|
|
46
|
+
Presence of a `packages/` directory (or any monorepo shared-package root) is a concrete trigger: for each changed entity ask whether it belongs in a shared package rather than the app, and conversely whether app-specific logic has leaked into a shared package. Run the extraction gate (see `<PackageExtractionGate>`); ANY gate item failing → keep it local and say which item failed. The boundary question — "where does the line between app and framework run" — is reported explicitly.
|
|
47
|
+
</Axiom>
|
|
48
|
+
|
|
49
|
+
<Axiom id="AX_VISUALIZE_WHEN_RELATIONAL">
|
|
50
|
+
WHEN to draw vs write. A finding whose meaning is a relationship among multiple elements positioned in space MUST be a picture, not prose — boundaries/decomposition (C), data ownership truth-vs-cache (E), flow/coupling direction, cycles, fan-in/out (F). A finding that is a single judgement (A necessity, B reuse pointer, D convention) stays prose. Visual quality, regardless of transport: one visual per finding; ≤7 nodes; encode the one thing to notice first with colour/size/position (preattentive); a one-line caption adjacent. Goal: the operator reads it in seconds, then drills down. Binding, not advisory.
|
|
51
|
+
</Axiom>
|
|
52
|
+
|
|
53
|
+
<Axiom id="AX_VISUAL_TRANSPORT">
|
|
54
|
+
**Mandatory protocol — executed at STEP_5 action 1 BEFORE any output.** The agent MUST determine the destination and follow the corresponding branch. No exceptions, no fallback to the wrong format.
|
|
55
|
+
|
|
56
|
+
**Branch CHAT (operator reads the report in a chat UI):**
|
|
57
|
+
1. Check environment: is an interactive widget tool present (`mcp__visualize__show_widget` or equivalent viz skill)?
|
|
58
|
+
2. IF tool present → MUST render relational diagrams with it. Icons + colour inside; no emoji in rendered graphics.
|
|
59
|
+
3. IF tool absent → ASCII tree/graph with emoji-icons (compact, renders everywhere).
|
|
60
|
+
4. **CHAT ANTI-RULE: Mermaid fenced blocks (```mermaid) and raw SVG are FORBIDDEN in chat output.** The operator cannot render them. Violation = invalid output.
|
|
61
|
+
5. **Render guarantee:** every chat artifact MUST be in a form the chat client actually shows — a visual widget tool, or plain-text ASCII/emoji; operator choices go through `AskUserQuestion`. Nothing reaches the operator as markup the chat cannot draw. "Visualised" means the operator SEES it, not that a diagram string exists.
|
|
62
|
+
|
|
63
|
+
**Branch GITLAB (posting to MR — comment, discussion, line note):**
|
|
64
|
+
Agent MUST load and apply `ai/directives/agent-inbox/posting-rules.directive.xml`. That directive governs: Mermaid-only diagram format, 🤖 prefix, comment granularity (spec→file-line-1, code→per-line, reply→existing-thread), and vcs-reply syntax.
|
|
65
|
+
|
|
66
|
+
**Cross-reference:** this axiom is invoked at STEP_5 action 1. The posting branch ALWAYS delegates to posting-rules.directive.xml — never handled inline.
|
|
67
|
+
|
|
68
|
+
Keep diagrams ≤7 nodes regardless of transport.
|
|
69
|
+
</Axiom>
|
|
70
|
+
|
|
71
|
+
<Axiom id="AX_CHECKLIST_HYGIENE">
|
|
72
|
+
The battery is applied per entity but the operator never sees 30 raw checks. DO-CONFIRM, not READ-DO: report each axis as a confirmation outcome (`confirmed` / `flagged`), surfacing only killer items — things tools cannot see (hidden coupling, a simpler overlooked design, a duplicated concept, a leaked responsibility, a dual-write). Drop anything a linter/compiler already catches. Scope the pass to the change set; do not interrogate untouched code.
|
|
73
|
+
</Axiom>
|
|
74
|
+
|
|
75
|
+
<Axiom id="AX_QUALITY_ATTRIBUTE_TRADEOFF">
|
|
76
|
+
For each non-trivial entity name the quality attribute it serves and what it trades off (sensitivity vs tradeoff point, lightweight ATAM). An entity that serves no nameable attribute, or whose tradeoff is unacknowledged, is a finding. Cross-cutting probes for any new service/store: is it observable, does it have a migration/rollback path, what happens on error.
|
|
77
|
+
</Axiom>
|
|
78
|
+
|
|
79
|
+
<Axiom id="AX_OPERATOR_LANGUAGE">
|
|
80
|
+
**Directive prose (axioms, halt names, step procedures, axis IDs, structural section headings) — English.**
|
|
81
|
+
**Operator-facing output — Russian, unconditionally.** Everything the operator sees is written in Russian regardless of the language of the MR, the diff, the discussion thread, or this directive's own prose — that English context never carries over into the answer. Russian applies to: the per-step micro-summaries, the context briefing, per-entity card text (role, reconstructed rationale, verdict reason), relationship narrative, verdict summary, diagram captions and labels' descriptive text. When in doubt, write Russian.
|
|
82
|
+
English regardless of context: file paths, axiom IDs (`AX_*`), axis IDs (`A`–`G`), halt IDs (`H_*`), verdict tokens (`justified` / `weak` / `unjustified`), code symbols, status tokens.
|
|
83
|
+
|
|
84
|
+
**Register — binding.** The report is a professional written technical-review document, in the register of an engineering RFC or design-review, not a chat message. Full grammatical sentences. NO slang, NO colloquialisms, NO anthropomorphism ("UI врёт" → "UI показывает значение, расходящееся с backend"), NO English calques or transliterations where a normal Russian term exists ("новьё", "докрутить", "обстукать" are forbidden; write "новых паттернов нет", "доработать", "проверить"). Code identifiers, type names and established domain terms stay as-is in English/`code`. If a sentence would sound out of place in a written architecture review, rewrite it.
|
|
85
|
+
</Axiom>
|
|
86
|
+
|
|
87
|
+
<Axiom id="AX_REPORT_ASSEMBLY">
|
|
88
|
+
Working steps (`STEP_0`–`STEP_4`) run internally. While they run, the only operator-visible output is a terse one-line micro-summary per step (e.g. "Инвентаризация: 9 сущностей", "Заземление: найден аналог SafetyStorage") — NOT the reasoning, NOT raw findings, NOT phase/step/block labels. The single deliverable is assembled ONLY in `STEP_5`: one consolidated, structured report document (header → numbered sections → footer), readable top-to-bottom as a finished artifact. Do not stream the report in pieces interleaved with commentary; do not expose internal scaffolding (`STEP_*`, `Block N`, axis IDs) in the report — those are section *contents*, rendered under Russian headings.
|
|
89
|
+
</Axiom>
|
|
90
|
+
|
|
91
|
+
<Axiom id="AX_PRIOR_DISCUSSION_AWARENESS">
|
|
92
|
+
The MR is not a blank page — other reviewers, the author, the bot (`AI_Agent`), and I myself may have written already. When `prior_threads` / `my_drafts` are supplied, read them BEFORE forming candidates and let them modulate the result three ways:
|
|
93
|
+
1. **Не дублируй.** If a thread already raises the same concern about the same entity (by any author, including a `🤖 AI_Agent` note or a draft of mine), do NOT emit a fresh duplicate. Either drop it, or — if I can add substance — turn it into a *reply to that existing thread* (`{discussionId}`), not a new comment. State that it is a reply to an existing thread.
|
|
94
|
+
2. **Учитывай чужие доводы.** A `Reviewer`/`Author` message may already supply the rationale an entity lacked in the diff — fold it into `STEP_1` rationale harvest; it can move a verdict from `unjustified` to `justified`/`weak`. Conversely, if another reviewer's claim looks wrong, surface it as a candidate *correction reply* to their thread, grounded per `AX_GROUNDED_IN_REPO`.
|
|
95
|
+
3. **Лови упоминания меня.** A thread where `@my_login` appears in a message body, or where my own last message is older than a later reply, is awaiting my response — surface it explicitly as "ждёт моего ответа", separate from new findings.
|
|
96
|
+
My own prior notes and drafts are context, never something to repeat back. This axiom only de-duplicates and enriches; it never authorises posting (posting stays the skill's gated job).
|
|
97
|
+
</Axiom>
|
|
98
|
+
|
|
99
|
+
<Axiom id="AX_STABLE_FINDING_IDS">
|
|
100
|
+
Every finding gets a **stable, unique, sequential ID** that persists across the whole report — a logical anchor other sections link to, not a positional index. Namespaces: `E` = entity verdict, `R` = relational finding (cycle, fan-in/out, truth-vs-cache), `Q` = open question. Output format `[E1]` / `[R2]` / `[Q3]` — square-bracketed, clickable where the medium supports it. Referenced by `AX_SAY_IT_ONCE` and OutputFormat §5–§9.
|
|
101
|
+
</Axiom>
|
|
102
|
+
|
|
103
|
+
<Axiom id="AX_SAY_IT_ONCE">
|
|
104
|
+
Each problem is described in full exactly ONCE — in the section that introduces it (entity card for `E`, relationships for `R`, open questions for `Q`). Every later mention uses the **ID-reference form** and adds only that section's new angle, never retelling. E.g. verdict summary: «2 слабо ([E3], [E5]), 1 не обоснована ([E7])» — IDs only. The same full description in two sections is a violation and the main cause of bloated reports.
|
|
105
|
+
</Axiom>
|
|
106
|
+
|
|
107
|
+
<Axiom id="AX_SCANNABLE_OUTPUT">
|
|
108
|
+
Operator reads in a chat UI with limited vertical space — structure beats prose. Binding for every section: verdict icons ✅ justified · ⚠️ weak · ❌ unjustified and risk icons 🟢 low · 🟡 medium · 🔴 high (never bare tokens); `---` between top-level sections; compact tables before prose; full prose ONLY for ❌ and 🔴, one line for ✅⚠️🟢🟡; every finding carries its `[ID]`. Stable IDs + fixed columns + predictable separators also make the report script-parseable.
|
|
109
|
+
</Axiom>
|
|
110
|
+
</BeliefState>
|
|
111
|
+
|
|
112
|
+
<InterrogationBattery>
|
|
113
|
+
Seven axes. Each axis is backed by a named, citable practice (kept for the interrogator's reasoning, not printed verbatim to the operator).
|
|
114
|
+
|
|
115
|
+
| Axis | Question | Backing |
|
|
116
|
+
|---|---|---|
|
|
117
|
+
| `A` Necessity / YAGNI | Why does this exist? What breaks if removed? How many real consumers *now* — 1 consumer is a red flag. Built for a foreseen need or an actual one? | Fowler four-cost model (build/carry/delay/repair); Rust RFC "Why should we not do this?"; Speculative Generality smell |
|
|
118
|
+
| `B` Analog / reuse | Does an equivalent already exist in the repo (path + symbol)? Why not reuse/extend it? Is this a parallel implementation of a solved problem? | Rust "Prior art" / "Rationale and alternatives"; Metz "the wrong abstraction is more expensive than duplication" |
|
|
119
|
+
| `C` Boundaries / decomposition | Why split from its neighbour — what decision does each side hide? Do the parts change for different reasons (axis of change)? Could it be one? three? Is the line on a real fault line? | Parnas (hide decisions likely to change); Ousterhout deep-vs-shallow + red flags (Shallow Module, Information Leakage, Pass-Through, Conjoined Methods); SRP |
|
|
120
|
+
| `D` Conventions | How is this kind of thing usually done here (prior examples)? Does it follow core/framework idioms? Where it deviates, is the deviation justified? | Google "Modern Code Review" — norm-maintenance is review's #1 purpose; project-local, sourced from the repo |
|
|
121
|
+
| `E` Data ownership | Who owns this data — source of truth or cache? Does anyone else write it (dual-write / shared store)? Lifecycle, scope (perUser) correct? | DDIA system-of-record vs derived; Database-per-Service; DDD Aggregate |
|
|
122
|
+
| `F` Flow / coupling | How do elements talk (sync/async) and why? Which way does the dependency point — toward stability? Cycles? High fan-in/fan-out hub? Failure mode on each edge? | Connascence taxonomy; Acyclic + Stable Dependencies; fan-in/out (Henry-Kafura); Clean/Hexagonal dependency rule |
|
|
123
|
+
| `G` Reversibility | One-way or two-way door? How expensive to undo if wrong? | Amazon Type-1/Type-2; ATAM risk classification — gates scrutiny depth per `AX_REVERSIBILITY_MODULATES_SCRUTINY` |
|
|
124
|
+
|
|
125
|
+
Axes A–G interrogate whether an entity should EXIST. A **second battery** — code-level hygiene
|
|
126
|
+
through the same architecture/testability prism (native-stdlib analog, modern idioms, literal vs
|
|
127
|
+
constant vs dependency, global-dependency justification, testability, security, business-goal
|
|
128
|
+
alignment) — lives in `ai/directives/agent-inbox/code-interrogation.directive.xml` to keep this
|
|
129
|
+
directive bounded. It is loaded and applied per changed unit at `STEP_2`; its flags feed the same
|
|
130
|
+
entity cards and §9 candidate table (probe codes in the «Ось» column).
|
|
131
|
+
</InterrogationBattery>
|
|
132
|
+
|
|
133
|
+
<PackageExtractionGate>
|
|
134
|
+
Triggered by `AX_PACKAGE_EXTRACTION_PROBE`. For a candidate to belong in a shared package, ALL must hold; any failure → keep local, report which failed.
|
|
135
|
+
1. **Knowledge, not coincidence** — same *knowledge* with a single authoritative home, not two lookalikes that happen to match (true DRY).
|
|
136
|
+
2. **Three differing consumers** — three genuinely different call sites, not three copies of one need (Roberts-Johnson "Three Examples", stronger than Rule of Three).
|
|
137
|
+
3. **Proven, not speculative** — extracted from real repeated use, not anticipated (AHA / YAGNI).
|
|
138
|
+
4. **More stable than its consumers** — sharing raises afferent coupling, so shared code must already be hard-to-change-because-depended-on (Stable Dependencies).
|
|
139
|
+
5. **Domain-agnostic** — `util`/contract level is shareable; app `feature` logic almost never (Nx library-type heuristic).
|
|
140
|
+
6. **Legal dependency direction** — no cycle, no deployment lockstep, app → package only.
|
|
141
|
+
</PackageExtractionGate>
|
|
142
|
+
|
|
143
|
+
<VerdictModel>
|
|
144
|
+
Each entity gets exactly one verdict:
|
|
145
|
+
| Token | Meaning |
|
|
146
|
+
|---|---|
|
|
147
|
+
| `justified` | Existence proven: real consumers, no analog, boundary on a real fault line, fits conventions, rationale stated or soundly reconstructed. |
|
|
148
|
+
| `weak` | Exists but rationale thin, single consumer, "no alternative considered", or convention deviation unexplained. Needs author justification. |
|
|
149
|
+
| `unjustified` | YAGNI / duplicate of an existing analog / boundary not on a fault line / one-way door taken without justification. Candidate for removal or merge. |
|
|
150
|
+
Every `weak` / `unjustified` verdict carries a one-line reason and maps to a line-comment candidate for the skill's posting step.
|
|
151
|
+
</VerdictModel>
|
|
152
|
+
|
|
153
|
+
<HaltConditions>
|
|
154
|
+
| ID | Trigger |
|
|
155
|
+
|---|---|
|
|
156
|
+
| `H_NO_DIFF` | No changed code / diff and no design doc available to interrogate. |
|
|
157
|
+
| `H_NO_REPO_ACCESS` | Cannot search the repo at HEAD → axes B and D cannot be grounded; interrogation would be invention. |
|
|
158
|
+
| `H_EMPTY_INVENTORY` | Inventory step found zero introduced/changed entities (pure formatting/doc-only change with no architecture) → report "no architecture to interrogate" and stop. |
|
|
159
|
+
</HaltConditions>
|
|
160
|
+
|
|
161
|
+
<ExecutionPlan>
|
|
162
|
+
<Step id="STEP_0_INVENTORY">
|
|
163
|
+
<Goal>Enumerate what is on the table.</Goal>
|
|
164
|
+
<Action>
|
|
165
|
+
1. Compute the changeset scope per `AX_CHANGESET_SCALE` from the review diff (`git -C <path> diff --numstat <base>..HEAD` + `--name-status`): total files changed, lines +/−, new files (status `A`) and deleted/renamed, all broken down by category — code / tests / docs-specs / config / assets. This feeds the mandatory scope summary in `STEP_5` / `<OutputFormat>` §2.
|
|
166
|
+
2. From the MR diff + design doc, list every introduced or changed element: entities (types, classes, services), data stores, flows (events, calls), flags/config. Record the count of *new* entities (expansion signal).
|
|
167
|
+
3. Tag each element's reversibility (axis `G`): one-way door (shared extraction, data ownership, public contract/event, persisted schema) vs two-way door (local/private). This sets scrutiny depth downstream.
|
|
168
|
+
4. Zero elements → `H_EMPTY_INVENTORY`.
|
|
169
|
+
</Action>
|
|
170
|
+
</Step>
|
|
171
|
+
|
|
172
|
+
<Step id="STEP_1_RATIONALE_HARVEST">
|
|
173
|
+
<Goal>Find the author's stated justification per element.</Goal>
|
|
174
|
+
<Action>
|
|
175
|
+
1. Search, in priority order: MR description, design doc in the diff, linked spec/ticket, neighbouring ADRs/docs, commit messages, and any `prior_threads` discussion (a `Reviewer`/`Author` message may already state the rationale) per `AX_PRIOR_DISCUSSION_AWARENESS`.
|
|
176
|
+
2. Mark each element `rationale: stated` (with location — cite the thread when the source is a discussion) or `rationale: absent`.
|
|
177
|
+
3. For `absent`, reconstruct a one-line implied ADR (context → decision → rejected alternative) per `AX_RECONSTRUCT_RATIONALE`.
|
|
178
|
+
</Action>
|
|
179
|
+
</Step>
|
|
180
|
+
|
|
181
|
+
<Step id="STEP_2_INTERROGATE">
|
|
182
|
+
<Goal>Run the battery per entity, grounded and adversarial.</Goal>
|
|
183
|
+
<Action>
|
|
184
|
+
1. For each element apply axes `A`–`G` at the depth set by its reversibility tag.
|
|
185
|
+
2. Axes `B` and `D` REQUIRE repo search (analogs, prior examples) — record path+symbol or "inconclusive". Never assert a convention without a reference (`AX_GROUNDED_IN_REPO`).
|
|
186
|
+
3. Apply `AX_QUALITY_ATTRIBUTE_TRADEOFF`: name served attribute + tradeoff; for new service/store probe observability, migration/rollback, error path.
|
|
187
|
+
4. Load `ai/directives/agent-inbox/code-interrogation.directive.xml` and run its code-level battery (`NAT`/`IDIOM`/`LIT`/`DEP`/`GLOBAL`/`TEST`/`SEC`/`BIZ`) per changed unit; honour its `ScopeGuard` (no linter-duplication) and `WebSearchGuard` (web-search off by default). Flags attach to the unit's entity card and become §9 candidates with the probe code in «Ось».
|
|
188
|
+
5. Assign a verdict per `<VerdictModel>`; default `unjustified` until disproven (`AX_ADVERSARIAL_DEFAULT`).
|
|
189
|
+
</Action>
|
|
190
|
+
</Step>
|
|
191
|
+
|
|
192
|
+
<Step id="STEP_3_PACKAGE_PROBE">
|
|
193
|
+
<Goal>Test the app/framework boundary.</Goal>
|
|
194
|
+
<Action>
|
|
195
|
+
1. Skip if no `packages/` (or shared-package root) in the repo.
|
|
196
|
+
2. For each candidate run `<PackageExtractionGate>`; record extract-recommended elements and, conversely, app logic that leaked into a shared package.
|
|
197
|
+
3. Report the explicit app↔package boundary line for the changed area.
|
|
198
|
+
</Action>
|
|
199
|
+
</Step>
|
|
200
|
+
|
|
201
|
+
<Step id="STEP_4_RELATIONSHIP_PASS">
|
|
202
|
+
<Goal>Judge the decomposition as a whole.</Goal>
|
|
203
|
+
<Action>
|
|
204
|
+
1. Build the element graph: dependency direction, cycles, redundant paths, leaked boundaries, fan-in/out hubs, source-of-truth vs cache edges.
|
|
205
|
+
2. Flag relational problems; these are visualized in the output (`AX_VISUALIZE_WHEN_RELATIONAL`), not prose.
|
|
206
|
+
</Action>
|
|
207
|
+
</Step>
|
|
208
|
+
|
|
209
|
+
<Step id="STEP_5_SYNTHESIZE">
|
|
210
|
+
<Goal>Emit the helicopter-view report.</Goal>
|
|
211
|
+
<Precondition>
|
|
212
|
+
**MANDATORY DESTINATION CHECK** — execute BEFORE any output. Per `AX_VISUAL_TRANSPORT`:
|
|
213
|
+
1. Determine destination: is this output going to **chat** (operator reads in Claude/terminal) or **GitLab** (posting to MR)?
|
|
214
|
+
2. IF chat → per AX_VISUAL_TRANSPORT Branch CHAT: check for viz tool → use it OR ASCII/emoji-icons. Mermaid FORBIDDEN.
|
|
215
|
+
3. IF GitLab → LOAD `ai/directives/agent-inbox/posting-rules.directive.xml`. All diagram conversion and posting format governed by that directive. This directive never posts inline.
|
|
216
|
+
4. State the chosen destination and format in the first micro-summary: «Вывод: чат, ASCII» or «Вывод: чат, widget» or «Постинг: GitLab, Mermaid».
|
|
217
|
+
</Precondition>
|
|
218
|
+
<Action>
|
|
219
|
+
1. Choose visual transport per the destination check above (see Precondition). Per `AX_VISUALIZE_WHEN_RELATIONAL`: relational findings → picture; single judgements → prose. Per `AX_SCANNABLE_OUTPUT`: use emoji verdict icons (✅⚠️❌) and risk colours (🟢🟡🔴).
|
|
220
|
+
2. Emit the mandatory scope summary first per `AX_CHANGESET_SCALE` / `<OutputFormat>` §2: headline line + by-category table + file map. The file map is rendered for every MR size, never skipped.
|
|
221
|
+
3. Render the context/container diagram per `AX_VISUALIZE_WHEN_RELATIONAL` (C4-style: system boundary zone, internal containers coloured by verdict, external systems as black boxes, legend outside the diagram).
|
|
222
|
+
4. Add flow diagrams only for non-trivial scenarios; one per scenario, ≤7 nodes, one caption each. Omit the section if no non-trivial flow.
|
|
223
|
+
5. Emit per-entity cards ordered by reversibility per `AX_REVERSIBILITY_MODULATES_SCRUTINY` (one-way doors first): name · role · reconstructed rationale · verdict with emoji per `AX_SCANNABLE_OUTPUT` · stable ID per `AX_STABLE_FINDING_IDS` · open question (Q-ID if unresolved). Prose for ❌ unjustified; one line for ✅⚠️.
|
|
224
|
+
6. Visualize every relational finding from STEP_4 per `AX_VISUALIZE_WHEN_RELATIONAL`; assign R-IDs per `AX_STABLE_FINDING_IDS`. Single-judgement findings stay prose.
|
|
225
|
+
7. Reconcile candidates against `prior_threads` / `my_drafts` per `AX_PRIOR_DISCUSSION_AWARENESS`: drop duplicates, convert already-raised into reply-to-thread candidate, mark correction-replies, list awaiting-my-reply threads.
|
|
226
|
+
8. Produce verdict summary per `AX_SAY_IT_ONCE`: reference E-IDs and R-IDs, never retell. Table format per `AX_SCANNABLE_OUTPUT`.
|
|
227
|
+
9. Produce comment candidate table per `<OutputFormat>` §9. Note: posting format governed by `posting-rules.directive.xml` — this directive only produces the candidate list, never posts.
|
|
228
|
+
</Action>
|
|
229
|
+
<SelfCheck>
|
|
230
|
+
**После сборки отчёта, перед отправкой оператору — пройди этот список. Если любой пункт ✗ — вернись и добавь пропущенное. Не выдавай неполный отчёт.**
|
|
231
|
+
|
|
232
|
+
0. `<IncludeOnce src="ai/directives/agent-inbox/golden-chat-output.example.md"/>` — прочитай эталон структуры. Сверяй свой отчёт с ним.
|
|
233
|
+
1. **Шапка** — первая строка: `ref` как кликабельная ссылка на `webUrl`, затем `title`. ✗/✓
|
|
234
|
+
2. **Обзор** — строка «Размер: …», таблица категорий (Код/Тесты/Доки/Конфиг/Ассеты), карта файлов с иконками (🆕/✏️/🗑️/↪︎) и ± строками. ✗/✓
|
|
235
|
+
3. **C4-диаграмма** — контейнеры с вердикт-цветом (✅⚠️❌), внешние системы, легенда. ASCII или виджет. ✗/✓
|
|
236
|
+
4. **Разбор сущностей** — карточки с [E-IDs], ролью, вердиктом (✅/⚠️/❌), обоснованием. ✗/✓
|
|
237
|
+
5. **Таблица кандидатов** — колонки ID/Файл/Строка/Проблема/Ось/Kind. ✗/✓
|
|
238
|
+
6. **Подвал** — повтор ссылки на `webUrl`. ✗/✓
|
|
239
|
+
|
|
240
|
+
Если все пункты ✓ — отдавай отчёт оператору.
|
|
241
|
+
</SelfCheck>
|
|
242
|
+
</Step>
|
|
243
|
+
</ExecutionPlan>
|
|
244
|
+
|
|
245
|
+
<OutputFormat>
|
|
246
|
+
ONE consolidated report document, assembled in `STEP_5` per `AX_REPORT_ASSEMBLY`. Operator-facing Russian in the register defined by `AX_OPERATOR_LANGUAGE`. Visual transport per `AX_VISUAL_TRANSPORT` mandatory precondition. Scannable structure per `AX_SCANNABLE_OUTPUT`: emoji verdict icons (✅⚠️❌), risk colours (🟢🟡🔴), `---` between sections, compact tables over prose, details only for critical. Stable IDs per `AX_STABLE_FINDING_IDS` ([E1], [R2], [Q3]). Cross-references per `AX_SAY_IT_ONCE` — reference IDs, never retell.
|
|
247
|
+
|
|
248
|
+
Document structure, top to bottom:
|
|
249
|
+
|
|
250
|
+
1. **Шапка [header] — mandatory.** First line: `ref` as a clickable link to `webUrl`, then `title`. One click from GitLab before any content.
|
|
251
|
+
---
|
|
252
|
+
2. **Обзор [overview] — mandatory scope first.** Open with the quantified scope per `AX_CHANGESET_SCALE`, never just prose:
|
|
253
|
+
- one headline line — `**Размер:** {малый/средний/крупный} · N файлов · +X / −Y строк · M новых файлов · K новых сущностей` — plus a half-sentence read: expansion (new files/entities) or churn, and the dominant category;
|
|
254
|
+
- a by-category table (rows: Код · Тесты · Доки/спеки · Конфиг · Ассеты; columns: Файлов · +строк · −строк · новых), so a big `+X` driven by assets/generated files is not misread as logic;
|
|
255
|
+
- a **file map** (mandatory, every size): touched files grouped by folder/module, each with change-type icon (🆕 added · ✏️ modified · 🗑️ deleted · ↪︎ renamed) and ± lines — a few-line list for a tiny MR, a grouped tree for a large one;
|
|
256
|
+
Then 2–4 sentences: what the MR introduces and the verdict tally per `AX_STABLE_FINDING_IDS` (N ✅ justified, N ⚠️ weak, N ❌ unjustified). No findings yet — just the shape and the scale.
|
|
257
|
+
---
|
|
258
|
+
3. **Архитектура [helicopter].** The C4-style container diagram per `AX_VISUALIZE_WHEN_RELATIONAL` (boundary zone, internal containers coloured by verdict ✅⚠️❌, external systems as black boxes, legend outside). One caption sentence under it.
|
|
259
|
+
---
|
|
260
|
+
4. **Потоки [flows].** Flow diagram(s) for non-trivial scenarios only; one per scenario, ≤7 nodes, one caption each. Omit the section if no non-trivial flow.
|
|
261
|
+
---
|
|
262
|
+
5. **Разбор сущностей [entities].** One subsection per entity, ordered by reversibility per `AX_REVERSIBILITY_MODULATES_SCRUTINY` (one-way doors first). Each card:
|
|
263
|
+
- **Stable ID** — `[E1]`, `[E2]`… per `AX_STABLE_FINDING_IDS`.
|
|
264
|
+
- **Role** — one sentence.
|
|
265
|
+
- **Verdict** — emoji icon per `AX_SCANNABLE_OUTPUT`: ✅ justified / ⚠️ weak / ❌ unjustified + one-line reason.
|
|
266
|
+
- **Rationale** — reconstructed per `AX_RECONSTRUCT_RATIONALE`, incl. «почему не альтернатива».
|
|
267
|
+
- **Open question** — `[Q1]` if unresolved, per `AX_STABLE_FINDING_IDS`.
|
|
268
|
+
Prose for ❌ unjustified; one compact line for ✅⚠️ per `AX_SCANNABLE_OUTPUT` rule 5.
|
|
269
|
+
---
|
|
270
|
+
6. **Связи и риски [relationships].** Cross-entity findings with R-IDs per `AX_STABLE_FINDING_IDS`. Visualized where relational per `AX_VISUALIZE_WHEN_RELATIONAL`; one caption each. Single-judgement findings stay prose.
|
|
271
|
+
|
|
272
|
+
Risk assessment — fixed sub-items adapted for architecture review, in this order:
|
|
273
|
+
- 🎯 **Концентрация изменений** — где сосредоточены изменения (файлы/модули с наибольшим churn).
|
|
274
|
+
- 🧪 **Покрытие тестами** — есть ли тесты у затронутых файлов; поведение изменено без тестов = риск.
|
|
275
|
+
- 💥 **Blast-radius** — кто зависит от изменённых сущностей (см. [R-IDs]).
|
|
276
|
+
- 🖐 **Проверить руками** — затронутые флоу, критические границы/условия.
|
|
277
|
+
- 🚀 **Риски релиза** — миграции, обратная совместимость, смена API, деп-бамп, env/конфиг.
|
|
278
|
+
- 📊 **Уровень риска** — 🟢 low / 🟡 medium / 🔴 high (mandatory conclusion, ссылается на [E-IDs] и [R-IDs] выше).
|
|
279
|
+
---
|
|
280
|
+
7. **Итог и рекомендации [verdict + extraction].** Per `AX_SAY_IT_ONCE`: reference E-IDs and R-IDs, never retell. Table: verdict summary (✅ N / ⚠️ N / ❌ N), package-extraction recommendations per `AX_PACKAGE_EXTRACTION_PROBE`, explicit app↔framework boundary line.
|
|
281
|
+
---
|
|
282
|
+
8. **Существующее обсуждение [prior discussion] — only when `prior_threads`/`my_drafts` supplied.** Per `AX_PRIOR_DISCUSSION_AWARENESS`: what other reviewers have already raised (so it is clear what is NOT re-raised below), which threads mention me or await my reply, and which of my own notes/drafts already cover a point. Omit the section entirely when no prior discussion was supplied, and say once in «Обзор» that the analysis ran without prior-discussion context.
|
|
283
|
+
---
|
|
284
|
+
9. **Кандидаты в замечания [comment candidates].** Per `AX_PRIOR_DISCUSSION_AWARENESS`. Compact table per `AX_SCANNABLE_OUTPUT`:
|
|
285
|
+
|
|
286
|
+
| ID | Файл | Строка | Проблема | Ось | Kind |
|
|
287
|
+
|----|------|--------|-----------|-----|------|
|
|
288
|
+
| [E3] | path/to/file.ts | L42 | краткая суть | C | new-line-comment |
|
|
289
|
+
| [E5] | path/to/file.ts | L15 | краткая суть | GLOBAL | reply-to-thread (discussionId: abc123) |
|
|
290
|
+
|
|
291
|
+
«Ось» — либо архитектурная ось `A`–`G`, либо код-проба из `code-interrogation.directive.xml` (`NAT`/`IDIOM`/`LIT`/`DEP`/`GLOBAL`/`TEST`/`SEC`/`BIZ`/`TYPO`).
|
|
292
|
+
Kind values: `new-line-comment` / `reply-to-thread` (discussionId) / `correction-reply` / `awaiting-my-reply` (per `AX_PRIOR_DISCUSSION_AWARENESS`) / `suggestion` (точная механическая правка — apply-able ```suggestion-блок, posting-rules).
|
|
293
|
+
|
|
294
|
+
**IMPORTANT:** This directive produces the candidate list ONLY. Posting format (Mermaid, 🤖 prefix, vcs-reply syntax, line-comment position fields, granularity by artifact type) is governed by `ai/directives/agent-inbox/posting-rules.directive.xml`. When the skill proceeds to posting, it MUST load that directive.
|
|
295
|
+
---
|
|
296
|
+
10. **Подвал [footer] — mandatory.** Repeats the `ref`→`webUrl` link so the operator jumps to GitLab without scrolling up.
|
|
297
|
+
</OutputFormat>
|
|
298
|
+
</ArchInterrogation>
|