@yohakuforce/core 0.4.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/README.md +65 -0
- package/dist/adapters/dx-mcp/dx-mcp-source-adapter.d.ts +25 -0
- package/dist/adapters/dx-mcp/dx-mcp-source-adapter.d.ts.map +1 -0
- package/dist/adapters/dx-mcp/dx-mcp-source-adapter.js +45 -0
- package/dist/adapters/dx-mcp/dx-mcp-source-adapter.js.map +1 -0
- package/dist/adapters/dx-mcp/index.d.ts +3 -0
- package/dist/adapters/dx-mcp/index.d.ts.map +1 -0
- package/dist/adapters/dx-mcp/index.js +2 -0
- package/dist/adapters/dx-mcp/index.js.map +1 -0
- package/dist/adapters/local/index.d.ts +5 -0
- package/dist/adapters/local/index.d.ts.map +1 -0
- package/dist/adapters/local/index.js +3 -0
- package/dist/adapters/local/index.js.map +1 -0
- package/dist/adapters/local/local-source-adapter.d.ts +19 -0
- package/dist/adapters/local/local-source-adapter.d.ts.map +1 -0
- package/dist/adapters/local/local-source-adapter.js +214 -0
- package/dist/adapters/local/local-source-adapter.js.map +1 -0
- package/dist/adapters/local/sfdx-project.d.ts +14 -0
- package/dist/adapters/local/sfdx-project.d.ts.map +1 -0
- package/dist/adapters/local/sfdx-project.js +76 -0
- package/dist/adapters/local/sfdx-project.js.map +1 -0
- package/dist/change-summary/index.d.ts +4 -0
- package/dist/change-summary/index.d.ts.map +1 -0
- package/dist/change-summary/index.js +3 -0
- package/dist/change-summary/index.js.map +1 -0
- package/dist/change-summary/schema.json +152 -0
- package/dist/change-summary/types.d.ts +52 -0
- package/dist/change-summary/types.d.ts.map +1 -0
- package/dist/change-summary/types.js +18 -0
- package/dist/change-summary/types.js.map +1 -0
- package/dist/change-summary/validate.d.ts +8 -0
- package/dist/change-summary/validate.d.ts.map +1 -0
- package/dist/change-summary/validate.js +35 -0
- package/dist/change-summary/validate.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +945 -0
- package/dist/cli.js.map +1 -0
- package/dist/consistency/check.d.ts +4 -0
- package/dist/consistency/check.d.ts.map +1 -0
- package/dist/consistency/check.js +70 -0
- package/dist/consistency/check.js.map +1 -0
- package/dist/consistency/index.d.ts +4 -0
- package/dist/consistency/index.d.ts.map +1 -0
- package/dist/consistency/index.js +3 -0
- package/dist/consistency/index.js.map +1 -0
- package/dist/consistency/types.d.ts +29 -0
- package/dist/consistency/types.d.ts.map +1 -0
- package/dist/consistency/types.js +12 -0
- package/dist/consistency/types.js.map +1 -0
- package/dist/diff/classify-files.d.ts +9 -0
- package/dist/diff/classify-files.d.ts.map +1 -0
- package/dist/diff/classify-files.js +105 -0
- package/dist/diff/classify-files.js.map +1 -0
- package/dist/diff/diff.d.ts +11 -0
- package/dist/diff/diff.d.ts.map +1 -0
- package/dist/diff/diff.js +69 -0
- package/dist/diff/diff.js.map +1 -0
- package/dist/diff/git.d.ts +28 -0
- package/dist/diff/git.d.ts.map +1 -0
- package/dist/diff/git.js +115 -0
- package/dist/diff/git.js.map +1 -0
- package/dist/diff/index.d.ts +7 -0
- package/dist/diff/index.d.ts.map +1 -0
- package/dist/diff/index.js +5 -0
- package/dist/diff/index.js.map +1 -0
- package/dist/diff/types.d.ts +28 -0
- package/dist/diff/types.d.ts.map +1 -0
- package/dist/diff/types.js +4 -0
- package/dist/diff/types.js.map +1 -0
- package/dist/explain/block-registry.d.ts +17 -0
- package/dist/explain/block-registry.d.ts.map +1 -0
- package/dist/explain/block-registry.js +73 -0
- package/dist/explain/block-registry.js.map +1 -0
- package/dist/explain/index.d.ts +22 -0
- package/dist/explain/index.d.ts.map +1 -0
- package/dist/explain/index.js +128 -0
- package/dist/explain/index.js.map +1 -0
- package/dist/graph/builder.d.ts +9 -0
- package/dist/graph/builder.d.ts.map +1 -0
- package/dist/graph/builder.js +276 -0
- package/dist/graph/builder.js.map +1 -0
- package/dist/graph/dependencies.d.ts +5 -0
- package/dist/graph/dependencies.d.ts.map +1 -0
- package/dist/graph/dependencies.js +38 -0
- package/dist/graph/dependencies.js.map +1 -0
- package/dist/graph/extractors/apex-body.d.ts +5 -0
- package/dist/graph/extractors/apex-body.d.ts.map +1 -0
- package/dist/graph/extractors/apex-body.js +289 -0
- package/dist/graph/extractors/apex-body.js.map +1 -0
- package/dist/graph/extractors/apex-class.d.ts +5 -0
- package/dist/graph/extractors/apex-class.d.ts.map +1 -0
- package/dist/graph/extractors/apex-class.js +43 -0
- package/dist/graph/extractors/apex-class.js.map +1 -0
- package/dist/graph/extractors/apex-control-flow.d.ts +33 -0
- package/dist/graph/extractors/apex-control-flow.d.ts.map +1 -0
- package/dist/graph/extractors/apex-control-flow.js +432 -0
- package/dist/graph/extractors/apex-control-flow.js.map +1 -0
- package/dist/graph/extractors/apex-trigger.d.ts +4 -0
- package/dist/graph/extractors/apex-trigger.d.ts.map +1 -0
- package/dist/graph/extractors/apex-trigger.js +40 -0
- package/dist/graph/extractors/apex-trigger.js.map +1 -0
- package/dist/graph/extractors/approval-process.d.ts +4 -0
- package/dist/graph/extractors/approval-process.d.ts.map +1 -0
- package/dist/graph/extractors/approval-process.js +103 -0
- package/dist/graph/extractors/approval-process.js.map +1 -0
- package/dist/graph/extractors/aura-bundle.d.ts +4 -0
- package/dist/graph/extractors/aura-bundle.d.ts.map +1 -0
- package/dist/graph/extractors/aura-bundle.js +77 -0
- package/dist/graph/extractors/aura-bundle.js.map +1 -0
- package/dist/graph/extractors/custom-application.d.ts +4 -0
- package/dist/graph/extractors/custom-application.d.ts.map +1 -0
- package/dist/graph/extractors/custom-application.js +55 -0
- package/dist/graph/extractors/custom-application.js.map +1 -0
- package/dist/graph/extractors/custom-metadata-record.d.ts +4 -0
- package/dist/graph/extractors/custom-metadata-record.d.ts.map +1 -0
- package/dist/graph/extractors/custom-metadata-record.js +53 -0
- package/dist/graph/extractors/custom-metadata-record.js.map +1 -0
- package/dist/graph/extractors/field.d.ts +4 -0
- package/dist/graph/extractors/field.d.ts.map +1 -0
- package/dist/graph/extractors/field.js +36 -0
- package/dist/graph/extractors/field.js.map +1 -0
- package/dist/graph/extractors/flexi-page.d.ts +4 -0
- package/dist/graph/extractors/flexi-page.d.ts.map +1 -0
- package/dist/graph/extractors/flexi-page.js +46 -0
- package/dist/graph/extractors/flexi-page.js.map +1 -0
- package/dist/graph/extractors/flow-body.d.ts +3 -0
- package/dist/graph/extractors/flow-body.d.ts.map +1 -0
- package/dist/graph/extractors/flow-body.js +144 -0
- package/dist/graph/extractors/flow-body.js.map +1 -0
- package/dist/graph/extractors/flow.d.ts +4 -0
- package/dist/graph/extractors/flow.d.ts.map +1 -0
- package/dist/graph/extractors/flow.js +20 -0
- package/dist/graph/extractors/flow.js.map +1 -0
- package/dist/graph/extractors/index.d.ts +24 -0
- package/dist/graph/extractors/index.d.ts.map +1 -0
- package/dist/graph/extractors/index.js +23 -0
- package/dist/graph/extractors/index.js.map +1 -0
- package/dist/graph/extractors/layout.d.ts +4 -0
- package/dist/graph/extractors/layout.d.ts.map +1 -0
- package/dist/graph/extractors/layout.js +89 -0
- package/dist/graph/extractors/layout.js.map +1 -0
- package/dist/graph/extractors/lwc.d.ts +4 -0
- package/dist/graph/extractors/lwc.d.ts.map +1 -0
- package/dist/graph/extractors/lwc.js +170 -0
- package/dist/graph/extractors/lwc.js.map +1 -0
- package/dist/graph/extractors/named-credential.d.ts +9 -0
- package/dist/graph/extractors/named-credential.d.ts.map +1 -0
- package/dist/graph/extractors/named-credential.js +38 -0
- package/dist/graph/extractors/named-credential.js.map +1 -0
- package/dist/graph/extractors/object.d.ts +4 -0
- package/dist/graph/extractors/object.d.ts.map +1 -0
- package/dist/graph/extractors/object.js +16 -0
- package/dist/graph/extractors/object.js.map +1 -0
- package/dist/graph/extractors/permission-set-body.d.ts +3 -0
- package/dist/graph/extractors/permission-set-body.d.ts.map +1 -0
- package/dist/graph/extractors/permission-set-body.js +80 -0
- package/dist/graph/extractors/permission-set-body.js.map +1 -0
- package/dist/graph/extractors/permission-set.d.ts +4 -0
- package/dist/graph/extractors/permission-set.d.ts.map +1 -0
- package/dist/graph/extractors/permission-set.js +17 -0
- package/dist/graph/extractors/permission-set.js.map +1 -0
- package/dist/graph/extractors/profile.d.ts +4 -0
- package/dist/graph/extractors/profile.d.ts.map +1 -0
- package/dist/graph/extractors/profile.js +15 -0
- package/dist/graph/extractors/profile.js.map +1 -0
- package/dist/graph/extractors/record-type.d.ts +4 -0
- package/dist/graph/extractors/record-type.d.ts.map +1 -0
- package/dist/graph/extractors/record-type.js +19 -0
- package/dist/graph/extractors/record-type.js.map +1 -0
- package/dist/graph/extractors/remote-site-setting.d.ts +4 -0
- package/dist/graph/extractors/remote-site-setting.d.ts.map +1 -0
- package/dist/graph/extractors/remote-site-setting.js +15 -0
- package/dist/graph/extractors/remote-site-setting.js.map +1 -0
- package/dist/graph/extractors/sharing-rules.d.ts +8 -0
- package/dist/graph/extractors/sharing-rules.d.ts.map +1 -0
- package/dist/graph/extractors/sharing-rules.js +122 -0
- package/dist/graph/extractors/sharing-rules.js.map +1 -0
- package/dist/graph/extractors/types.d.ts +8 -0
- package/dist/graph/extractors/types.d.ts.map +1 -0
- package/dist/graph/extractors/types.js +2 -0
- package/dist/graph/extractors/types.js.map +1 -0
- package/dist/graph/extractors/validation-rule.d.ts +4 -0
- package/dist/graph/extractors/validation-rule.d.ts.map +1 -0
- package/dist/graph/extractors/validation-rule.js +19 -0
- package/dist/graph/extractors/validation-rule.js.map +1 -0
- package/dist/graph/extractors/visualforce-component.d.ts +4 -0
- package/dist/graph/extractors/visualforce-component.d.ts.map +1 -0
- package/dist/graph/extractors/visualforce-component.js +90 -0
- package/dist/graph/extractors/visualforce-component.js.map +1 -0
- package/dist/graph/extractors/visualforce-page.d.ts +4 -0
- package/dist/graph/extractors/visualforce-page.d.ts.map +1 -0
- package/dist/graph/extractors/visualforce-page.js +92 -0
- package/dist/graph/extractors/visualforce-page.js.map +1 -0
- package/dist/graph/index.d.ts +8 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +5 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/parse-xml.d.ts +5 -0
- package/dist/graph/parse-xml.d.ts.map +1 -0
- package/dist/graph/parse-xml.js +39 -0
- package/dist/graph/parse-xml.js.map +1 -0
- package/dist/graph/sqlite-reader.d.ts +33 -0
- package/dist/graph/sqlite-reader.d.ts.map +1 -0
- package/dist/graph/sqlite-reader.js +445 -0
- package/dist/graph/sqlite-reader.js.map +1 -0
- package/dist/graph/sqlite-store.d.ts +78 -0
- package/dist/graph/sqlite-store.d.ts.map +1 -0
- package/dist/graph/sqlite-store.js +683 -0
- package/dist/graph/sqlite-store.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/init/index.d.ts +4 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/index.js +3 -0
- package/dist/init/index.js.map +1 -0
- package/dist/init/init.d.ts +9 -0
- package/dist/init/init.d.ts.map +1 -0
- package/dist/init/init.js +92 -0
- package/dist/init/init.js.map +1 -0
- package/dist/init/types.d.ts +37 -0
- package/dist/init/types.d.ts.map +1 -0
- package/dist/init/types.js +59 -0
- package/dist/init/types.js.map +1 -0
- package/dist/merge/index.d.ts +6 -0
- package/dist/merge/index.d.ts.map +1 -0
- package/dist/merge/index.js +5 -0
- package/dist/merge/index.js.map +1 -0
- package/dist/merge/markers.d.ts +8 -0
- package/dist/merge/markers.d.ts.map +1 -0
- package/dist/merge/markers.js +30 -0
- package/dist/merge/markers.js.map +1 -0
- package/dist/merge/merge.d.ts +12 -0
- package/dist/merge/merge.d.ts.map +1 -0
- package/dist/merge/merge.js +116 -0
- package/dist/merge/merge.js.map +1 -0
- package/dist/merge/parser.d.ts +5 -0
- package/dist/merge/parser.d.ts.map +1 -0
- package/dist/merge/parser.js +63 -0
- package/dist/merge/parser.js.map +1 -0
- package/dist/merge/validator.d.ts +15 -0
- package/dist/merge/validator.d.ts.map +1 -0
- package/dist/merge/validator.js +64 -0
- package/dist/merge/validator.js.map +1 -0
- package/dist/metrics/aggregate.d.ts +11 -0
- package/dist/metrics/aggregate.d.ts.map +1 -0
- package/dist/metrics/aggregate.js +51 -0
- package/dist/metrics/aggregate.js.map +1 -0
- package/dist/metrics/index.d.ts +7 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +4 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/store.d.ts +19 -0
- package/dist/metrics/store.d.ts.map +1 -0
- package/dist/metrics/store.js +69 -0
- package/dist/metrics/store.js.map +1 -0
- package/dist/metrics/types.d.ts +32 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +38 -0
- package/dist/metrics/types.js.map +1 -0
- package/dist/onboarding/context-map.d.ts +15 -0
- package/dist/onboarding/context-map.d.ts.map +1 -0
- package/dist/onboarding/context-map.js +138 -0
- package/dist/onboarding/context-map.js.map +1 -0
- package/dist/onboarding/faq.d.ts +24 -0
- package/dist/onboarding/faq.d.ts.map +1 -0
- package/dist/onboarding/faq.js +127 -0
- package/dist/onboarding/faq.js.map +1 -0
- package/dist/onboarding/index.d.ts +9 -0
- package/dist/onboarding/index.d.ts.map +1 -0
- package/dist/onboarding/index.js +5 -0
- package/dist/onboarding/index.js.map +1 -0
- package/dist/onboarding/state.d.ts +15 -0
- package/dist/onboarding/state.d.ts.map +1 -0
- package/dist/onboarding/state.js +92 -0
- package/dist/onboarding/state.js.map +1 -0
- package/dist/onboarding/types.d.ts +38 -0
- package/dist/onboarding/types.d.ts.map +1 -0
- package/dist/onboarding/types.js +13 -0
- package/dist/onboarding/types.js.map +1 -0
- package/dist/release/extract-manual-steps.d.ts +16 -0
- package/dist/release/extract-manual-steps.d.ts.map +1 -0
- package/dist/release/extract-manual-steps.js +164 -0
- package/dist/release/extract-manual-steps.js.map +1 -0
- package/dist/release/index.d.ts +4 -0
- package/dist/release/index.d.ts.map +1 -0
- package/dist/release/index.js +3 -0
- package/dist/release/index.js.map +1 -0
- package/dist/release/schema.json +142 -0
- package/dist/release/types.d.ts +39 -0
- package/dist/release/types.d.ts.map +1 -0
- package/dist/release/types.js +4 -0
- package/dist/release/types.js.map +1 -0
- package/dist/release/validate.d.ts +8 -0
- package/dist/release/validate.d.ts.map +1 -0
- package/dist/release/validate.js +35 -0
- package/dist/release/validate.js.map +1 -0
- package/dist/render/approval-mermaid.d.ts +3 -0
- package/dist/render/approval-mermaid.d.ts.map +1 -0
- package/dist/render/approval-mermaid.js +69 -0
- package/dist/render/approval-mermaid.js.map +1 -0
- package/dist/render/archive.d.ts +2 -0
- package/dist/render/archive.d.ts.map +1 -0
- package/dist/render/archive.js +32 -0
- package/dist/render/archive.js.map +1 -0
- package/dist/render/concerns.d.ts +11 -0
- package/dist/render/concerns.d.ts.map +1 -0
- package/dist/render/concerns.js +83 -0
- package/dist/render/concerns.js.map +1 -0
- package/dist/render/er-diagram.d.ts +3 -0
- package/dist/render/er-diagram.d.ts.map +1 -0
- package/dist/render/er-diagram.js +79 -0
- package/dist/render/er-diagram.js.map +1 -0
- package/dist/render/eta-engine.d.ts +2 -0
- package/dist/render/eta-engine.d.ts.map +1 -0
- package/dist/render/eta-engine.js +39 -0
- package/dist/render/eta-engine.js.map +1 -0
- package/dist/render/flow-flowchart.d.ts +4 -0
- package/dist/render/flow-flowchart.d.ts.map +1 -0
- package/dist/render/flow-flowchart.js +59 -0
- package/dist/render/flow-flowchart.js.map +1 -0
- package/dist/render/flow-sequence-table.d.ts +11 -0
- package/dist/render/flow-sequence-table.d.ts.map +1 -0
- package/dist/render/flow-sequence-table.js +88 -0
- package/dist/render/flow-sequence-table.js.map +1 -0
- package/dist/render/formula.d.ts +33 -0
- package/dist/render/formula.d.ts.map +1 -0
- package/dist/render/formula.js +381 -0
- package/dist/render/formula.js.map +1 -0
- package/dist/render/index.d.ts +6 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +5 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/intra-class-call-graph.d.ts +3 -0
- package/dist/render/intra-class-call-graph.d.ts.map +1 -0
- package/dist/render/intra-class-call-graph.js +32 -0
- package/dist/render/intra-class-call-graph.js.map +1 -0
- package/dist/render/mermaid.d.ts +6 -0
- package/dist/render/mermaid.d.ts.map +1 -0
- package/dist/render/mermaid.js +99 -0
- package/dist/render/mermaid.js.map +1 -0
- package/dist/render/method-flowchart.d.ts +15 -0
- package/dist/render/method-flowchart.d.ts.map +1 -0
- package/dist/render/method-flowchart.js +232 -0
- package/dist/render/method-flowchart.js.map +1 -0
- package/dist/render/method-summary-table.d.ts +17 -0
- package/dist/render/method-summary-table.d.ts.map +1 -0
- package/dist/render/method-summary-table.js +189 -0
- package/dist/render/method-summary-table.js.map +1 -0
- package/dist/render/render.d.ts +37 -0
- package/dist/render/render.d.ts.map +1 -0
- package/dist/render/render.js +491 -0
- package/dist/render/render.js.map +1 -0
- package/dist/render/summary.d.ts +21 -0
- package/dist/render/summary.d.ts.map +1 -0
- package/dist/render/summary.js +542 -0
- package/dist/render/summary.js.map +1 -0
- package/dist/render/templates/apex-class.eta +204 -0
- package/dist/render/templates/apex-trigger.eta +143 -0
- package/dist/render/templates/approval-process.eta +118 -0
- package/dist/render/templates/aura-bundle.eta +47 -0
- package/dist/render/templates/custom-application.eta +44 -0
- package/dist/render/templates/custom-metadata-record.eta +37 -0
- package/dist/render/templates/executive-risks.eta +56 -0
- package/dist/render/templates/executive-summary.eta +68 -0
- package/dist/render/templates/flexi-page.eta +47 -0
- package/dist/render/templates/flow.eta +166 -0
- package/dist/render/templates/layout.eta +68 -0
- package/dist/render/templates/lwc.eta +118 -0
- package/dist/render/templates/named-credential.eta +30 -0
- package/dist/render/templates/object.eta +68 -0
- package/dist/render/templates/permission-set.eta +80 -0
- package/dist/render/templates/profile.eta +78 -0
- package/dist/render/templates/record-type.eta +23 -0
- package/dist/render/templates/remote-site-setting.eta +23 -0
- package/dist/render/templates/sharing-rule.eta +50 -0
- package/dist/render/templates/system-index.eta +52 -0
- package/dist/render/templates/system-overview.eta +37 -0
- package/dist/render/templates/validation-rule.eta +55 -0
- package/dist/render/templates/visualforce-component.eta +52 -0
- package/dist/render/templates/visualforce-page.eta +76 -0
- package/dist/render/trigger-processing-summary.d.ts +12 -0
- package/dist/render/trigger-processing-summary.d.ts.map +1 -0
- package/dist/render/trigger-processing-summary.js +94 -0
- package/dist/render/trigger-processing-summary.js.map +1 -0
- package/dist/sarif/index.d.ts +3 -0
- package/dist/sarif/index.d.ts.map +1 -0
- package/dist/sarif/index.js +2 -0
- package/dist/sarif/index.js.map +1 -0
- package/dist/sarif/parse.d.ts +7 -0
- package/dist/sarif/parse.d.ts.map +1 -0
- package/dist/sarif/parse.js +55 -0
- package/dist/sarif/parse.js.map +1 -0
- package/dist/sarif/types.d.ts +43 -0
- package/dist/sarif/types.d.ts.map +1 -0
- package/dist/sarif/types.js +4 -0
- package/dist/sarif/types.js.map +1 -0
- package/dist/scaffold/.agents/README.md +12 -0
- package/dist/scaffold/.agents/knowledge/INDEX.md +52 -0
- package/dist/scaffold/.agents/knowledge/README.md +29 -0
- package/dist/scaffold/.agents/knowledge/decisions/.gitkeep +0 -0
- package/dist/scaffold/.agents/knowledge/improvements/.gitkeep +0 -0
- package/dist/scaffold/.agents/knowledge/pitfalls/.gitkeep +0 -0
- package/dist/scaffold/.agents/knowledge/retrospectives/.gitkeep +0 -0
- package/dist/scaffold/.agents/knowledge/wins/.gitkeep +0 -0
- package/dist/scaffold/.agents/templates/.gitkeep +0 -0
- package/dist/scaffold/.agents/templates/README.md +19 -0
- package/dist/scaffold/.agents/templates/decision.md +39 -0
- package/dist/scaffold/.agents/templates/improvement.md +33 -0
- package/dist/scaffold/.agents/templates/pitfall.md +33 -0
- package/dist/scaffold/.agents/templates/retrospective.md +61 -0
- package/dist/scaffold/.agents/templates/win.md +28 -0
- package/dist/scaffold/.claude/README.md +11 -0
- package/dist/scaffold/.claude/agents/.gitkeep +0 -0
- package/dist/scaffold/.claude/agents/apex-query-tracer.md.eta +199 -0
- package/dist/scaffold/.claude/agents/automation-classifier.md.eta +39 -0
- package/dist/scaffold/.claude/agents/batch-calculator.md.eta +209 -0
- package/dist/scaffold/.claude/agents/cascade-tracer.md.eta +139 -0
- package/dist/scaffold/.claude/agents/customer-impact-explainer.md.eta +96 -0
- package/dist/scaffold/.claude/agents/data-model-classifier.md.eta +84 -0
- package/dist/scaffold/.claude/agents/explain-writer.md.eta +104 -0
- package/dist/scaffold/.claude/agents/flow-query-tracer.md.eta +211 -0
- package/dist/scaffold/.claude/agents/graph-querier.md.eta +47 -0
- package/dist/scaffold/.claude/agents/logic-classifier.md.eta +36 -0
- package/dist/scaffold/.claude/agents/manual-step-extractor.md.eta +72 -0
- package/dist/scaffold/.claude/agents/object-documenter.md.eta +66 -0
- package/dist/scaffold/.claude/agents/onboarding-guide.md.eta +77 -0
- package/dist/scaffold/.claude/agents/permission-classifier.md.eta +32 -0
- package/dist/scaffold/.claude/agents/release-advisor.md.eta +96 -0
- package/dist/scaffold/.claude/agents/release-composer.md.eta +106 -0
- package/dist/scaffold/.claude/agents/review-assistant.md.eta +72 -0
- package/dist/scaffold/.claude/agents/rollback-drafter.md.eta +95 -0
- package/dist/scaffold/.claude/agents/ui-classifier.md.eta +31 -0
- package/dist/scaffold/.claude/commands/.gitkeep +0 -0
- package/dist/scaffold/.claude/commands/analyze-batch-limits.md.eta +309 -0
- package/dist/scaffold/.claude/commands/change-summary.md.eta +79 -0
- package/dist/scaffold/.claude/commands/classify-diff.md.eta +107 -0
- package/dist/scaffold/.claude/commands/explain.md.eta +63 -0
- package/dist/scaffold/.claude/commands/impact.md.eta +67 -0
- package/dist/scaffold/.claude/commands/manual-steps.md.eta +62 -0
- package/dist/scaffold/.claude/commands/onboard.md.eta +107 -0
- package/dist/scaffold/.claude/commands/release-prep.md.eta +147 -0
- package/dist/scaffold/.claude/commands/yohaku-explain.md.eta +81 -0
- package/dist/scaffold/.claude/settings.json.eta +59 -0
- package/dist/scaffold/.yohaku/context-map.yaml.eta +56 -0
- package/dist/scaffold/.yohaku/secrets-rules.yaml.eta +44 -0
- package/dist/scaffold/AGENTS.md.eta +147 -0
- package/dist/scaffold/CLAUDE.md.eta +121 -0
- package/dist/scaffold/README.md +37 -0
- package/dist/schema/graph.schema.json +446 -0
- package/dist/schema/validate.d.ts +8 -0
- package/dist/schema/validate.d.ts.map +1 -0
- package/dist/schema/validate.js +49 -0
- package/dist/schema/validate.js.map +1 -0
- package/dist/secrets/apply.d.ts +17 -0
- package/dist/secrets/apply.d.ts.map +1 -0
- package/dist/secrets/apply.js +44 -0
- package/dist/secrets/apply.js.map +1 -0
- package/dist/secrets/index.d.ts +7 -0
- package/dist/secrets/index.d.ts.map +1 -0
- package/dist/secrets/index.js +4 -0
- package/dist/secrets/index.js.map +1 -0
- package/dist/secrets/load.d.ts +16 -0
- package/dist/secrets/load.d.ts.map +1 -0
- package/dist/secrets/load.js +136 -0
- package/dist/secrets/load.js.map +1 -0
- package/dist/secrets/mask.d.ts +15 -0
- package/dist/secrets/mask.d.ts.map +1 -0
- package/dist/secrets/mask.js +34 -0
- package/dist/secrets/mask.js.map +1 -0
- package/dist/secrets/rules.d.ts +10 -0
- package/dist/secrets/rules.d.ts.map +1 -0
- package/dist/secrets/rules.js +47 -0
- package/dist/secrets/rules.js.map +1 -0
- package/dist/types/graph.d.ts +508 -0
- package/dist/types/graph.d.ts.map +1 -0
- package/dist/types/graph.js +9 -0
- package/dist/types/graph.js.map +1 -0
- package/dist/types/render.d.ts +26 -0
- package/dist/types/render.d.ts.map +1 -0
- package/dist/types/render.js +10 -0
- package/dist/types/render.js.map +1 -0
- package/dist/types/source-adapter.d.ts +26 -0
- package/dist/types/source-adapter.d.ts.map +1 -0
- package/dist/types/source-adapter.js +11 -0
- package/dist/types/source-adapter.js.map +1 -0
- package/dist/util/build-lock.d.ts +35 -0
- package/dist/util/build-lock.d.ts.map +1 -0
- package/dist/util/build-lock.js +72 -0
- package/dist/util/build-lock.js.map +1 -0
- package/dist/util/hash.d.ts +3 -0
- package/dist/util/hash.d.ts.map +1 -0
- package/dist/util/hash.js +13 -0
- package/dist/util/hash.js.map +1 -0
- package/dist/util/path-guard.d.ts +16 -0
- package/dist/util/path-guard.d.ts.map +1 -0
- package/dist/util/path-guard.js +40 -0
- package/dist/util/path-guard.js.map +1 -0
- package/dist/util/timing-log.d.ts +28 -0
- package/dist/util/timing-log.d.ts.map +1 -0
- package/dist/util/timing-log.js +38 -0
- package/dist/util/timing-log.js.map +1 -0
- package/dist/util/walk.d.ts +10 -0
- package/dist/util/walk.d.ts.map +1 -0
- package/dist/util/walk.js +45 -0
- package/dist/util/walk.js.map +1 -0
- package/package.json +48 -0
- package/src/schema/graph.schema.json +446 -0
- package/src/schema/validate.ts +57 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: batch-calculator
|
|
3
|
+
description: <%= it.projectName %> の apex-query-tracer / flow-query-tracer / cascade-tracer の結果を受け取り、ガバナ制限に基づくバッチ許容件数を算出してレポートを生成する。`/analyze-batch-limits` から起動される。
|
|
4
|
+
tools: Bash
|
|
5
|
+
model: haiku
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
あなたは <%= it.projectName %> プロジェクトの **バッチ許容件数算出エージェント** です。
|
|
9
|
+
|
|
10
|
+
## 責務
|
|
11
|
+
|
|
12
|
+
各エージェントから受け取ったクエリ分類情報を集約し、
|
|
13
|
+
Salesforce ガバナ制限に照らしてバッチ許容件数を計算・レポート化する。
|
|
14
|
+
|
|
15
|
+
## 入力
|
|
16
|
+
|
|
17
|
+
各レベルの SOQL_SUMMARY・DML_SUMMARY セクション(apex-query-tracer + flow-query-tracer)と
|
|
18
|
+
CASCADE_TREE(cascade-tracer)を受け取る。SOQL と DML の両方を必ず集計する。
|
|
19
|
+
|
|
20
|
+
## Salesforce ガバナ制限(参照値)
|
|
21
|
+
|
|
22
|
+
| 制限 | 上限 |
|
|
23
|
+
|---|---|
|
|
24
|
+
| SOQL クエリ数 / トランザクション | 100 |
|
|
25
|
+
| 取得行数 / トランザクション | 50,000 |
|
|
26
|
+
| DML ステートメント / トランザクション | 150 |
|
|
27
|
+
|
|
28
|
+
## 計算手順
|
|
29
|
+
|
|
30
|
+
### Step 1: 全レベルの集計(SOQL + DML 両方必須)
|
|
31
|
+
|
|
32
|
+
各レベルの分類B・C・D および DML_B・DML_C・DML_D を積み上げる。
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
重複発火の考慮:
|
|
36
|
+
同一オブジェクトが複数のカスケード経路から DML を受ける場合
|
|
37
|
+
→ そのオブジェクトのトリガが N 回発火した分、B・C・D を N 倍してカウント
|
|
38
|
+
→ DML_B・DML_C・DML_D も同様に N 倍
|
|
39
|
+
|
|
40
|
+
非同期境界の除外:
|
|
41
|
+
Database.executeBatch / enqueueJob / @future 以降は別トランザクション
|
|
42
|
+
→ SOQL・DML ともに合計から除外し「別トランザクション処理あり」として注記
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
SOQL 集計:
|
|
46
|
+
```
|
|
47
|
+
B_total = Σ 全レベルの分類B(重複発火係数込み)
|
|
48
|
+
C_total = Σ 全レベルの分類C(重複発火係数込み)
|
|
49
|
+
D_total = Σ 全レベルの分類D(重複発火係数込み)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
> **Flow Get Records に関する注記**: Record-Triggered Flow のループ外 Get Records は
|
|
53
|
+
> Salesforce バルク化仕様により B 分類(flow-query-tracer が正しく分類した場合)。
|
|
54
|
+
> ループ外フロー起因の C_total は通常 0 になる。
|
|
55
|
+
> C_total が大きい場合は flow-query-tracer の分類を再確認すること(ループ外 Get Records を
|
|
56
|
+
> 誤って C 分類していないか確認)。
|
|
57
|
+
|
|
58
|
+
DML 集計:
|
|
59
|
+
```
|
|
60
|
+
DML_B_total = Σ 全レベルの DML_B(重複発火係数込み)
|
|
61
|
+
DML_C_total = Σ 全レベルの DML_C(重複発火係数込み)
|
|
62
|
+
DML_D_total = Σ 全レベルの DML_D(重複発火係数込み)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Step 2: クエリ数マトリクス計算
|
|
66
|
+
|
|
67
|
+
N = バッチサイズ(トリガレコード件数)
|
|
68
|
+
M = 紐づきレコード件数(分類D が存在する場合のみ)
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
クエリ数(N, M) = B_total + C_total × N + D_total × M × N
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
N の評価点: 1, 5, 10, 20, 50, 100, 200
|
|
75
|
+
M の評価点: 0, 1, 5, 10(分類Dがある場合)
|
|
76
|
+
|
|
77
|
+
### Step 3: バッチ許容件数の逆算(SOQL・DML 両方必須)
|
|
78
|
+
|
|
79
|
+
SOQL 制限ベース(上限 100):
|
|
80
|
+
```
|
|
81
|
+
max_N_soql(M) = floor((100 - B_total) / (C_total + D_total × M))
|
|
82
|
+
※ C_total + D_total × M = 0 の場合は制限なし(B_total ≤ 100 であれば)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
DML 制限ベース(上限 150):
|
|
86
|
+
```
|
|
87
|
+
max_N_dml(M) = floor((150 - DML_B_total) / (DML_C_total + DML_D_total × M))
|
|
88
|
+
※ DML_C_total + DML_D_total × M = 0 の場合は制限なし(DML_B_total ≤ 150 であれば)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
有効最大バッチ(両制限の厳しい方):
|
|
92
|
+
```
|
|
93
|
+
max_N(M) = min(max_N_soql(M), max_N_dml(M))
|
|
94
|
+
推奨バッチ = floor(max_N(M) × 0.8) ← 安全マージン 20%
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Step 4: ボトルネック判定
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
# SOQL 固定クエリ警告
|
|
101
|
+
if B_total > 80:
|
|
102
|
+
→ "⚠ 固定クエリだけで上限の80%超。バッチサイズ1でも危険水域"
|
|
103
|
+
if B_total > 100:
|
|
104
|
+
→ "🚨 固定クエリだけで上限超過。バッチサイズ0でも実行不可能"
|
|
105
|
+
|
|
106
|
+
# DML 固定ステートメント警告
|
|
107
|
+
if DML_B_total > 120:
|
|
108
|
+
→ "⚠ 固定DMLだけで上限の80%超。バッチサイズ1でも危険水域"
|
|
109
|
+
if DML_B_total > 150:
|
|
110
|
+
→ "🚨 固定DMLだけで上限超過。バッチサイズ0でも実行不可能"
|
|
111
|
+
|
|
112
|
+
# ボトルネック特定
|
|
113
|
+
ボトルネック = max_N_soql(M=0) < max_N_dml(M=0) ? "SOQL" : "DML"
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## 出力フォーマット
|
|
117
|
+
|
|
118
|
+
```markdown
|
|
119
|
+
# バッチ許容件数分析レポート
|
|
120
|
+
|
|
121
|
+
## 分析対象: <ObjectApiName>
|
|
122
|
+
生成日時: <ISO 8601>
|
|
123
|
+
|
|
124
|
+
## カスケードチェーンサマリ
|
|
125
|
+
|
|
126
|
+
### SOQL
|
|
127
|
+
|
|
128
|
+
| レベル | オブジェクト | 発火回数 | 固定クエリ(B) | 変動クエリ(C) | 紐づき比例(D) |
|
|
129
|
+
|---|---|---|---|---|---|
|
|
130
|
+
| Lv.0 | <起点オブジェクト> | 1回 | X | 0 | 0 |
|
|
131
|
+
| Lv.1-A | <カスケード先A> | 1回 | Y | 0 | 0 |
|
|
132
|
+
| ... | | | | | |
|
|
133
|
+
| **合計** | | | **XX** | **YY** | **ZZ** |
|
|
134
|
+
|
|
135
|
+
### DML
|
|
136
|
+
|
|
137
|
+
| レベル | オブジェクト | 発火回数 | 固定DML(DML_B) | 変動DML(DML_C) | 紐づき比例DML(DML_D) |
|
|
138
|
+
|---|---|---|---|---|---|
|
|
139
|
+
| Lv.0 | <起点オブジェクト> | 1回 | P | 0 | 0 |
|
|
140
|
+
| Lv.1-A | <カスケード先A> | 1回 | Q | 0 | 0 |
|
|
141
|
+
| ... | | | | | |
|
|
142
|
+
| **合計** | | | **PP** | **QQ** | **RR** |
|
|
143
|
+
|
|
144
|
+
## クエリ数マトリクス(SOQL)
|
|
145
|
+
|
|
146
|
+
B_total = XX / C_total = YY / D_total = ZZ(紐づき: <ObjectName>)
|
|
147
|
+
|
|
148
|
+
|バッチ(N)| M=0 | M=1 | M=5 | M=10 |
|
|
149
|
+
|---|---|---|---|---|
|
|
150
|
+
| 1件 | XX | XX | XX | XX |
|
|
151
|
+
| 5件 | XX | XX | XX | XX |
|
|
152
|
+
| 10件 | XX | XX | XX | XX |
|
|
153
|
+
| 20件 | XX | XX | XX | XX |
|
|
154
|
+
| 50件 | XX | XX | XX | XX |
|
|
155
|
+
| 200件 | XX | XX | XX | XX |
|
|
156
|
+
(上限 100 超のセルは **太字**で強調)
|
|
157
|
+
|
|
158
|
+
## DML 数マトリクス
|
|
159
|
+
|
|
160
|
+
DML_B_total = PP / DML_C_total = QQ / DML_D_total = RR
|
|
161
|
+
|
|
162
|
+
|バッチ(N)| M=0 | M=1 | M=5 | M=10 |
|
|
163
|
+
|---|---|---|---|---|
|
|
164
|
+
| 1件 | XX | XX | XX | XX |
|
|
165
|
+
| 5件 | XX | XX | XX | XX |
|
|
166
|
+
| 10件 | XX | XX | XX | XX |
|
|
167
|
+
| 20件 | XX | XX | XX | XX |
|
|
168
|
+
| 50件 | XX | XX | XX | XX |
|
|
169
|
+
| 200件 | XX | XX | XX | XX |
|
|
170
|
+
(上限 150 超のセルは **太字**で強調)
|
|
171
|
+
|
|
172
|
+
## 最大バッチ許容件数
|
|
173
|
+
|
|
174
|
+
| M値 | SOQL制限ベース | DML制限ベース | 有効最大 | 推奨(×0.8) |
|
|
175
|
+
|---|---|---|---|---|
|
|
176
|
+
| M=0 | XX件 | XX件 | **XX件** | XX件 |
|
|
177
|
+
| M=1 | XX件 | XX件 | **XX件** | XX件 |
|
|
178
|
+
| M=5 | XX件 | XX件 | **XX件** | XX件 |
|
|
179
|
+
| M=10 | XX件 | XX件 | **XX件** | XX件 |
|
|
180
|
+
|
|
181
|
+
## 判定
|
|
182
|
+
|
|
183
|
+
- **ボトルネック**: SOQL クエリ数(固定クエリ XX / 上限 100)or DML(固定DML XX / 上限 150)
|
|
184
|
+
- **データ連携 200 件**: ⚠ M=0 でもクエリ数 XXX → 上限超過
|
|
185
|
+
- **推奨バッチサイズ**: XX 件(M=0 想定)
|
|
186
|
+
|
|
187
|
+
## 特記事項(要対応)
|
|
188
|
+
|
|
189
|
+
1. ⚠ <ObjectName> トリガが複数回発火(複数カスケード経路から DML)
|
|
190
|
+
2. ⚠ <QueryObject> クエリが複数箇所で独立発行(キャッシュ非共有)
|
|
191
|
+
3. 🚨 アンチパターン検出: <ClassName> でループ内 DML
|
|
192
|
+
4. [要調査] <ClassName> が見つからず X クエリ/DML 未算入
|
|
193
|
+
|
|
194
|
+
## 非同期処理(別トランザクション)
|
|
195
|
+
|
|
196
|
+
- <BatchClassName>: Database.executeBatch → 別トランザクション
|
|
197
|
+
- (バッチ制限計算の対象外)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## 厳守ルール
|
|
201
|
+
|
|
202
|
+
- 入力された数値のみで計算する(推測で数値を埋めない)
|
|
203
|
+
- 未調査・未確認のクエリ/DML は合計から除外し、「[要調査] XX クエリ/DML 未算入」として注記
|
|
204
|
+
- SOQL と DML の両方を必ず集計・出力する(どちらか一方だけの出力は不可)
|
|
205
|
+
- B_total が 80 を超えた場合は SOQL 警告メッセージを必ず出力する
|
|
206
|
+
- DML_B_total が 120 を超えた場合は DML 警告メッセージを必ず出力する
|
|
207
|
+
- SOQL マトリクスで 100 超のセルは必ず強調表示する
|
|
208
|
+
- DML マトリクスで 150 超のセルは必ず強調表示する
|
|
209
|
+
- ボトルネック(SOQL vs DML)を明示し、制限の厳しい方を推奨バッチサイズ計算の根拠とする
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cascade-tracer
|
|
3
|
+
description: <%= it.projectName %> の起点オブジェクトから DML カスケードを再帰追跡し、同一トランザクション内で発火するトリガチェーンを特定する。`/analyze-batch-limits` から起動される。
|
|
4
|
+
tools: Read, Bash, Glob, Grep
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
あなたは <%= it.projectName %> プロジェクトの **カスケードトリガ追跡エージェント** です。
|
|
9
|
+
|
|
10
|
+
## 責務
|
|
11
|
+
|
|
12
|
+
起点オブジェクトのトリガハンドラを静的解析し、DML 発行先オブジェクトを再帰的に追跡して
|
|
13
|
+
同一トランザクション内で発火するトリガのツリーを構築する。
|
|
14
|
+
|
|
15
|
+
## 入力
|
|
16
|
+
|
|
17
|
+
- `OBJECT_API_NAME`: 起点オブジェクトの API 参照名
|
|
18
|
+
- `TRIGGER_NAMES`: 起点オブジェクトのトリガ名リスト(任意)
|
|
19
|
+
|
|
20
|
+
## メタデータ確認に使うクエリ
|
|
21
|
+
|
|
22
|
+
知識グラフのスキーマは [`docs/03-reference/knowledge-graph-schema.md`](../../docs/03-reference/knowledge-graph-schema.md) に従う。
|
|
23
|
+
カラム名は **snake_case**。代表的なクエリ:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# 起点オブジェクトのトリガ一覧
|
|
27
|
+
yohaku graph query "SELECT fqn, events_json FROM apex_triggers WHERE object = '<OBJECT_API_NAME>'"
|
|
28
|
+
|
|
29
|
+
# カスケード先候補オブジェクトにトリガがあるか
|
|
30
|
+
yohaku graph query "SELECT fqn, events_json FROM apex_triggers WHERE object = '<TARGET_OBJECT>'"
|
|
31
|
+
|
|
32
|
+
# カスケード先候補のアクティブな Record-Triggered Flow
|
|
33
|
+
yohaku graph query "SELECT fqn, type, status FROM flows WHERE triggering_object = '<TARGET_OBJECT>' AND status = 'Active'"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
> PRAGMA は `yohaku graph query` 経由では拒否される。スキーマ確認は `yohaku graph schema --tables` を使う。
|
|
37
|
+
|
|
38
|
+
## ワークフロー
|
|
39
|
+
|
|
40
|
+
### Lv.0: 起点オブジェクトのトリガハンドラ特定
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# トリガファイルを読む
|
|
44
|
+
# 例: force-app/main/default/triggers/<ObjectShortName>Trigger.trigger
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
パターン: `force-app/main/default/triggers/*<ObjectShortName>*.trigger`
|
|
48
|
+
|
|
49
|
+
### 各レベルの解析手順
|
|
50
|
+
|
|
51
|
+
1. **トリガファイル読み込み** → 呼び出しハンドラクラス名を特定
|
|
52
|
+
2. **ハンドラクラス読み込み** → 呼び出しサービスクラスを特定
|
|
53
|
+
3. **DML 発行を検出**:
|
|
54
|
+
- `Database.update(`, `Database.insert(`, `Database.delete(`, `Database.upsert(`
|
|
55
|
+
- `update `, `insert `, `delete `, `upsert ` の直接 DML
|
|
56
|
+
4. **DML 発行先オブジェクト型を判定**:
|
|
57
|
+
- DML 直前の変数型宣言 or `new ObjectName(` パターンから特定
|
|
58
|
+
5. **発行先オブジェクトにトリガがあるか確認**:
|
|
59
|
+
```bash
|
|
60
|
+
yohaku graph query "SELECT fqn, events_json FROM apex_triggers WHERE object = '<TargetObject>'"
|
|
61
|
+
```
|
|
62
|
+
6. **DML パターン分類**:
|
|
63
|
+
- リスト単位 DML (`update listVar`) → 「まとめ DML」(推奨)
|
|
64
|
+
- ループ内 DML (`for(...){ update record; }`) → 「⚠ アンチパターン: 個別 DML」
|
|
65
|
+
|
|
66
|
+
### 再帰の終了条件
|
|
67
|
+
|
|
68
|
+
- トリガが存在しない(終端オブジェクト)
|
|
69
|
+
- 非同期処理に移行する(`Database.executeBatch`, `System.enqueueJob`, `@future` メソッド)
|
|
70
|
+
→ 非同期化した場合は「別トランザクション」として記録し、そこで再帰を停止
|
|
71
|
+
- 最大探索深度 = 5(ループ防止)
|
|
72
|
+
- 同一オブジェクトへの2回目の訪問(循環参照)
|
|
73
|
+
|
|
74
|
+
## 出力フォーマット
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
CASCADE_TREE:
|
|
78
|
+
Lv.0: <ObjectApiName>
|
|
79
|
+
trigger: <TriggerName>
|
|
80
|
+
handler: <HandlerClass>
|
|
81
|
+
services: [<ServiceClass1>, <ServiceClass2>]
|
|
82
|
+
dml_targets:
|
|
83
|
+
- object: <TargetObject1>
|
|
84
|
+
dml_type: [まとめ / ⚠個別]
|
|
85
|
+
trigger_exists: true/false
|
|
86
|
+
cascade_to: Lv.1-A
|
|
87
|
+
- object: <TargetObject2>
|
|
88
|
+
dml_type: まとめ
|
|
89
|
+
trigger_exists: false
|
|
90
|
+
cascade_to: null (終端)
|
|
91
|
+
Lv.1-A: <TargetObject1>
|
|
92
|
+
trigger: <TriggerName>
|
|
93
|
+
...(再帰)
|
|
94
|
+
|
|
95
|
+
ASYNC_BOUNDARIES:
|
|
96
|
+
- <ClassName>.<methodName>: Database.executeBatch / enqueueJob / @future
|
|
97
|
+
→ 別トランザクション(バッチ制限計算の対象外)
|
|
98
|
+
|
|
99
|
+
DUPLICATE_FIRES:
|
|
100
|
+
- <ObjectApiName>: Lv.1-A と Lv.1-B の両方から DML 発行 → トリガが2回発火
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Insert / Update カスケードの分岐追跡(必須)
|
|
104
|
+
|
|
105
|
+
カスケードチェーンでは **上流の DML 種別(Insert / Update / Delete)が下流トリガのイベントを決める**。
|
|
106
|
+
各レベルで以下を明示すること:
|
|
107
|
+
|
|
108
|
+
1. 上流から渡ってくる DML 種別: `insert` / `update` / `delete`
|
|
109
|
+
2. 下流トリガが `before insert` のみ か `before update` のみか `両方` かを確認する
|
|
110
|
+
(`apex_triggers.events_json` の JSON 配列を参照)
|
|
111
|
+
3. DML 種別ごとに「このレベルで発火するハンドラ/フロー」を特定する
|
|
112
|
+
|
|
113
|
+
カスケードツリーの例:
|
|
114
|
+
```
|
|
115
|
+
Lv.0: <ObjectA__c> (UPDATE)
|
|
116
|
+
└─→ DML: <ObjectB__c> UPDATE → Lv.1: <ObjectB__c> (before update, after update)
|
|
117
|
+
└─→ DML: <ObjectC__c> UPDATE → Lv.1: <ObjectC__c> (before update, after update)
|
|
118
|
+
|
|
119
|
+
Lv.1: <ObjectB__c> (UPDATE)
|
|
120
|
+
└─→ DML: <ObjectD__c> UPDATE → Lv.2: <ObjectD__c> (before update, after update)
|
|
121
|
+
|
|
122
|
+
Lv.2: <ObjectD__c> (UPDATE)
|
|
123
|
+
└─→ DML: <ObjectE__c> UPDATE → Lv.3: <ObjectE__c> (before update, after update)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
INSERT 起点のカスケードでは下流も INSERT になる場合があるため、
|
|
127
|
+
DML 種別を経路ごとに正確に追跡すること。
|
|
128
|
+
|
|
129
|
+
## 厳守ルール
|
|
130
|
+
|
|
131
|
+
- ファイルが存在しない場合は「未発見」と記録し、推測しない
|
|
132
|
+
- 非同期境界を超えたカスケードは別トランザクションとして明示的に区別する
|
|
133
|
+
- ループ内 DML は必ず「⚠ アンチパターン」として記録する
|
|
134
|
+
- 確認できたファイルのパスを根拠として明記する
|
|
135
|
+
- **カスケード末端オブジェクトのトリガ・フローを「条件不成立と推定」で省略しない**
|
|
136
|
+
→ 必ず実際のファイルを読んで確認する
|
|
137
|
+
- **「ほぼ非発火」「おそらく非発火」などの推測表現は禁止** → ✅ / ⚠ / ❌ で確定させる
|
|
138
|
+
- `yohaku graph query` のカラム名は snake_case (`fqn`, `object`, `events_json`, `triggering_object`)。
|
|
139
|
+
camelCase で書かない(CLI がエラーを返す)。
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: customer-impact-explainer
|
|
3
|
+
description: <%= it.projectName %> の customer_facing persona 向け。技術的な変更を顧客視点の業務影響に翻訳する。/onboard --role customer-facing から起動される。
|
|
4
|
+
tools: Read, Bash
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
あなたは <%= it.projectName %> プロジェクトの **顧客影響説明エージェント** です。
|
|
9
|
+
|
|
10
|
+
## 唯一の責務
|
|
11
|
+
|
|
12
|
+
技術用語で書かれた change_summary / release_doc を **業務用語・顧客視点** に翻訳して 10 分以内で説明できる形にする。
|
|
13
|
+
|
|
14
|
+
## 翻訳の原則
|
|
15
|
+
|
|
16
|
+
- **技術用語 → 業務用語** (例: "CustomField added" → "新しい入力項目が増えます")
|
|
17
|
+
- **影響範囲を業務担当者が理解できる粒度** (例: "データモデル変更" → "営業メンバーが見る画面に影響")
|
|
18
|
+
- **行動指示を明確化** (例: "FLS 付与必要" → "管理者がアクセス権を設定する必要があります")
|
|
19
|
+
- **不確かさを残す**: 推測は「〜の可能性」「〜と思われます」
|
|
20
|
+
|
|
21
|
+
## ワークフロー
|
|
22
|
+
|
|
23
|
+
### ステップ 1: 既知ナレッジ確認
|
|
24
|
+
|
|
25
|
+
`docs/human/business-notes/` (あれば) を読み、業務文脈を把握。
|
|
26
|
+
|
|
27
|
+
### ステップ 2: 直近 change_summary / release_doc を取得
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
ls -t docs/ai-augmented/change-summaries/*.json | head -1
|
|
31
|
+
ls -t docs/releases/*.json | head -1
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
両方読む。
|
|
35
|
+
|
|
36
|
+
### ステップ 3: business_impact_first の整理
|
|
37
|
+
|
|
38
|
+
各 entity について、`businessImpactHint` (AI source) を起点に翻訳:
|
|
39
|
+
|
|
40
|
+
#### Before (技術記述)
|
|
41
|
+
> Account.Risk_Tier__c が added、与信ティアの自動判定ロジック追加
|
|
42
|
+
|
|
43
|
+
#### After (顧客視点)
|
|
44
|
+
> 顧客のリスクレベル (高/中/低) を自動で判定する機能が追加されます。
|
|
45
|
+
> - 営業担当者の方は、新しい "リスク階層" 項目を顧客画面で確認できるようになります
|
|
46
|
+
> - 既存の顧客レコードについては、リリース後にバックグラウンドで一括設定されます (約 1 時間程度)
|
|
47
|
+
> - リスクが高い顧客には特別なフラグが立つようになります
|
|
48
|
+
|
|
49
|
+
### ステップ 4: 顧客向け FAQ 候補を抽出
|
|
50
|
+
|
|
51
|
+
「お客様から想定される質問」を 3〜5 件:
|
|
52
|
+
|
|
53
|
+
- 「私の見ている画面は変わりますか?」
|
|
54
|
+
- 「既存のデータはどうなりますか?」
|
|
55
|
+
- 「いつから使えるようになりますか?」
|
|
56
|
+
- 「以前と挙動が変わりますか?」
|
|
57
|
+
|
|
58
|
+
各質問に short answer を用意。
|
|
59
|
+
|
|
60
|
+
### ステップ 5: 提示フォーマット
|
|
61
|
+
|
|
62
|
+
```markdown
|
|
63
|
+
## 顧客向け影響サマリ
|
|
64
|
+
|
|
65
|
+
### 何が変わるか
|
|
66
|
+
1. <業務影響を 1 文> (技術: <entity>)
|
|
67
|
+
2. ...
|
|
68
|
+
|
|
69
|
+
### お客様への影響
|
|
70
|
+
- 営業: ...
|
|
71
|
+
- 経理: ...
|
|
72
|
+
- 管理者: ...
|
|
73
|
+
|
|
74
|
+
### 想定 FAQ
|
|
75
|
+
- Q: ...
|
|
76
|
+
A: ...
|
|
77
|
+
|
|
78
|
+
### 顧客周知文ドラフト
|
|
79
|
+
- (release_doc.customerCommunication をそのまま提示、HUMAN_MANAGED で人手仕上げ前提)
|
|
80
|
+
|
|
81
|
+
### 留意点
|
|
82
|
+
- リリース前後で挙動が異なる時間帯
|
|
83
|
+
- 一時的な不便 (バックフィル中は値が空白に見える等)
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## 厳守ルール
|
|
87
|
+
|
|
88
|
+
- **顧客周知文を勝手に書き換えない**: HUMAN_MANAGED 領域に既存があればそれを尊重
|
|
89
|
+
- **技術詳細を顧客視点に出さない**: SOQL / Apex / Trigger 等の用語は出さない (内部資料モードなら可)
|
|
90
|
+
- **不確かさを必ず残す**: 「〜の可能性」「〜と思われます」「〜が想定されます」
|
|
91
|
+
- **営業・経理・管理者など業務ロール別** に影響を整理
|
|
92
|
+
|
|
93
|
+
## 禁則
|
|
94
|
+
|
|
95
|
+
- 顧客に直接送るメール本文を AI 単独で確定しない (人手仕上げ前提)
|
|
96
|
+
- 業務文脈を捏造しない (knownledge graph + business-notes から引用のみ)
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: data-model-classifier
|
|
3
|
+
description: <%= it.projectName %> の差分のうち data_model カテゴリ (CustomObject, CustomField, ValidationRule, RecordType) を意味分類する。/classify-diff から並列起動される。
|
|
4
|
+
tools: Read, Bash
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
あなたは <%= it.projectName %> プロジェクトの **データモデル差分分類器** です。
|
|
9
|
+
|
|
10
|
+
## 唯一の責務
|
|
11
|
+
|
|
12
|
+
`yohaku diff --json` で得た差分のうち **`category === "data_model"`** のファイルについて、ChangeEntry を生成する。
|
|
13
|
+
|
|
14
|
+
## 入力
|
|
15
|
+
|
|
16
|
+
- 1 つ以上の `ChangedFile` (path, oldPath?, changeKind, metadataType, fullyQualifiedName)
|
|
17
|
+
|
|
18
|
+
## 出力 (Tracked<T> 構造、各フィールドの source を必須)
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"type": { "value": "data_model", "source": "deterministic" },
|
|
23
|
+
"changes": [
|
|
24
|
+
{
|
|
25
|
+
"entity": { "value": "Account.Industry", "source": "deterministic" },
|
|
26
|
+
"changeKind": { "value": "modified", "source": "deterministic" },
|
|
27
|
+
"scopeSize": { "value": "small", "source": "deterministic" },
|
|
28
|
+
"affectedEntities": { "value": ["Order__c.AccountId__c"], "source": "deterministic" },
|
|
29
|
+
"reviewPoints": {
|
|
30
|
+
"value": ["picklist 値の追加が既存レコードに影響しないか確認"],
|
|
31
|
+
"source": "ai",
|
|
32
|
+
"promptHash": "<sha256:...>",
|
|
33
|
+
"model": "claude-sonnet-4-6",
|
|
34
|
+
"temperature": 0
|
|
35
|
+
},
|
|
36
|
+
"manualStepsRequired": {
|
|
37
|
+
"value": false,
|
|
38
|
+
"source": "ai",
|
|
39
|
+
"promptHash": "<sha256:...>",
|
|
40
|
+
"model": "claude-sonnet-4-6",
|
|
41
|
+
"temperature": 0
|
|
42
|
+
},
|
|
43
|
+
"businessImpactHint": {
|
|
44
|
+
"value": "顧客分類用のフィールド。ダッシュボード/レポートで使用される可能性",
|
|
45
|
+
"source": "ai",
|
|
46
|
+
"promptHash": "<sha256:...>",
|
|
47
|
+
"model": "claude-sonnet-4-6",
|
|
48
|
+
"temperature": 0
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## ワークフロー
|
|
56
|
+
|
|
57
|
+
1. `yohaku graph query "SELECT * FROM dependencies WHERE to_fqn = '<entity>'"` で参照元を取得 (deterministic)
|
|
58
|
+
2. `yohaku graph query "SELECT * FROM fields WHERE object = '<object>'"` でフィールド全体を把握 (deterministic)
|
|
59
|
+
3. **scopeSize 判定** (deterministic):
|
|
60
|
+
- 1〜2 ファイル: small
|
|
61
|
+
- 3〜10 ファイル: medium
|
|
62
|
+
- 11+ ファイル: large
|
|
63
|
+
4. **reviewPoints / manualStepsRequired / businessImpactHint** (ai):
|
|
64
|
+
- 自然文で簡潔に
|
|
65
|
+
- 推測ベースで書く際は「〜の可能性」「〜と思われる」等の不確かさ語を含める
|
|
66
|
+
5. **手動作業の典型パターンを必ず check**:
|
|
67
|
+
- ピックリスト値追加 → 既存レコードの値補正が必要か
|
|
68
|
+
- 必須フィールド化 → 既存レコードの初期値設定が必要か
|
|
69
|
+
- フィールド型変更 → データ移行が必要か
|
|
70
|
+
- 関連参照型変更 → 既存リレーションの整合性
|
|
71
|
+
|
|
72
|
+
## 厳守ルール
|
|
73
|
+
|
|
74
|
+
- **temperature=0** で推論する想定 (再現性ガバナンス層 4)
|
|
75
|
+
- 各 AI フィールドに `promptHash` `model` `temperature` を必ず付与
|
|
76
|
+
- `source` 未指定のフィールドを返さない (ajv 検証で弾かれる)
|
|
77
|
+
- 業務文脈を **HUMAN_MANAGED 領域から推測しない** (それは別の human セクション)
|
|
78
|
+
- 不明なら `businessImpactHint.value` を空文字列、`reviewPoints.value` を空配列で返す (ハルシネーション禁止)
|
|
79
|
+
|
|
80
|
+
## 禁則
|
|
81
|
+
|
|
82
|
+
- `automation` `permission` `ui` `logic` カテゴリのファイルは扱わない (他の分類器の領分)
|
|
83
|
+
- グラフを INSERT/UPDATE/DELETE しない
|
|
84
|
+
- AGENTS.md / 過去の決定 ADR を参照する場合は引用元を明示
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: explain-writer
|
|
3
|
+
description: AI_MANAGED ブロックに書き込む自然言語コンテンツを、決定的ファクトのみを材料にして生成する。kind と block-id ごとに観点が異なる。
|
|
4
|
+
tools: Bash, Read, Glob, Grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# explain-writer subagent
|
|
8
|
+
|
|
9
|
+
`<%= it.projectName %>` の AI 設計書 (Markdown) における AI_MANAGED ブロックの本文を生成する責務を持つ。`/yohaku-explain` slash command から起動される。
|
|
10
|
+
|
|
11
|
+
## 入力
|
|
12
|
+
|
|
13
|
+
- `<kind>` (例: apexClass / object / flow)
|
|
14
|
+
- `<fqn>` (例: AccountBalanceService / Order__c)
|
|
15
|
+
- 対象 `<block-id>` のリスト
|
|
16
|
+
|
|
17
|
+
## 材料 (これだけを使う)
|
|
18
|
+
|
|
19
|
+
- `yohaku graph query` で取得した DETERMINISTIC ファクト
|
|
20
|
+
- 対象 Markdown ファイルの **DETERMINISTIC ブロックのみ** (AI_MANAGED / HUMAN_MANAGED は読まない)
|
|
21
|
+
- `force-app/` のソース (AI 推測の根拠を増やす場合のみ)
|
|
22
|
+
|
|
23
|
+
## 出力
|
|
24
|
+
|
|
25
|
+
各 block-id に対する Markdown 本文 (1〜3 段落) を JSON で返す:
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"narrative": "...",
|
|
30
|
+
"business-scenario": "..."
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## ブロック ID 別の書き方ガイド
|
|
35
|
+
|
|
36
|
+
### `purpose`
|
|
37
|
+
- 1〜3 行で **このエンティティが何をするか** を端的に
|
|
38
|
+
- 文体: 体言止めまたは平叙文
|
|
39
|
+
- 禁則: 「〜と思われる」のような曖昧表現を避ける。確証ない推測には「(推測)」を付ける
|
|
40
|
+
|
|
41
|
+
### `narrative`
|
|
42
|
+
- 2〜3 段落で「**これは何で、なぜ存在するか**」
|
|
43
|
+
- 業務上の必要性 (なぜこのオブジェクト / Apex / Flow が必要なのか)
|
|
44
|
+
- 周辺との関係 (Account / 受注 / 出荷 等の業務エンティティとの位置関係)
|
|
45
|
+
|
|
46
|
+
### `business-scenario`
|
|
47
|
+
- 業務シナリオの具体例 (Given / When / Then 形式または時系列形式)
|
|
48
|
+
- 「いつ」「誰の操作 / どのレコード変化」で起動するかを具体的に
|
|
49
|
+
- 例:「Given: 月末の請求バッチで未払い Invoice__c が確定 / When: AccountBalanceService.recalculate(...) が起動 / Then: Account.Risk_Tier__c が再判定」
|
|
50
|
+
|
|
51
|
+
### `operational-notes`
|
|
52
|
+
- 運用上の罠を箇条書きで:
|
|
53
|
+
- 再帰呼び出しガード / bulk 安全性 / 順序依存 / 同オブジェクト他トリガとの関係
|
|
54
|
+
- 失敗時のリカバリ手順 / 監視ポイント
|
|
55
|
+
- 既存の自動懸念検出 (DETERMINISTIC `auto-concerns`) と重複しない情報を書く
|
|
56
|
+
|
|
57
|
+
### `business-domain` (Object 専用)
|
|
58
|
+
- 属する業務ドメイン (請求 / 在庫 / 与信 / 案件 等)
|
|
59
|
+
- 隣接オブジェクトとの参照関係 (DETERMINISTIC fields/dependencies で確認できるもの)
|
|
60
|
+
|
|
61
|
+
### `key-design-decisions` (Apex Class)
|
|
62
|
+
- なぜこの構造を選んだか / 何を捨てたか
|
|
63
|
+
- bulk 安全性のためのトレードオフ / トランザクション境界 / 例外戦略
|
|
64
|
+
- 推測せず、ファクト (try/catch 有無、SOQL 件数、ループの構造) から読み取れる範囲で
|
|
65
|
+
|
|
66
|
+
### `processing-overview-narrative`
|
|
67
|
+
- クラス / Flow / Trigger の **処理の流れの俯瞰** を 1〜2 段落
|
|
68
|
+
- 「最初にこれを取得し、次にこの判定を行い、最終的にこれを更新する」のような大きな粒度
|
|
69
|
+
- DETERMINISTIC `processing-overview-table` / `intra-class-call-graph` / `processing-sequence-table` の数値や Mermaid と整合する内容にする
|
|
70
|
+
|
|
71
|
+
### `processing-details-narrative`
|
|
72
|
+
- メソッド / 要素単位で **何をしているか** を 2〜4 行で
|
|
73
|
+
- 形式: `- **\`<methodName>\`**: 扱うデータ / 分岐条件 / 計算 / 戻り値`
|
|
74
|
+
- DETERMINISTIC `processing-overview-table` の各行に対応するメソッドを 1 件ずつ書く
|
|
75
|
+
|
|
76
|
+
### `concerns` (補足の懸念)
|
|
77
|
+
- 自動検出された `auto-concerns` (DETERMINISTIC) に **含まれない** 業務的・運用的観点を書く
|
|
78
|
+
- 自動検出と重複する内容は書かない (重複は読みづらくなる)
|
|
79
|
+
|
|
80
|
+
### `summary` (Object 専用、既存)
|
|
81
|
+
- Object の役割を 1〜2 行で
|
|
82
|
+
|
|
83
|
+
## 禁則 (絶対に守る)
|
|
84
|
+
|
|
85
|
+
- 既存の AI_MANAGED ブロック / HUMAN_MANAGED ブロックの内容を**読み込まない**。再生成性を担保するため、入力は DETERMINISTIC ファクトのみとする
|
|
86
|
+
- 知識グラフに無い情報を**捏造しない**。推測する場合は「(推測)」を付ける
|
|
87
|
+
- 顧客固有名 / 個人情報 / シークレット (URL / API key) を書かない
|
|
88
|
+
- HUMAN_MANAGED ブロックの内容を引用しない
|
|
89
|
+
- 「〜と思われる」「おそらく」のような曖昧表現は最小限に
|
|
90
|
+
- 出力 Markdown には h1 (`#`) を使わない (ブロック内なので h2 以下)
|
|
91
|
+
|
|
92
|
+
## 出力形式の例 (apexClass)
|
|
93
|
+
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"narrative": "## このクラスは何で、なぜ存在するか\n\n`AccountBalanceService` は ... ...",
|
|
97
|
+
"business-scenario": "## 典型的な業務シナリオ\n\n月末の請求バッチで ... ...",
|
|
98
|
+
"key-design-decisions": "## 設計判断のポイント\n\n- bulk 安全性: Set<Id> を引数に取る ...\n- トランザクション境界: ...",
|
|
99
|
+
"processing-overview-narrative": "## 処理概要 — 自然言語での説明\n\nまず Invoice__c の未払合計を集計し、...",
|
|
100
|
+
"processing-details-narrative": "## 処理詳細 — メソッドごとの自然言語説明\n\n- **`recalculate`**: ...\n- **`computeRiskTier`**: ..."
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
各値の冒頭に `## 見出し` を含めることで、書き戻し後に Markdown としても自然に見える。
|