@codedrifters/configulator 0.0.274 → 0.0.276
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/lib/index.d.mts +558 -319
- package/lib/index.d.ts +559 -320
- package/lib/index.js +535 -592
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +523 -580
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -180,11 +180,15 @@ __export(index_exports, {
|
|
|
180
180
|
AGENT_RULE_SCOPE: () => AGENT_RULE_SCOPE,
|
|
181
181
|
AGENT_TIER_ROLES: () => AGENT_TIER_ROLES,
|
|
182
182
|
AGENT_TIER_VALUES: () => AGENT_TIER_VALUES,
|
|
183
|
+
AUDIT_CATEGORY_ORDER: () => AUDIT_CATEGORY_ORDER,
|
|
183
184
|
AgentConfig: () => AgentConfig,
|
|
184
185
|
ApiExtractor: () => ApiExtractor,
|
|
185
186
|
AstroConfig: () => AstroConfig,
|
|
186
187
|
AstroOutput: () => AstroOutput,
|
|
187
188
|
AstroProject: () => AstroProject,
|
|
189
|
+
AuditCategory: () => AuditCategory,
|
|
190
|
+
AuditMode: () => AuditMode,
|
|
191
|
+
AuditSeverity: () => AuditSeverity,
|
|
188
192
|
AwsCdkProject: () => AwsCdkProject,
|
|
189
193
|
AwsDeployWorkflow: () => AwsDeployWorkflow,
|
|
190
194
|
AwsDeploymentConfig: () => AwsDeploymentConfig,
|
|
@@ -200,6 +204,7 @@ __export(index_exports, {
|
|
|
200
204
|
DEFAULT_API_EXTRACTOR_ENTRY_POINT: () => DEFAULT_API_EXTRACTOR_ENTRY_POINT,
|
|
201
205
|
DEFAULT_API_EXTRACTOR_REPORT_FILENAME: () => DEFAULT_API_EXTRACTOR_REPORT_FILENAME,
|
|
202
206
|
DEFAULT_API_EXTRACTOR_REPORT_FOLDER: () => DEFAULT_API_EXTRACTOR_REPORT_FOLDER,
|
|
207
|
+
DEFAULT_AUDIT_REPORT_DIR: () => DEFAULT_AUDIT_REPORT_DIR,
|
|
203
208
|
DEFAULT_DECOMPOSITION_TEMPLATE: () => DEFAULT_DECOMPOSITION_TEMPLATE,
|
|
204
209
|
DEFAULT_DELEGATE_TO_PR_REVIEWER: () => DEFAULT_DELEGATE_TO_PR_REVIEWER,
|
|
205
210
|
DEFAULT_DISPATCH_MODEL: () => DEFAULT_DISPATCH_MODEL,
|
|
@@ -241,15 +246,11 @@ __export(index_exports, {
|
|
|
241
246
|
DEFAULT_TYPE_LABELS: () => DEFAULT_TYPE_LABELS,
|
|
242
247
|
DEFAULT_UNBLOCK_COMMENT_TEMPLATE: () => DEFAULT_UNBLOCK_COMMENT_TEMPLATE,
|
|
243
248
|
DEFAULT_UNBLOCK_DEPENDENTS_ENABLED: () => DEFAULT_UNBLOCK_DEPENDENTS_ENABLED,
|
|
244
|
-
|
|
245
|
-
DEFAULT_WORKFLOW_DIAGRAMS_EMIT_CHECKER: () => DEFAULT_WORKFLOW_DIAGRAMS_EMIT_CHECKER,
|
|
246
|
-
DEFAULT_WORKFLOW_DIAGRAMS_EMIT_STARTER: () => DEFAULT_WORKFLOW_DIAGRAMS_EMIT_STARTER,
|
|
247
|
-
DEFAULT_WORKFLOW_DIAGRAMS_ENABLED: () => DEFAULT_WORKFLOW_DIAGRAMS_ENABLED,
|
|
248
|
-
DEFAULT_WORKFLOW_DIAGRAMS_PATH: () => DEFAULT_WORKFLOW_DIAGRAMS_PATH,
|
|
249
|
-
DEFAULT_WORKFLOW_DIAGRAMS_REQUIRE_UPDATE: () => DEFAULT_WORKFLOW_DIAGRAMS_REQUIRE_UPDATE,
|
|
249
|
+
DOCS_SYNC_AUDIT_SCHEMA_VERSION: () => DOCS_SYNC_AUDIT_SCHEMA_VERSION,
|
|
250
250
|
JsiiFaker: () => JsiiFaker,
|
|
251
251
|
LAYOUT_ENFORCEMENT: () => LAYOUT_ENFORCEMENT,
|
|
252
252
|
LAYOUT_ROOT_BY_PROJECT_TYPE: () => LAYOUT_ROOT_BY_PROJECT_TYPE,
|
|
253
|
+
MAX_LABEL_DESCRIPTION_LENGTH: () => MAX_LABEL_DESCRIPTION_LENGTH,
|
|
253
254
|
MCP_TRANSPORT: () => MCP_TRANSPORT,
|
|
254
255
|
MERGE_METHODS: () => MERGE_METHODS,
|
|
255
256
|
MIMIMUM_RELEASE_AGE: () => MIMIMUM_RELEASE_AGE,
|
|
@@ -288,6 +289,7 @@ __export(index_exports, {
|
|
|
288
289
|
addSyncLabelsWorkflow: () => addSyncLabelsWorkflow,
|
|
289
290
|
agendaBundle: () => agendaBundle,
|
|
290
291
|
analyzeTsDocCoverage: () => analyzeTsDocCoverage,
|
|
292
|
+
auditReportJsonSchema: () => auditReportJsonSchema,
|
|
291
293
|
awsCdkBundle: () => awsCdkBundle,
|
|
292
294
|
baseBundle: () => baseBundle,
|
|
293
295
|
bcmWriterBundle: () => bcmWriterBundle,
|
|
@@ -304,6 +306,7 @@ __export(index_exports, {
|
|
|
304
306
|
buildOrchestratorConventionsContent: () => buildOrchestratorConventionsContent,
|
|
305
307
|
buildPeopleProfileBundle: () => buildPeopleProfileBundle,
|
|
306
308
|
buildRegulatoryResearchBundle: () => buildRegulatoryResearchBundle,
|
|
309
|
+
buildReport: () => buildReport,
|
|
307
310
|
buildRequirementsAnalystBundle: () => buildRequirementsAnalystBundle,
|
|
308
311
|
buildRequirementsReviewerBundle: () => buildRequirementsReviewerBundle,
|
|
309
312
|
buildRequirementsWriterBundle: () => buildRequirementsWriterBundle,
|
|
@@ -320,6 +323,7 @@ __export(index_exports, {
|
|
|
320
323
|
compileFencedSamples: () => compileFencedSamples,
|
|
321
324
|
customerProfileBundle: () => customerProfileBundle,
|
|
322
325
|
docsSyncBundle: () => docsSyncBundle,
|
|
326
|
+
emptyCategoryBuckets: () => emptyCategoryBuckets,
|
|
323
327
|
extractApiProcedure: () => extractApiProcedure,
|
|
324
328
|
extractDocReferences: () => extractDocReferences,
|
|
325
329
|
extractFencedSamples: () => extractFencedSamples,
|
|
@@ -333,6 +337,7 @@ __export(index_exports, {
|
|
|
333
337
|
meetingAnalysisBundle: () => meetingAnalysisBundle,
|
|
334
338
|
orchestratorBundle: () => orchestratorBundle,
|
|
335
339
|
peopleProfileBundle: () => peopleProfileBundle,
|
|
340
|
+
persistAuditReport: () => persistAuditReport,
|
|
336
341
|
pnpmBundle: () => pnpmBundle,
|
|
337
342
|
prReviewBundle: () => prReviewBundle,
|
|
338
343
|
projenBundle: () => projenBundle,
|
|
@@ -372,10 +377,6 @@ __export(index_exports, {
|
|
|
372
377
|
renderSourceTierExamples: () => renderSourceTierExamples,
|
|
373
378
|
renderUnblockDependentsScript: () => renderUnblockDependentsScript,
|
|
374
379
|
renderUnblockDependentsSection: () => renderUnblockDependentsSection,
|
|
375
|
-
renderWorkflowDiagramsBundleHook: () => renderWorkflowDiagramsBundleHook,
|
|
376
|
-
renderWorkflowDiagramsCheckerScript: () => renderWorkflowDiagramsCheckerScript,
|
|
377
|
-
renderWorkflowDiagramsRuleContent: () => renderWorkflowDiagramsRuleContent,
|
|
378
|
-
renderWorkflowDiagramsStarterPage: () => renderWorkflowDiagramsStarterPage,
|
|
379
380
|
requirementsAnalystBundle: () => requirementsAnalystBundle,
|
|
380
381
|
requirementsReviewerBundle: () => requirementsReviewerBundle,
|
|
381
382
|
requirementsWriterBundle: () => requirementsWriterBundle,
|
|
@@ -398,7 +399,7 @@ __export(index_exports, {
|
|
|
398
399
|
resolveTemplateVariables: () => resolveTemplateVariables,
|
|
399
400
|
resolveTypeScriptProjectOutdir: () => resolveTypeScriptProjectOutdir,
|
|
400
401
|
resolveUnblockDependents: () => resolveUnblockDependents,
|
|
401
|
-
|
|
402
|
+
runScan: () => runScan,
|
|
402
403
|
slackBundle: () => slackBundle,
|
|
403
404
|
softwareProfileBundle: () => softwareProfileBundle,
|
|
404
405
|
standardsResearchBundle: () => standardsResearchBundle,
|
|
@@ -416,7 +417,6 @@ __export(index_exports, {
|
|
|
416
417
|
validateSkillEvalsConfig: () => validateSkillEvalsConfig,
|
|
417
418
|
validateStarlightSingleton: () => validateStarlightSingleton,
|
|
418
419
|
validateUnblockDependentsConfig: () => validateUnblockDependentsConfig,
|
|
419
|
-
validateWorkflowDiagramsConfig: () => validateWorkflowDiagramsConfig,
|
|
420
420
|
vitestBundle: () => vitestBundle
|
|
421
421
|
});
|
|
422
422
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -1185,7 +1185,7 @@ var agendaBundle = {
|
|
|
1185
1185
|
{
|
|
1186
1186
|
name: "agenda:finalize",
|
|
1187
1187
|
color: "BFDADC",
|
|
1188
|
-
description: "Phase 2:
|
|
1188
|
+
description: "Phase 2: register in meetings index, cross-link related docs, and lock the agenda before the meeting"
|
|
1189
1189
|
}
|
|
1190
1190
|
]
|
|
1191
1191
|
};
|
|
@@ -3032,442 +3032,6 @@ function assertValidProductContextPath(value) {
|
|
|
3032
3032
|
}
|
|
3033
3033
|
}
|
|
3034
3034
|
|
|
3035
|
-
// src/agent/bundles/workflow-diagrams.ts
|
|
3036
|
-
var DEFAULT_WORKFLOW_DIAGRAMS_ENABLED = true;
|
|
3037
|
-
var DEFAULT_WORKFLOW_DIAGRAMS_PATH = "docs/src/content/docs/agents/workflows.md";
|
|
3038
|
-
var DEFAULT_WORKFLOW_DIAGRAMS_BUNDLE_PATH_PATTERNS = [
|
|
3039
|
-
"packages/@codedrifters/configulator/src/agent/bundles/**/*.ts",
|
|
3040
|
-
".claude/agents/**/*.md",
|
|
3041
|
-
".claude/skills/**/*.md"
|
|
3042
|
-
];
|
|
3043
|
-
var DEFAULT_WORKFLOW_DIAGRAMS_EMIT_STARTER = false;
|
|
3044
|
-
var DEFAULT_WORKFLOW_DIAGRAMS_EMIT_CHECKER = false;
|
|
3045
|
-
var DEFAULT_WORKFLOW_DIAGRAMS_REQUIRE_UPDATE = true;
|
|
3046
|
-
function resolveWorkflowDiagrams(config) {
|
|
3047
|
-
const diagramsPath = config?.diagramsPath ?? DEFAULT_WORKFLOW_DIAGRAMS_PATH;
|
|
3048
|
-
assertValidDiagramsPath(diagramsPath);
|
|
3049
|
-
const bundlePathPatterns = config?.bundlePathPatterns ?? DEFAULT_WORKFLOW_DIAGRAMS_BUNDLE_PATH_PATTERNS;
|
|
3050
|
-
assertValidBundlePathPatterns2(bundlePathPatterns);
|
|
3051
|
-
return {
|
|
3052
|
-
enabled: config?.enabled ?? DEFAULT_WORKFLOW_DIAGRAMS_ENABLED,
|
|
3053
|
-
diagramsPath,
|
|
3054
|
-
bundlePathPatterns,
|
|
3055
|
-
emitStarterDiagram: config?.emitStarterDiagram ?? DEFAULT_WORKFLOW_DIAGRAMS_EMIT_STARTER,
|
|
3056
|
-
emitChecker: config?.emitChecker ?? DEFAULT_WORKFLOW_DIAGRAMS_EMIT_CHECKER,
|
|
3057
|
-
requireDiagramUpdate: config?.requireDiagramUpdate ?? DEFAULT_WORKFLOW_DIAGRAMS_REQUIRE_UPDATE
|
|
3058
|
-
};
|
|
3059
|
-
}
|
|
3060
|
-
function validateWorkflowDiagramsConfig(config) {
|
|
3061
|
-
return resolveWorkflowDiagrams(config);
|
|
3062
|
-
}
|
|
3063
|
-
function renderWorkflowDiagramsRuleContent(wd) {
|
|
3064
|
-
if (!wd.enabled) {
|
|
3065
|
-
return [
|
|
3066
|
-
"# Workflow Diagrams",
|
|
3067
|
-
"",
|
|
3068
|
-
"**The workflow-diagrams convention is disabled in this project.**",
|
|
3069
|
-
"Agents may change bundle or agent source files without updating",
|
|
3070
|
-
"any diagrams page. When diagrams fall behind the prose, humans",
|
|
3071
|
-
"must reconcile them manually.",
|
|
3072
|
-
"",
|
|
3073
|
-
"Enable the convention via",
|
|
3074
|
-
"`AgentConfigOptions.workflowDiagrams.enabled = true`."
|
|
3075
|
-
].join("\n");
|
|
3076
|
-
}
|
|
3077
|
-
const requirementVerb = wd.requireDiagramUpdate ? "MUST" : "SHOULD";
|
|
3078
|
-
const lines = [
|
|
3079
|
-
"# Workflow Diagrams",
|
|
3080
|
-
"",
|
|
3081
|
-
"This project maintains a single hand-authored workflow-diagrams",
|
|
3082
|
-
"page that visualises every agent's phases, its decision points,",
|
|
3083
|
-
"and every cross-agent handoff. Prose scattered across rule files",
|
|
3084
|
-
"and agent prompts describes each handoff in isolation; the",
|
|
3085
|
-
"diagrams page is the single visual reference that shows the",
|
|
3086
|
-
"whole pipeline at once.",
|
|
3087
|
-
"",
|
|
3088
|
-
"Diagrams are **hand-authored for readability**, not",
|
|
3089
|
-
"auto-generated. A machine-generated graph of bundle dependencies",
|
|
3090
|
-
"would technically stay in sync, but would not communicate the",
|
|
3091
|
-
"intent behind each handoff \u2014 so the convention trades",
|
|
3092
|
-
"auto-sync for editorial clarity and enforces sync via the rule",
|
|
3093
|
-
"below.",
|
|
3094
|
-
"",
|
|
3095
|
-
"## Diagrams Page",
|
|
3096
|
-
"",
|
|
3097
|
-
`The workflow-diagrams page lives at \`${wd.diagramsPath}\`. It`,
|
|
3098
|
-
"follows a stable structure so the sync rule can mechanically",
|
|
3099
|
-
"identify which section matches which bundle:",
|
|
3100
|
-
"",
|
|
3101
|
-
"1. **Master cross-agent diagram** \u2014 one top-level Mermaid",
|
|
3102
|
-
" flowchart showing every agent as a node and every",
|
|
3103
|
-
" cross-agent issue-creation or file-consumption handoff as an",
|
|
3104
|
-
" edge.",
|
|
3105
|
-
"2. **One section per agent / bundle** \u2014 a `## N. <agent-name>`",
|
|
3106
|
-
" heading followed by a single Mermaid `flowchart TD` diagram",
|
|
3107
|
-
" that depicts the agent's phase graph (nodes = phases /",
|
|
3108
|
-
" decisions, edges = transitions, styled end-nodes = commit /",
|
|
3109
|
-
" PR / done terminals).",
|
|
3110
|
-
"3. **Legend** \u2014 a short table mapping colours and arrow styles",
|
|
3111
|
-
" to their meanings (dispatcher vs agent vs skill; solid vs",
|
|
3112
|
-
" dashed arrows for issue-creation vs file-consumption).",
|
|
3113
|
-
"",
|
|
3114
|
-
"Each agent section is independent. Changing one agent's phase",
|
|
3115
|
-
"graph touches only that section; cross-agent handoff changes",
|
|
3116
|
-
"touch the master diagram plus any affected agent sections.",
|
|
3117
|
-
"",
|
|
3118
|
-
"## Diagram-Touched-When-Bundle-Touched Rule",
|
|
3119
|
-
"",
|
|
3120
|
-
`Every change that modifies a bundle's phase graph ${requirementVerb}`,
|
|
3121
|
-
`also update \`${wd.diagramsPath}\` in the same change set. The`,
|
|
3122
|
-
"rule applies when **any** staged file in a commit or PR matches",
|
|
3123
|
-
"one of the bundle-path patterns below:",
|
|
3124
|
-
"",
|
|
3125
|
-
...wd.bundlePathPatterns.map((p) => `- \`${p}\``),
|
|
3126
|
-
"",
|
|
3127
|
-
"Mechanically: when a change set includes a file matching one of",
|
|
3128
|
-
`the patterns above, it ${requirementVerb} also include a`,
|
|
3129
|
-
`modification to \`${wd.diagramsPath}\`.`,
|
|
3130
|
-
"",
|
|
3131
|
-
"### What counts as a phase-graph change",
|
|
3132
|
-
"",
|
|
3133
|
-
"The rule targets edits that change **what the agent does**, not",
|
|
3134
|
-
"stylistic tweaks. Concretely:",
|
|
3135
|
-
"",
|
|
3136
|
-
"- Adding, removing, or renaming a phase label.",
|
|
3137
|
-
"- Changing a phase's inputs, outputs, or decision branches.",
|
|
3138
|
-
"- Adding or removing a cross-agent handoff (an issue-creation",
|
|
3139
|
-
" or file-consumption edge between two bundles).",
|
|
3140
|
-
"- Changing the sort order or priority logic that drives",
|
|
3141
|
-
" dispatcher routing between tiers.",
|
|
3142
|
-
"",
|
|
3143
|
-
"Edits that do **not** require a diagram update:",
|
|
3144
|
-
"",
|
|
3145
|
-
"- Typo fixes, comment tweaks, wording polish in rule prose.",
|
|
3146
|
-
"- Refactors that preserve the exact phase / handoff graph",
|
|
3147
|
-
" (extracting a helper, renaming an internal variable,",
|
|
3148
|
-
" reordering imports).",
|
|
3149
|
-
"- Updates to supporting metadata (permissions lists, default",
|
|
3150
|
-
" paths) that do not change the visible phase flow.",
|
|
3151
|
-
"",
|
|
3152
|
-
"When a change is borderline \u2014 the phase graph is unchanged but",
|
|
3153
|
-
"the diagram's caption or annotation would be more accurate \u2014",
|
|
3154
|
-
"err on the side of updating the diagram. The convention favours",
|
|
3155
|
-
"over-updating over silent drift.",
|
|
3156
|
-
"",
|
|
3157
|
-
"## Authoring Checklist",
|
|
3158
|
-
"",
|
|
3159
|
-
"Authors and reviewers walk the following checklist before",
|
|
3160
|
-
"merging any PR that touches a bundle path:",
|
|
3161
|
-
"",
|
|
3162
|
-
`1. **Did the phase graph change?** If yes, update \`${wd.diagramsPath}\``,
|
|
3163
|
-
" in the same PR \u2014 both the affected agent section and, if the",
|
|
3164
|
-
" change added or removed a cross-agent handoff, the master",
|
|
3165
|
-
" diagram.",
|
|
3166
|
-
"2. **Did the diagram render?** Preview the Mermaid block locally",
|
|
3167
|
-
" (or via the docs site's dev server) and confirm it renders",
|
|
3168
|
-
" without syntax errors.",
|
|
3169
|
-
`3. **Is the section heading stable?** Each agent section uses a`,
|
|
3170
|
-
" `## N. <agent-name>` heading where `<agent-name>` matches the",
|
|
3171
|
-
" bundle name / agent prompt filename. Keep the headings stable",
|
|
3172
|
-
" \u2014 downstream tooling may match on them.",
|
|
3173
|
-
"4. **Does the legend still apply?** If a new arrow style or node",
|
|
3174
|
-
" colour was introduced, document it in the legend.",
|
|
3175
|
-
""
|
|
3176
|
-
];
|
|
3177
|
-
if (wd.emitChecker) {
|
|
3178
|
-
lines.push(
|
|
3179
|
-
"## Automated Check",
|
|
3180
|
-
"",
|
|
3181
|
-
`The bundled \`.claude/procedures/check-workflow-diagrams.sh\``,
|
|
3182
|
-
"helper enforces the rule mechanically. Given a set of changed",
|
|
3183
|
-
"files (as a newline-separated list on stdin, or positional",
|
|
3184
|
-
`arguments), it fails non-zero when any file matches a`,
|
|
3185
|
-
`bundle-path pattern and \`${wd.diagramsPath}\` is not also in`,
|
|
3186
|
-
"the list. Wire it into a pre-commit hook or CI job as needed:",
|
|
3187
|
-
"",
|
|
3188
|
-
"```bash",
|
|
3189
|
-
"# Pre-commit (staged files):",
|
|
3190
|
-
"git diff --cached --name-only \\",
|
|
3191
|
-
" | .claude/procedures/check-workflow-diagrams.sh",
|
|
3192
|
-
"",
|
|
3193
|
-
"# CI (branch-vs-base):",
|
|
3194
|
-
"git diff --name-only origin/main...HEAD \\",
|
|
3195
|
-
" | .claude/procedures/check-workflow-diagrams.sh",
|
|
3196
|
-
"```",
|
|
3197
|
-
"",
|
|
3198
|
-
"The helper exits with a descriptive diagnostic on failure, so",
|
|
3199
|
-
"it plugs directly into any hook framework without further",
|
|
3200
|
-
"glue. It exits `0` when no bundle files were touched or when",
|
|
3201
|
-
"the diagrams file is also present in the change set.",
|
|
3202
|
-
""
|
|
3203
|
-
);
|
|
3204
|
-
}
|
|
3205
|
-
lines.push(
|
|
3206
|
-
"## Out of Scope",
|
|
3207
|
-
"",
|
|
3208
|
-
"The convention intentionally does not:",
|
|
3209
|
-
"",
|
|
3210
|
-
"- Auto-generate the diagrams \u2014 readability is the point.",
|
|
3211
|
-
"- Enforce a specific Mermaid sub-grammar beyond `flowchart TD`",
|
|
3212
|
-
" for per-agent sections. Sequence diagrams, state diagrams, or",
|
|
3213
|
-
" class diagrams are fine for bespoke sections as long as they",
|
|
3214
|
-
" render.",
|
|
3215
|
-
"- Gate every unrelated cleanup PR on a diagram touch. The rule",
|
|
3216
|
-
" targets phase-graph-affecting edits; pure cleanups documented",
|
|
3217
|
-
" as such are exempt."
|
|
3218
|
-
);
|
|
3219
|
-
return lines.join("\n");
|
|
3220
|
-
}
|
|
3221
|
-
function renderWorkflowDiagramsBundleHook(wd, bundleLabel) {
|
|
3222
|
-
if (!wd.enabled) {
|
|
3223
|
-
return "";
|
|
3224
|
-
}
|
|
3225
|
-
const verb = wd.requireDiagramUpdate ? "must" : "should";
|
|
3226
|
-
return [
|
|
3227
|
-
"## Workflow Diagram",
|
|
3228
|
-
"",
|
|
3229
|
-
`Every ${bundleLabel} change that modifies the phase graph,`,
|
|
3230
|
-
"decision branches, or cross-agent handoffs documented by this",
|
|
3231
|
-
`bundle ${verb} also update the matching section in`,
|
|
3232
|
-
`\`${wd.diagramsPath}\` in the same PR. See the`,
|
|
3233
|
-
"`workflow-diagrams-convention` rule for the full authoring",
|
|
3234
|
-
"checklist, the path patterns the rule covers, and what counts",
|
|
3235
|
-
"as a phase-graph change vs. a cosmetic edit."
|
|
3236
|
-
].join("\n");
|
|
3237
|
-
}
|
|
3238
|
-
function renderWorkflowDiagramsStarterPage(_wd) {
|
|
3239
|
-
return [
|
|
3240
|
-
"---",
|
|
3241
|
-
"title: Agent Workflows",
|
|
3242
|
-
"description: Hand-authored Mermaid diagrams for every agent pipeline and every cross-agent handoff.",
|
|
3243
|
-
"---",
|
|
3244
|
-
"",
|
|
3245
|
-
"# Agent Workflows",
|
|
3246
|
-
"",
|
|
3247
|
-
"Each diagram shows every input, decision point, output path, and",
|
|
3248
|
-
"downstream issue created by the agent. Solid arrows are issue-",
|
|
3249
|
-
"creation handoffs; dashed arrows are file-consumption handoffs.",
|
|
3250
|
-
"",
|
|
3251
|
-
"Update this page in the same PR that changes a bundle's phase",
|
|
3252
|
-
"graph \u2014 see the `workflow-diagrams-convention` rule for the full",
|
|
3253
|
-
"contract.",
|
|
3254
|
-
"",
|
|
3255
|
-
"## Master Cross-Agent Diagram",
|
|
3256
|
-
"",
|
|
3257
|
-
"```mermaid",
|
|
3258
|
-
"flowchart TB",
|
|
3259
|
-
" %% Replace the placeholder below with the real agent ecosystem.",
|
|
3260
|
-
" DISPATCHER[Dispatcher]",
|
|
3261
|
-
" AGENT_A[Agent A]",
|
|
3262
|
-
" AGENT_B[Agent B]",
|
|
3263
|
-
" DISPATCHER --> AGENT_A",
|
|
3264
|
-
" DISPATCHER --> AGENT_B",
|
|
3265
|
-
" AGENT_A -->|issue-creation| AGENT_B",
|
|
3266
|
-
" AGENT_B -.->|file-consumption| AGENT_A",
|
|
3267
|
-
"```",
|
|
3268
|
-
"",
|
|
3269
|
-
"## 1. Example Agent",
|
|
3270
|
-
"",
|
|
3271
|
-
"```mermaid",
|
|
3272
|
-
"flowchart TD",
|
|
3273
|
-
" START([Session Start]) --> CLAIM[Claim issue]",
|
|
3274
|
-
" CLAIM --> PHASE{Phase label?}",
|
|
3275
|
-
" PHASE -->|phase:a| A1[Phase A work]",
|
|
3276
|
-
" PHASE -->|phase:b| B1[Phase B work]",
|
|
3277
|
-
" A1 --> COMMIT[Commit & PR]",
|
|
3278
|
-
" B1 --> COMMIT",
|
|
3279
|
-
" COMMIT --> STOP([Stop])",
|
|
3280
|
-
" style STOP fill:#e8f5e9,stroke:#2e7d32",
|
|
3281
|
-
"```",
|
|
3282
|
-
"",
|
|
3283
|
-
"## Legend",
|
|
3284
|
-
"",
|
|
3285
|
-
"| Style | Meaning |",
|
|
3286
|
-
"|-------|---------|",
|
|
3287
|
-
"| Solid arrow | Issue-creation handoff (agent A creates an issue for agent B) |",
|
|
3288
|
-
"| Dashed arrow | File-consumption handoff (agent A reads files produced by agent B) |",
|
|
3289
|
-
"| Green end-node | Terminal state (session complete) |"
|
|
3290
|
-
].join("\n");
|
|
3291
|
-
}
|
|
3292
|
-
function renderWorkflowDiagramsCheckerScript(wd) {
|
|
3293
|
-
const patternsLiteral = wd.bundlePathPatterns.map((p) => ` ${JSON.stringify(p)}`).join("\n");
|
|
3294
|
-
return [
|
|
3295
|
-
"#!/usr/bin/env bash",
|
|
3296
|
-
"# check-workflow-diagrams.sh \u2014 Enforce the diagram-touched-when-bundle-touched rule.",
|
|
3297
|
-
"#",
|
|
3298
|
-
"# Usage:",
|
|
3299
|
-
"# .claude/procedures/check-workflow-diagrams.sh <file>...",
|
|
3300
|
-
"# git diff --name-only HEAD | .claude/procedures/check-workflow-diagrams.sh",
|
|
3301
|
-
"#",
|
|
3302
|
-
"# Exits 0 when the workflow-diagrams page was touched alongside any",
|
|
3303
|
-
"# bundle file in the change set, or when no bundle files were touched.",
|
|
3304
|
-
"# Exits non-zero with a descriptive diagnostic on failure.",
|
|
3305
|
-
"#",
|
|
3306
|
-
"# The bundle-path patterns and diagrams path are rendered from the",
|
|
3307
|
-
"# consumer's WorkflowDiagramsConfig at synth time \u2014 do not edit by",
|
|
3308
|
-
"# hand; regenerate via `pnpm exec projen`.",
|
|
3309
|
-
"#",
|
|
3310
|
-
"# Patterns support the `**` recursive-segment wildcard even though",
|
|
3311
|
-
"# bash's native `[[ $file == $glob ]]` pattern matching does not:",
|
|
3312
|
-
"# each glob is converted to a POSIX-extended regex internally and",
|
|
3313
|
-
"# matched with `=~`, so the script works uniformly on bash 3.2",
|
|
3314
|
-
"# (macOS default) and bash 4+ (Linux / CI) without depending on",
|
|
3315
|
-
"# `shopt -s globstar` (which only affects pathname expansion, not",
|
|
3316
|
-
"# `[[ ]]` pattern matching).",
|
|
3317
|
-
"",
|
|
3318
|
-
"set -uo pipefail",
|
|
3319
|
-
"",
|
|
3320
|
-
"err() {",
|
|
3321
|
-
' printf "check-workflow-diagrams.sh: %s\\n" "$*" >&2',
|
|
3322
|
-
"}",
|
|
3323
|
-
"",
|
|
3324
|
-
`diagrams_path=${JSON.stringify(wd.diagramsPath)}`,
|
|
3325
|
-
"",
|
|
3326
|
-
"# Bundle-path glob patterns. Translated to anchored POSIX-extended",
|
|
3327
|
-
"# regexes at runtime by `glob_to_regex` below so `**` matches",
|
|
3328
|
-
"# recursively across path segments.",
|
|
3329
|
-
"bundle_patterns=(",
|
|
3330
|
-
patternsLiteral,
|
|
3331
|
-
")",
|
|
3332
|
-
"",
|
|
3333
|
-
"# Convert a bash-style glob into an anchored POSIX-extended regex:",
|
|
3334
|
-
"# **/ \u2192 (.+/)? (zero or more path segments plus trailing slash)",
|
|
3335
|
-
"# ** \u2192 .* (anywhere, including `/`)",
|
|
3336
|
-
"# * \u2192 [^/]* (single path segment)",
|
|
3337
|
-
"# ? \u2192 [^/] (single non-slash char)",
|
|
3338
|
-
"# Every other char is passed through, with regex metacharacters",
|
|
3339
|
-
"# backslash-escaped so literal `.` / `+` / `(` etc. match themselves.",
|
|
3340
|
-
"glob_to_regex() {",
|
|
3341
|
-
' local glob="$1"',
|
|
3342
|
-
' local regex=""',
|
|
3343
|
-
" local i=0",
|
|
3344
|
-
" local len=${#glob}",
|
|
3345
|
-
" while (( i < len )); do",
|
|
3346
|
-
' local c="${glob:i:1}"',
|
|
3347
|
-
' if [[ "$c" == "*" ]]; then',
|
|
3348
|
-
' local next="${glob:i+1:1}"',
|
|
3349
|
-
' if [[ "$next" == "*" ]]; then',
|
|
3350
|
-
" # `**` \u2014 recursive segment wildcard.",
|
|
3351
|
-
' local after="${glob:i+2:1}"',
|
|
3352
|
-
' if [[ "$after" == "/" ]]; then',
|
|
3353
|
-
' regex+="(.+/)?"',
|
|
3354
|
-
" i=$(( i + 3 ))",
|
|
3355
|
-
" else",
|
|
3356
|
-
' regex+=".*"',
|
|
3357
|
-
" i=$(( i + 2 ))",
|
|
3358
|
-
" fi",
|
|
3359
|
-
" else",
|
|
3360
|
-
' regex+="[^/]*"',
|
|
3361
|
-
" i=$(( i + 1 ))",
|
|
3362
|
-
" fi",
|
|
3363
|
-
' elif [[ "$c" == "?" ]]; then',
|
|
3364
|
-
' regex+="[^/]"',
|
|
3365
|
-
" i=$(( i + 1 ))",
|
|
3366
|
-
" else",
|
|
3367
|
-
' case "$c" in',
|
|
3368
|
-
" # Regex metacharacters \u2014 escape to match literally.",
|
|
3369
|
-
" '.'|'+'|'^'|'$'|'('|')'|'{'|'}'|'|'|'['|']'|'\\\\')",
|
|
3370
|
-
' regex+="\\\\$c"',
|
|
3371
|
-
" ;;",
|
|
3372
|
-
" *)",
|
|
3373
|
-
' regex+="$c"',
|
|
3374
|
-
" ;;",
|
|
3375
|
-
" esac",
|
|
3376
|
-
" i=$(( i + 1 ))",
|
|
3377
|
-
" fi",
|
|
3378
|
-
" done",
|
|
3379
|
-
' printf "^%s$" "$regex"',
|
|
3380
|
-
"}",
|
|
3381
|
-
"",
|
|
3382
|
-
"# Collect the input file list: positional args override stdin.",
|
|
3383
|
-
"if [[ $# -gt 0 ]]; then",
|
|
3384
|
-
' files=("$@")',
|
|
3385
|
-
"else",
|
|
3386
|
-
" files=()",
|
|
3387
|
-
" while IFS= read -r line; do",
|
|
3388
|
-
' [[ -z "$line" ]] && continue',
|
|
3389
|
-
' files+=("$line")',
|
|
3390
|
-
" done",
|
|
3391
|
-
"fi",
|
|
3392
|
-
"",
|
|
3393
|
-
"if [[ ${#files[@]} -eq 0 ]]; then",
|
|
3394
|
-
" # No input \u2014 nothing to check.",
|
|
3395
|
-
" exit 0",
|
|
3396
|
-
"fi",
|
|
3397
|
-
"",
|
|
3398
|
-
"# Precompile each bundle pattern to a regex once.",
|
|
3399
|
-
"bundle_regexes=()",
|
|
3400
|
-
'for pattern in "${bundle_patterns[@]}"; do',
|
|
3401
|
-
' bundle_regexes+=("$(glob_to_regex "$pattern")")',
|
|
3402
|
-
"done",
|
|
3403
|
-
"",
|
|
3404
|
-
"bundle_touched=0",
|
|
3405
|
-
"matched_bundle=''",
|
|
3406
|
-
"diagrams_touched=0",
|
|
3407
|
-
"",
|
|
3408
|
-
'for file in "${files[@]}"; do',
|
|
3409
|
-
' if [[ "$file" == "$diagrams_path" ]]; then',
|
|
3410
|
-
" diagrams_touched=1",
|
|
3411
|
-
" continue",
|
|
3412
|
-
" fi",
|
|
3413
|
-
' for regex in "${bundle_regexes[@]}"; do',
|
|
3414
|
-
' if [[ "$file" =~ $regex ]]; then',
|
|
3415
|
-
" bundle_touched=1",
|
|
3416
|
-
' matched_bundle="$file"',
|
|
3417
|
-
" break",
|
|
3418
|
-
" fi",
|
|
3419
|
-
" done",
|
|
3420
|
-
"done",
|
|
3421
|
-
"",
|
|
3422
|
-
'if [[ "$bundle_touched" -eq 1 && "$diagrams_touched" -eq 0 ]]; then',
|
|
3423
|
-
` err "bundle file '$matched_bundle' was modified but '$diagrams_path' was not"`,
|
|
3424
|
-
' err "update the workflow-diagrams page in the same change set (see workflow-diagrams-convention rule)"',
|
|
3425
|
-
" exit 1",
|
|
3426
|
-
"fi",
|
|
3427
|
-
"",
|
|
3428
|
-
"exit 0"
|
|
3429
|
-
].join("\n");
|
|
3430
|
-
}
|
|
3431
|
-
function assertValidDiagramsPath(value) {
|
|
3432
|
-
if (typeof value !== "string" || value.trim().length === 0) {
|
|
3433
|
-
throw new Error(
|
|
3434
|
-
`WorkflowDiagramsConfig.diagramsPath must be a non-empty string; got ${JSON.stringify(
|
|
3435
|
-
value
|
|
3436
|
-
)}`
|
|
3437
|
-
);
|
|
3438
|
-
}
|
|
3439
|
-
if (value.startsWith("/")) {
|
|
3440
|
-
throw new Error(
|
|
3441
|
-
`WorkflowDiagramsConfig.diagramsPath must be a repo-relative path (no leading '/'); got ${JSON.stringify(
|
|
3442
|
-
value
|
|
3443
|
-
)}`
|
|
3444
|
-
);
|
|
3445
|
-
}
|
|
3446
|
-
}
|
|
3447
|
-
function assertValidBundlePathPatterns2(value) {
|
|
3448
|
-
if (!Array.isArray(value)) {
|
|
3449
|
-
throw new Error(
|
|
3450
|
-
`WorkflowDiagramsConfig.bundlePathPatterns must be an array; got ${JSON.stringify(
|
|
3451
|
-
value
|
|
3452
|
-
)}`
|
|
3453
|
-
);
|
|
3454
|
-
}
|
|
3455
|
-
if (value.length === 0) {
|
|
3456
|
-
throw new Error(
|
|
3457
|
-
"WorkflowDiagramsConfig.bundlePathPatterns must not be empty \u2014 supply at least one pattern or omit the field to use the defaults"
|
|
3458
|
-
);
|
|
3459
|
-
}
|
|
3460
|
-
for (const entry of value) {
|
|
3461
|
-
if (typeof entry !== "string" || entry.trim().length === 0) {
|
|
3462
|
-
throw new Error(
|
|
3463
|
-
`WorkflowDiagramsConfig.bundlePathPatterns entries must be non-empty strings; got ${JSON.stringify(
|
|
3464
|
-
entry
|
|
3465
|
-
)}`
|
|
3466
|
-
);
|
|
3467
|
-
}
|
|
3468
|
-
}
|
|
3469
|
-
}
|
|
3470
|
-
|
|
3471
3035
|
// src/agent/bundles/base.ts
|
|
3472
3036
|
var createPackageSkill = {
|
|
3473
3037
|
name: "create-package",
|
|
@@ -4545,16 +4109,6 @@ function buildBaseBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
4545
4109
|
},
|
|
4546
4110
|
tags: ["workflow"]
|
|
4547
4111
|
},
|
|
4548
|
-
{
|
|
4549
|
-
name: "workflow-diagrams-convention",
|
|
4550
|
-
description: `Workflow-diagrams convention: hand-authored Mermaid page under \`${paths.docsRoot}/agents/workflows.md\` with one diagram per agent plus a master cross-agent diagram, and the diagram-touched-when-bundle-touched rule that keeps the page in sync with every phase-graph or cross-agent-handoff change.`,
|
|
4551
|
-
scope: AGENT_RULE_SCOPE.ALWAYS,
|
|
4552
|
-
content: renderWorkflowDiagramsRuleContent(resolveWorkflowDiagrams()),
|
|
4553
|
-
platforms: {
|
|
4554
|
-
cursor: { exclude: true }
|
|
4555
|
-
},
|
|
4556
|
-
tags: ["workflow"]
|
|
4557
|
-
},
|
|
4558
4112
|
{
|
|
4559
4113
|
name: "issue-templates-convention",
|
|
4560
4114
|
description: `Issue-templates convention: a single hand-authored reference page under \`${paths.docsRoot}/agents/issue-templates.md\` that carries one canonical \`gh issue create\` recipe per downstream phase label, and the reference-don't-inline rule that keeps bundle rules and agent prompts citing that page instead of duplicating full template invocations.`,
|
|
@@ -5294,12 +4848,12 @@ function buildBcmWriterBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
5294
4848
|
{
|
|
5295
4849
|
name: "bcm:context",
|
|
5296
4850
|
color: "D4C5F9",
|
|
5297
|
-
description: "Phase 3: fill Project Relevance, Value Stream Mapping,
|
|
4851
|
+
description: "Phase 3: fill Project Relevance, Value Stream Mapping, Software Systems, Roles, and Company Size"
|
|
5298
4852
|
},
|
|
5299
4853
|
{
|
|
5300
4854
|
name: "bcm:connect",
|
|
5301
4855
|
color: "FEF2C0",
|
|
5302
|
-
description: "Phase 4: cross-link
|
|
4856
|
+
description: "Phase 4: cross-link parent/siblings, update registry and capability-map, open downstream issues"
|
|
5303
4857
|
}
|
|
5304
4858
|
]
|
|
5305
4859
|
};
|
|
@@ -6294,7 +5848,7 @@ function buildBusinessModelsBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
6294
5848
|
{
|
|
6295
5849
|
name: "type:business-model",
|
|
6296
5850
|
color: "5319E7",
|
|
6297
|
-
description: "
|
|
5851
|
+
description: "Authors or updates a Business Model Canvas plus BIZBOK value streams for an industry segment"
|
|
6298
5852
|
},
|
|
6299
5853
|
{
|
|
6300
5854
|
name: "business-models:scan",
|
|
@@ -8633,22 +8187,22 @@ function buildCustomerProfileBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
8633
8187
|
{
|
|
8634
8188
|
name: "type:customer-profile",
|
|
8635
8189
|
color: "5319E7",
|
|
8636
|
-
description: "
|
|
8190
|
+
description: "Researches a customer archetype: discovery, deep profile, or competitor analysis"
|
|
8637
8191
|
},
|
|
8638
8192
|
{
|
|
8639
8193
|
name: "customer:discover",
|
|
8640
8194
|
color: "C5DEF5",
|
|
8641
|
-
description: "Phase 1: scan
|
|
8195
|
+
description: "Phase 1: scan docs for archetype candidates, write discovery report, create profile issues"
|
|
8642
8196
|
},
|
|
8643
8197
|
{
|
|
8644
8198
|
name: "customer:profile",
|
|
8645
8199
|
color: "BFDADC",
|
|
8646
|
-
description: "Phase 2: research one archetype
|
|
8200
|
+
description: "Phase 2: deep-research one archetype: segment, goals, JTBD, constraints, buying process, tech"
|
|
8647
8201
|
},
|
|
8648
8202
|
{
|
|
8649
8203
|
name: "customer:competitors",
|
|
8650
8204
|
color: "D4C5F9",
|
|
8651
|
-
description: "Phase 3: map
|
|
8205
|
+
description: "Phase 3: map feature-matrix rows to archetype needs and hand off req:scan seeds"
|
|
8652
8206
|
}
|
|
8653
8207
|
]
|
|
8654
8208
|
};
|
|
@@ -8736,6 +8290,63 @@ function buildDocsSyncSubAgent(_paths) {
|
|
|
8736
8290
|
"",
|
|
8737
8291
|
"---",
|
|
8738
8292
|
"",
|
|
8293
|
+
"## Phase 1: Scan",
|
|
8294
|
+
"",
|
|
8295
|
+
"Phase 1 walks the repo, runs every registered drift check, and",
|
|
8296
|
+
"writes a single combined **audit report** to disk. Phase 1 never",
|
|
8297
|
+
"edits documentation \u2014 only the persisted report changes between",
|
|
8298
|
+
"scan and fix.",
|
|
8299
|
+
"",
|
|
8300
|
+
"### Audit report",
|
|
8301
|
+
"",
|
|
8302
|
+
"The report shape is exported from `@codedrifters/configulator`",
|
|
8303
|
+
"as `AuditReport` (under `src/docs-sync/scan/`) so Phase 2 and",
|
|
8304
|
+
"any downstream consumers share one definition. Reports are",
|
|
8305
|
+
"persisted at:",
|
|
8306
|
+
"",
|
|
8307
|
+
"```",
|
|
8308
|
+
".claude/state/docs-sync/<issue-number>-audit.json",
|
|
8309
|
+
"```",
|
|
8310
|
+
"",
|
|
8311
|
+
"Every report carries a `schemaVersion`, the `issueNumber`, the",
|
|
8312
|
+
"invocation `mode` (`pr` or `audit`), the `generatedAt` UTC",
|
|
8313
|
+
"timestamp, the `repoRoot`, and an optional `scope` label, plus",
|
|
8314
|
+
"two parallel views of the findings:",
|
|
8315
|
+
"",
|
|
8316
|
+
"- **`categories`** \u2014 findings grouped by drift-check category.",
|
|
8317
|
+
" Every category key is always present; empty arrays are",
|
|
8318
|
+
" persisted explicitly. The five categories are `apiDiff`,",
|
|
8319
|
+
" `tsdocCoverage`, `referenceMismatches`, `linkFailures`, and",
|
|
8320
|
+
" `sampleFailures`.",
|
|
8321
|
+
"- **`findings`** \u2014 the same records re-aggregated as a single",
|
|
8322
|
+
" flat array, sorted by severity (`blocking` first), then",
|
|
8323
|
+
" category, file, line, and subject. Provided so consumers",
|
|
8324
|
+
" that don't need the category grouping can iterate one array",
|
|
8325
|
+
" and see the merge-blocking findings at the top.",
|
|
8326
|
+
"",
|
|
8327
|
+
"Every finding carries a `category`, `severity`",
|
|
8328
|
+
"(`mechanical` / `advisory` / `blocking`), `location`, `subject`,",
|
|
8329
|
+
"`details`, and an optional `fixHint` for the Phase 2 fix agent.",
|
|
8330
|
+
"",
|
|
8331
|
+
"### Orchestrator",
|
|
8332
|
+
"",
|
|
8333
|
+
"The scan is driven by `runScan(...)` (also exported under",
|
|
8334
|
+
"`src/docs-sync/scan/`). The orchestrator accepts a list of",
|
|
8335
|
+
"`AuditCheckRunner` instances, invokes each one in registration",
|
|
8336
|
+
"order, merges the findings into the report, and (optionally)",
|
|
8337
|
+
"persists the report to disk. The default check list is empty \u2014",
|
|
8338
|
+
"this skeleton release runs cleanly with no checks registered",
|
|
8339
|
+
"and produces a schema-compliant report whose category arrays",
|
|
8340
|
+
"are all empty.",
|
|
8341
|
+
"",
|
|
8342
|
+
"Children of the parent docs-sync epic plug runners into the",
|
|
8343
|
+
"orchestrator: API/TSDoc/reference checks land first, link",
|
|
8344
|
+
"and fenced-sample checks land second, the fix phase reads the",
|
|
8345
|
+
"persisted report, and the audit-mode walker reuses the same",
|
|
8346
|
+
"report shape.",
|
|
8347
|
+
"",
|
|
8348
|
+
"---",
|
|
8349
|
+
"",
|
|
8739
8350
|
"## Write Boundaries",
|
|
8740
8351
|
"",
|
|
8741
8352
|
"Even once the pipeline is wired, the following boundaries are",
|
|
@@ -9458,22 +9069,22 @@ function buildDocsSyncBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
9458
9069
|
{
|
|
9459
9070
|
name: "docs-sync:scan",
|
|
9460
9071
|
color: "C5DEF5",
|
|
9461
|
-
description: "Phase 1: scan
|
|
9072
|
+
description: "Phase 1: scan for drift (API diff, TSDoc coverage, references, links, sample compilation)"
|
|
9462
9073
|
},
|
|
9463
9074
|
{
|
|
9464
9075
|
name: "docs-sync:fix",
|
|
9465
9076
|
color: "BFDADC",
|
|
9466
|
-
description: "Phase 2: apply mechanical
|
|
9077
|
+
description: "Phase 2: apply mechanical fixes and file docs:write follow-ups for conceptual changes"
|
|
9467
9078
|
},
|
|
9468
9079
|
{
|
|
9469
9080
|
name: "docs-sync:advisory",
|
|
9470
9081
|
color: "FBCA04",
|
|
9471
|
-
description: "Drift detected by docs-sync but does not block the PR; surfaced as a
|
|
9082
|
+
description: "Drift detected by docs-sync but does not block the PR; surfaced as a sticky-comment note"
|
|
9472
9083
|
},
|
|
9473
9084
|
{
|
|
9474
9085
|
name: "docs-sync:blocking",
|
|
9475
9086
|
color: "B60205",
|
|
9476
|
-
description: "Drift
|
|
9087
|
+
description: "Drift blocks the PR; applied with review:human-required so pr-reviewer owns the merge gate"
|
|
9477
9088
|
}
|
|
9478
9089
|
]
|
|
9479
9090
|
};
|
|
@@ -11068,7 +10679,7 @@ function buildMaintenanceAuditBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
11068
10679
|
{
|
|
11069
10680
|
name: "maint:verify",
|
|
11070
10681
|
color: "D4C5F9",
|
|
11071
|
-
description: "Phase 3: re-run
|
|
10682
|
+
description: "Phase 3: re-run scan checks scoped to fix-phase paths, compare findings, close or re-queue scan"
|
|
11072
10683
|
}
|
|
11073
10684
|
]
|
|
11074
10685
|
};
|
|
@@ -15607,7 +15218,7 @@ function buildPeopleProfileBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
15607
15218
|
{
|
|
15608
15219
|
name: "people:followup",
|
|
15609
15220
|
color: "D4C5F9",
|
|
15610
|
-
description: "Phase 3: cross-link
|
|
15221
|
+
description: "Phase 3: cross-link profile to companies/software/meetings; enqueue follow-up research issues"
|
|
15611
15222
|
},
|
|
15612
15223
|
{
|
|
15613
15224
|
name: "people:refresh",
|
|
@@ -18407,22 +18018,22 @@ function buildRegulatoryResearchBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
18407
18018
|
{
|
|
18408
18019
|
name: "type:regulatory-research",
|
|
18409
18020
|
color: "5319E7",
|
|
18410
|
-
description: "
|
|
18021
|
+
description: "Researches a regulatory obligation: jurisdictional scan, deep-dive, or impact analysis"
|
|
18411
18022
|
},
|
|
18412
18023
|
{
|
|
18413
18024
|
name: "regulatory:scan",
|
|
18414
18025
|
color: "C5DEF5",
|
|
18415
|
-
description: "Phase 1: enumerate regulations
|
|
18026
|
+
description: "Phase 1: enumerate regulations for an industry/jurisdiction/scope; create research issues"
|
|
18416
18027
|
},
|
|
18417
18028
|
{
|
|
18418
18029
|
name: "regulatory:research",
|
|
18419
18030
|
color: "BFDADC",
|
|
18420
|
-
description: "Phase 2: research one regulation in depth
|
|
18031
|
+
description: "Phase 2: research one regulation in depth (scope, triggers, requirements, enforcement)"
|
|
18421
18032
|
},
|
|
18422
18033
|
{
|
|
18423
18034
|
name: "regulatory:impact",
|
|
18424
18035
|
color: "D4C5F9",
|
|
18425
|
-
description: "Phase 3: assess product impact
|
|
18036
|
+
description: "Phase 3: assess product impact and hand off SEC req:scan seeds to requirements-analyst"
|
|
18426
18037
|
}
|
|
18427
18038
|
]
|
|
18428
18039
|
};
|
|
@@ -21699,7 +21310,7 @@ function buildRequirementsWriterBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
21699
21310
|
{
|
|
21700
21311
|
name: "tier:customer-workflow",
|
|
21701
21312
|
color: "EDEDED",
|
|
21702
|
-
description: "Architectural tier: customer-configured workflow (business logic tenants configure
|
|
21313
|
+
description: "Architectural tier: customer-configured workflow (business logic tenants configure)"
|
|
21703
21314
|
},
|
|
21704
21315
|
{
|
|
21705
21316
|
name: "tier:consumer-app",
|
|
@@ -23099,7 +22710,7 @@ function buildRequirementsReviewerBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
23099
22710
|
{
|
|
23100
22711
|
name: "req:deprecate",
|
|
23101
22712
|
color: "D93F0B",
|
|
23102
|
-
description: "Phase: transition
|
|
22713
|
+
description: "Phase: transition requirement docs to Deprecated/Superseded via the requirements-reviewer"
|
|
23103
22714
|
}
|
|
23104
22715
|
]
|
|
23105
22716
|
};
|
|
@@ -24753,7 +24364,7 @@ function buildSoftwareProfileBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
24753
24364
|
{
|
|
24754
24365
|
name: "type:software-profile",
|
|
24755
24366
|
color: "0E8A16",
|
|
24756
|
-
description: "
|
|
24367
|
+
description: "Produces a software profile, research notes, feature-matrix rows, or capability mappings"
|
|
24757
24368
|
},
|
|
24758
24369
|
{
|
|
24759
24370
|
name: "software:research",
|
|
@@ -24773,12 +24384,12 @@ function buildSoftwareProfileBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
24773
24384
|
{
|
|
24774
24385
|
name: "software:map",
|
|
24775
24386
|
color: "A2EEEF",
|
|
24776
|
-
description: "Phase 4: map
|
|
24387
|
+
description: "Phase 4: map features to the BCM model and enqueue bcm:outline issues for unmapped features"
|
|
24777
24388
|
},
|
|
24778
24389
|
{
|
|
24779
24390
|
name: "software:followup",
|
|
24780
24391
|
color: "FBCA04",
|
|
24781
|
-
description: "Phase 5: enqueue follow-up research
|
|
24392
|
+
description: "Phase 5: enqueue follow-up research for adjacent products, vendor company, and key people"
|
|
24782
24393
|
}
|
|
24783
24394
|
]
|
|
24784
24395
|
};
|
|
@@ -26105,32 +25716,32 @@ function buildStandardsResearchBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
26105
25716
|
{
|
|
26106
25717
|
name: "type:standards-research",
|
|
26107
25718
|
color: "5319E7",
|
|
26108
|
-
description: "
|
|
25719
|
+
description: "Researches an interoperability standard: versions, comparison, extension, or org profile"
|
|
26109
25720
|
},
|
|
26110
25721
|
{
|
|
26111
25722
|
name: "standards:scope",
|
|
26112
25723
|
color: "C5DEF5",
|
|
26113
|
-
description: "Phase 1: plan
|
|
25724
|
+
description: "Phase 1: plan a standard's research campaign; write query plan; create downstream issues"
|
|
26114
25725
|
},
|
|
26115
25726
|
{
|
|
26116
25727
|
name: "standards:research",
|
|
26117
25728
|
color: "BFDADC",
|
|
26118
|
-
description: "Phase 2: research one version
|
|
25729
|
+
description: "Phase 2: research one version (status, key changes, resources, adoption, governance)"
|
|
26119
25730
|
},
|
|
26120
25731
|
{
|
|
26121
25732
|
name: "standards:compare",
|
|
26122
25733
|
color: "D4C5F9",
|
|
26123
|
-
description: "Phase 3: synthesize
|
|
25734
|
+
description: "Phase 3: synthesize cross-version comparison: timeline, maturity, breaking changes, migration"
|
|
26124
25735
|
},
|
|
26125
25736
|
{
|
|
26126
25737
|
name: "standards:extension",
|
|
26127
25738
|
color: "FBCA04",
|
|
26128
|
-
description: "Phase 4: analyze
|
|
25739
|
+
description: "Phase 4: analyze extension for one Partial/Gap entity; hand off Proposed ADR to requirements"
|
|
26129
25740
|
},
|
|
26130
25741
|
{
|
|
26131
25742
|
name: "standards:organizations",
|
|
26132
25743
|
color: "0E8A16",
|
|
26133
|
-
description: "Phase 5: profile one standards-body organization
|
|
25744
|
+
description: "Phase 5: profile one standards-body organization; hand off company/people profile issues"
|
|
26134
25745
|
}
|
|
26135
25746
|
]
|
|
26136
25747
|
};
|
|
@@ -27192,8 +26803,8 @@ var FALLBACKS = {
|
|
|
27192
26803
|
monorepoLayoutSeedBlock: ""
|
|
27193
26804
|
};
|
|
27194
26805
|
var TEMPLATE_RE = /\{\{(\w+(?:\.\w+)*)\}\}/g;
|
|
27195
|
-
function getNestedValue(obj,
|
|
27196
|
-
const parts =
|
|
26806
|
+
function getNestedValue(obj, path7) {
|
|
26807
|
+
const parts = path7.split(".");
|
|
27197
26808
|
let current = obj;
|
|
27198
26809
|
for (const part of parts) {
|
|
27199
26810
|
if (current == null || typeof current !== "object") {
|
|
@@ -27419,20 +27030,20 @@ var ClaudeRenderer = class _ClaudeRenderer {
|
|
|
27419
27030
|
obj.excludedCommands = [...sandbox.excludedCommands];
|
|
27420
27031
|
}
|
|
27421
27032
|
if (sandbox.filesystem) {
|
|
27422
|
-
const
|
|
27033
|
+
const fs4 = {};
|
|
27423
27034
|
if (sandbox.filesystem.allowRead?.length) {
|
|
27424
|
-
|
|
27035
|
+
fs4.allowRead = [...sandbox.filesystem.allowRead];
|
|
27425
27036
|
}
|
|
27426
27037
|
if (sandbox.filesystem.denyRead?.length) {
|
|
27427
|
-
|
|
27038
|
+
fs4.denyRead = [...sandbox.filesystem.denyRead];
|
|
27428
27039
|
}
|
|
27429
27040
|
if (sandbox.filesystem.allowWrite?.length) {
|
|
27430
|
-
|
|
27041
|
+
fs4.allowWrite = [...sandbox.filesystem.allowWrite];
|
|
27431
27042
|
}
|
|
27432
27043
|
if (sandbox.filesystem.denyWrite?.length) {
|
|
27433
|
-
|
|
27044
|
+
fs4.denyWrite = [...sandbox.filesystem.denyWrite];
|
|
27434
27045
|
}
|
|
27435
|
-
if (Object.keys(
|
|
27046
|
+
if (Object.keys(fs4).length > 0) obj.filesystem = fs4;
|
|
27436
27047
|
}
|
|
27437
27048
|
if (sandbox.network) {
|
|
27438
27049
|
const net = {};
|
|
@@ -27888,26 +27499,6 @@ var SKILL_EVALS_BUNDLE_HOOKS = [
|
|
|
27888
27499
|
["requirements-analyst-workflow", "requirements-analyst"],
|
|
27889
27500
|
["requirements-writer-workflow", "write-requirement"]
|
|
27890
27501
|
];
|
|
27891
|
-
var WORKFLOW_DIAGRAMS_BUNDLE_HOOKS = [
|
|
27892
|
-
["bcm-writer-workflow", "bcm-writer"],
|
|
27893
|
-
["business-models-workflow", "business-models"],
|
|
27894
|
-
["company-profile-workflow", "company-profile"],
|
|
27895
|
-
["customer-profile-workflow", "customer-profile"],
|
|
27896
|
-
["industry-discovery-workflow", "industry-discovery"],
|
|
27897
|
-
["maintenance-audit-workflow", "maintenance-audit"],
|
|
27898
|
-
["meeting-agenda-workflow", "agenda"],
|
|
27899
|
-
["meeting-processing-workflow", "meeting-analysis"],
|
|
27900
|
-
["orchestrator-conventions", "orchestrator"],
|
|
27901
|
-
["people-profile-workflow", "people-profile"],
|
|
27902
|
-
["pr-review-workflow", "pr-review"],
|
|
27903
|
-
["regulatory-research-workflow", "regulatory-research"],
|
|
27904
|
-
["requirements-analyst-workflow", "requirements-analyst"],
|
|
27905
|
-
["requirements-reviewer-workflow", "requirements-reviewer"],
|
|
27906
|
-
["requirements-writer-workflow", "requirements-writer"],
|
|
27907
|
-
["research-pipeline-workflow", "research-pipeline"],
|
|
27908
|
-
["software-profile-workflow", "software-profile"],
|
|
27909
|
-
["standards-research-workflow", "standards-research"]
|
|
27910
|
-
];
|
|
27911
27502
|
var ISSUE_TEMPLATES_BUNDLE_HOOKS = [
|
|
27912
27503
|
["bcm-writer-workflow", "bcm-writer"],
|
|
27913
27504
|
["business-models-workflow", "business-models"],
|
|
@@ -28079,24 +27670,6 @@ var AgentConfig = class _AgentConfig extends import_projen8.Component {
|
|
|
28079
27670
|
executable: true
|
|
28080
27671
|
});
|
|
28081
27672
|
}
|
|
28082
|
-
const resolvedWorkflowDiagrams = validateWorkflowDiagramsConfig(
|
|
28083
|
-
this.options.workflowDiagrams
|
|
28084
|
-
);
|
|
28085
|
-
if (resolvedWorkflowDiagrams.enabled) {
|
|
28086
|
-
if (resolvedWorkflowDiagrams.emitChecker) {
|
|
28087
|
-
new import_projen8.TextFile(this, ".claude/procedures/check-workflow-diagrams.sh", {
|
|
28088
|
-
lines: renderWorkflowDiagramsCheckerScript(
|
|
28089
|
-
resolvedWorkflowDiagrams
|
|
28090
|
-
).split("\n"),
|
|
28091
|
-
executable: true
|
|
28092
|
-
});
|
|
28093
|
-
}
|
|
28094
|
-
if (resolvedWorkflowDiagrams.emitStarterDiagram) {
|
|
28095
|
-
new import_projen8.SampleFile(this.project, resolvedWorkflowDiagrams.diagramsPath, {
|
|
28096
|
-
contents: renderWorkflowDiagramsStarterPage(resolvedWorkflowDiagrams)
|
|
28097
|
-
});
|
|
28098
|
-
}
|
|
28099
|
-
}
|
|
28100
27673
|
const resolvedIssueTemplates = validateIssueTemplatesConfig(
|
|
28101
27674
|
this.options.issueTemplates
|
|
28102
27675
|
);
|
|
@@ -28409,46 +27982,6 @@ ${hook}`
|
|
|
28409
27982
|
|
|
28410
27983
|
---
|
|
28411
27984
|
|
|
28412
|
-
${hook}`
|
|
28413
|
-
});
|
|
28414
|
-
}
|
|
28415
|
-
}
|
|
28416
|
-
const resolvedWorkflowDiagramsForRules = resolveWorkflowDiagrams(
|
|
28417
|
-
this.options.workflowDiagrams
|
|
28418
|
-
);
|
|
28419
|
-
if (this.options.workflowDiagrams) {
|
|
28420
|
-
const workflowDiagramsRule = ruleMap.get("workflow-diagrams-convention");
|
|
28421
|
-
if (workflowDiagramsRule) {
|
|
28422
|
-
const workflowDiagramsContent = renderWorkflowDiagramsRuleContent(
|
|
28423
|
-
resolvedWorkflowDiagramsForRules
|
|
28424
|
-
);
|
|
28425
|
-
if (workflowDiagramsContent !== workflowDiagramsRule.content) {
|
|
28426
|
-
ruleMap.set("workflow-diagrams-convention", {
|
|
28427
|
-
...workflowDiagramsRule,
|
|
28428
|
-
content: workflowDiagramsContent
|
|
28429
|
-
});
|
|
28430
|
-
}
|
|
28431
|
-
}
|
|
28432
|
-
}
|
|
28433
|
-
if (resolvedWorkflowDiagramsForRules.enabled) {
|
|
28434
|
-
for (const [ruleName, label] of WORKFLOW_DIAGRAMS_BUNDLE_HOOKS) {
|
|
28435
|
-
const existing = ruleMap.get(ruleName);
|
|
28436
|
-
if (!existing) {
|
|
28437
|
-
continue;
|
|
28438
|
-
}
|
|
28439
|
-
const hook = renderWorkflowDiagramsBundleHook(
|
|
28440
|
-
resolvedWorkflowDiagramsForRules,
|
|
28441
|
-
label
|
|
28442
|
-
);
|
|
28443
|
-
if (hook.length === 0) {
|
|
28444
|
-
continue;
|
|
28445
|
-
}
|
|
28446
|
-
ruleMap.set(ruleName, {
|
|
28447
|
-
...existing,
|
|
28448
|
-
content: `${existing.content}
|
|
28449
|
-
|
|
28450
|
-
---
|
|
28451
|
-
|
|
28452
27985
|
${hook}`
|
|
28453
27986
|
});
|
|
28454
27987
|
}
|
|
@@ -29641,8 +29174,405 @@ function formatDiagnostic(d) {
|
|
|
29641
29174
|
return `${code}${text}`.trim();
|
|
29642
29175
|
}
|
|
29643
29176
|
|
|
29644
|
-
// src/docs-sync/
|
|
29177
|
+
// src/docs-sync/scan/audit-report.ts
|
|
29178
|
+
var AuditCategory = {
|
|
29179
|
+
/**
|
|
29180
|
+
* Findings produced by the public-API diff check that surfaces
|
|
29181
|
+
* added, renamed, or removed exports between the current branch
|
|
29182
|
+
* and the recorded baseline. Wired in by child issue #519.
|
|
29183
|
+
*/
|
|
29184
|
+
ApiDiff: "apiDiff",
|
|
29185
|
+
/**
|
|
29186
|
+
* Findings produced by the TSDoc-coverage check that flags public
|
|
29187
|
+
* exports without a one-sentence summary. Wired in by child issue
|
|
29188
|
+
* #519.
|
|
29189
|
+
*/
|
|
29190
|
+
TsdocCoverage: "tsdocCoverage",
|
|
29191
|
+
/**
|
|
29192
|
+
* Findings produced by the doc-reference cross-index check that
|
|
29193
|
+
* flags inline-code symbol mentions whose target is missing or
|
|
29194
|
+
* has changed. Wired in by child issue #519.
|
|
29195
|
+
*/
|
|
29196
|
+
ReferenceMismatches: "referenceMismatches",
|
|
29197
|
+
/**
|
|
29198
|
+
* Findings produced by the link-integrity check (internal via
|
|
29199
|
+
* `astro check`, external via `lychee`). Wired in by child issue
|
|
29200
|
+
* #520.
|
|
29201
|
+
*/
|
|
29202
|
+
LinkFailures: "linkFailures",
|
|
29203
|
+
/**
|
|
29204
|
+
* Findings produced by the fenced-sample compilation check that
|
|
29205
|
+
* flags ` ```ts ` / ` ```typescript ` / ` ```tsx ` blocks in the
|
|
29206
|
+
* docs that fail `tsc`. Wired in by child issue #520.
|
|
29207
|
+
*/
|
|
29208
|
+
SampleFailures: "sampleFailures"
|
|
29209
|
+
};
|
|
29210
|
+
var AuditSeverity = {
|
|
29211
|
+
/**
|
|
29212
|
+
* The finding has a deterministic mechanical fix that the Phase 2
|
|
29213
|
+
* (Fix) agent will auto-apply (TSDoc stubs, dead-link updates,
|
|
29214
|
+
* registry sync, etc.).
|
|
29215
|
+
*/
|
|
29216
|
+
Mechanical: "mechanical",
|
|
29217
|
+
/**
|
|
29218
|
+
* The finding deserves human attention but does not block the PR.
|
|
29219
|
+
* Surfaced as a non-blocking note on the sticky `## Docs sync`
|
|
29220
|
+
* comment.
|
|
29221
|
+
*/
|
|
29222
|
+
Advisory: "advisory",
|
|
29223
|
+
/**
|
|
29224
|
+
* The finding blocks the PR. Per the parent epic this is reserved
|
|
29225
|
+
* for the two narrow cases of confirmed broken external links and
|
|
29226
|
+
* fenced TS samples that fail to compile.
|
|
29227
|
+
*/
|
|
29228
|
+
Blocking: "blocking"
|
|
29229
|
+
};
|
|
29230
|
+
var AuditMode = {
|
|
29231
|
+
Pr: "pr",
|
|
29232
|
+
Audit: "audit"
|
|
29233
|
+
};
|
|
29234
|
+
var DOCS_SYNC_AUDIT_SCHEMA_VERSION = 1;
|
|
29235
|
+
function auditReportJsonSchema() {
|
|
29236
|
+
const locationSchema = {
|
|
29237
|
+
type: "object",
|
|
29238
|
+
additionalProperties: false,
|
|
29239
|
+
required: ["file", "line"],
|
|
29240
|
+
properties: {
|
|
29241
|
+
file: { type: "string" },
|
|
29242
|
+
line: { type: "integer", minimum: 0 }
|
|
29243
|
+
}
|
|
29244
|
+
};
|
|
29245
|
+
const findingBaseProperties = {
|
|
29246
|
+
severity: { type: "string", enum: ["mechanical", "advisory", "blocking"] },
|
|
29247
|
+
location: locationSchema,
|
|
29248
|
+
subject: { type: "string" },
|
|
29249
|
+
details: { type: "string" },
|
|
29250
|
+
fixHint: { type: "string" }
|
|
29251
|
+
};
|
|
29252
|
+
const apiDiffFindingSchema = {
|
|
29253
|
+
type: "object",
|
|
29254
|
+
required: [
|
|
29255
|
+
"category",
|
|
29256
|
+
"severity",
|
|
29257
|
+
"location",
|
|
29258
|
+
"subject",
|
|
29259
|
+
"details",
|
|
29260
|
+
"change",
|
|
29261
|
+
"symbol"
|
|
29262
|
+
],
|
|
29263
|
+
properties: {
|
|
29264
|
+
...findingBaseProperties,
|
|
29265
|
+
category: { type: "string", const: "apiDiff" },
|
|
29266
|
+
change: { type: "string", enum: ["added", "removed", "changed"] },
|
|
29267
|
+
symbol: { type: "string" }
|
|
29268
|
+
}
|
|
29269
|
+
};
|
|
29270
|
+
const tsdocCoverageFindingSchema = {
|
|
29271
|
+
type: "object",
|
|
29272
|
+
required: [
|
|
29273
|
+
"category",
|
|
29274
|
+
"severity",
|
|
29275
|
+
"location",
|
|
29276
|
+
"subject",
|
|
29277
|
+
"details",
|
|
29278
|
+
"shortfall",
|
|
29279
|
+
"symbol"
|
|
29280
|
+
],
|
|
29281
|
+
properties: {
|
|
29282
|
+
...findingBaseProperties,
|
|
29283
|
+
category: { type: "string", const: "tsdocCoverage" },
|
|
29284
|
+
shortfall: {
|
|
29285
|
+
type: "string",
|
|
29286
|
+
enum: [
|
|
29287
|
+
"missing-summary",
|
|
29288
|
+
"thin-summary",
|
|
29289
|
+
"missing-params",
|
|
29290
|
+
"missing-returns"
|
|
29291
|
+
]
|
|
29292
|
+
},
|
|
29293
|
+
symbol: { type: "string" }
|
|
29294
|
+
}
|
|
29295
|
+
};
|
|
29296
|
+
const referenceMismatchFindingSchema = {
|
|
29297
|
+
type: "object",
|
|
29298
|
+
required: [
|
|
29299
|
+
"category",
|
|
29300
|
+
"severity",
|
|
29301
|
+
"location",
|
|
29302
|
+
"subject",
|
|
29303
|
+
"details",
|
|
29304
|
+
"mismatch",
|
|
29305
|
+
"symbol"
|
|
29306
|
+
],
|
|
29307
|
+
properties: {
|
|
29308
|
+
...findingBaseProperties,
|
|
29309
|
+
category: { type: "string", const: "referenceMismatches" },
|
|
29310
|
+
mismatch: {
|
|
29311
|
+
type: "string",
|
|
29312
|
+
enum: ["unknown-symbol", "signature-changed"]
|
|
29313
|
+
},
|
|
29314
|
+
symbol: { type: "string" }
|
|
29315
|
+
}
|
|
29316
|
+
};
|
|
29317
|
+
const linkFailureFindingSchema = {
|
|
29318
|
+
type: "object",
|
|
29319
|
+
required: [
|
|
29320
|
+
"category",
|
|
29321
|
+
"severity",
|
|
29322
|
+
"location",
|
|
29323
|
+
"subject",
|
|
29324
|
+
"details",
|
|
29325
|
+
"url",
|
|
29326
|
+
"kind",
|
|
29327
|
+
"reason"
|
|
29328
|
+
],
|
|
29329
|
+
properties: {
|
|
29330
|
+
...findingBaseProperties,
|
|
29331
|
+
category: { type: "string", const: "linkFailures" },
|
|
29332
|
+
url: { type: "string" },
|
|
29333
|
+
kind: { type: "string", enum: ["internal", "external"] },
|
|
29334
|
+
reason: { type: "string" }
|
|
29335
|
+
}
|
|
29336
|
+
};
|
|
29337
|
+
const sampleFailureFindingSchema = {
|
|
29338
|
+
type: "object",
|
|
29339
|
+
required: [
|
|
29340
|
+
"category",
|
|
29341
|
+
"severity",
|
|
29342
|
+
"location",
|
|
29343
|
+
"subject",
|
|
29344
|
+
"details",
|
|
29345
|
+
"fenceIndex",
|
|
29346
|
+
"lang",
|
|
29347
|
+
"diagnostics"
|
|
29348
|
+
],
|
|
29349
|
+
properties: {
|
|
29350
|
+
...findingBaseProperties,
|
|
29351
|
+
category: { type: "string", const: "sampleFailures" },
|
|
29352
|
+
fenceIndex: { type: "integer", minimum: 0 },
|
|
29353
|
+
lang: { type: "string" },
|
|
29354
|
+
diagnostics: { type: "array", items: { type: "string" } }
|
|
29355
|
+
}
|
|
29356
|
+
};
|
|
29357
|
+
return {
|
|
29358
|
+
$schema: "http://json-schema.org/draft-07/schema#",
|
|
29359
|
+
title: "DocsSyncAuditReport",
|
|
29360
|
+
type: "object",
|
|
29361
|
+
additionalProperties: false,
|
|
29362
|
+
required: [
|
|
29363
|
+
"schemaVersion",
|
|
29364
|
+
"issueNumber",
|
|
29365
|
+
"mode",
|
|
29366
|
+
"generatedAt",
|
|
29367
|
+
"repoRoot",
|
|
29368
|
+
"scope",
|
|
29369
|
+
"categories",
|
|
29370
|
+
"findings"
|
|
29371
|
+
],
|
|
29372
|
+
properties: {
|
|
29373
|
+
schemaVersion: { type: "integer", const: DOCS_SYNC_AUDIT_SCHEMA_VERSION },
|
|
29374
|
+
issueNumber: { type: "integer", minimum: 0 },
|
|
29375
|
+
mode: { type: "string", enum: ["pr", "audit"] },
|
|
29376
|
+
generatedAt: { type: "string", format: "date-time" },
|
|
29377
|
+
repoRoot: { type: "string" },
|
|
29378
|
+
scope: { type: "string" },
|
|
29379
|
+
categories: {
|
|
29380
|
+
type: "object",
|
|
29381
|
+
additionalProperties: false,
|
|
29382
|
+
required: [
|
|
29383
|
+
"apiDiff",
|
|
29384
|
+
"tsdocCoverage",
|
|
29385
|
+
"referenceMismatches",
|
|
29386
|
+
"linkFailures",
|
|
29387
|
+
"sampleFailures"
|
|
29388
|
+
],
|
|
29389
|
+
properties: {
|
|
29390
|
+
apiDiff: { type: "array", items: apiDiffFindingSchema },
|
|
29391
|
+
tsdocCoverage: { type: "array", items: tsdocCoverageFindingSchema },
|
|
29392
|
+
referenceMismatches: {
|
|
29393
|
+
type: "array",
|
|
29394
|
+
items: referenceMismatchFindingSchema
|
|
29395
|
+
},
|
|
29396
|
+
linkFailures: { type: "array", items: linkFailureFindingSchema },
|
|
29397
|
+
sampleFailures: { type: "array", items: sampleFailureFindingSchema }
|
|
29398
|
+
}
|
|
29399
|
+
},
|
|
29400
|
+
findings: {
|
|
29401
|
+
type: "array",
|
|
29402
|
+
items: {
|
|
29403
|
+
oneOf: [
|
|
29404
|
+
apiDiffFindingSchema,
|
|
29405
|
+
tsdocCoverageFindingSchema,
|
|
29406
|
+
referenceMismatchFindingSchema,
|
|
29407
|
+
linkFailureFindingSchema,
|
|
29408
|
+
sampleFailureFindingSchema
|
|
29409
|
+
]
|
|
29410
|
+
}
|
|
29411
|
+
}
|
|
29412
|
+
}
|
|
29413
|
+
};
|
|
29414
|
+
}
|
|
29415
|
+
|
|
29416
|
+
// src/docs-sync/scan/run-scan.ts
|
|
29417
|
+
var fs3 = __toESM(require("fs"));
|
|
29645
29418
|
var path5 = __toESM(require("path"));
|
|
29419
|
+
var DEFAULT_AUDIT_REPORT_DIR = ".claude/state/docs-sync";
|
|
29420
|
+
var SEVERITY_RANK = {
|
|
29421
|
+
blocking: 0,
|
|
29422
|
+
advisory: 1,
|
|
29423
|
+
mechanical: 2
|
|
29424
|
+
};
|
|
29425
|
+
var AUDIT_CATEGORY_ORDER = [
|
|
29426
|
+
AuditCategory.ApiDiff,
|
|
29427
|
+
AuditCategory.TsdocCoverage,
|
|
29428
|
+
AuditCategory.ReferenceMismatches,
|
|
29429
|
+
AuditCategory.LinkFailures,
|
|
29430
|
+
AuditCategory.SampleFailures
|
|
29431
|
+
];
|
|
29432
|
+
function runScan(options) {
|
|
29433
|
+
const repoRoot = path5.resolve(options.repoRoot);
|
|
29434
|
+
const mode = options.mode;
|
|
29435
|
+
const scope = options.scope ?? "";
|
|
29436
|
+
const issueNumber = options.issueNumber;
|
|
29437
|
+
const checks = options.checks ?? [];
|
|
29438
|
+
const now = options.now ?? /* @__PURE__ */ new Date();
|
|
29439
|
+
const persist = options.persist ?? false;
|
|
29440
|
+
const reportDir = options.reportDir ?? DEFAULT_AUDIT_REPORT_DIR;
|
|
29441
|
+
const context = {
|
|
29442
|
+
repoRoot,
|
|
29443
|
+
mode,
|
|
29444
|
+
scope,
|
|
29445
|
+
issueNumber
|
|
29446
|
+
};
|
|
29447
|
+
const collected = [];
|
|
29448
|
+
for (const check of checks) {
|
|
29449
|
+
const result = check.run(context);
|
|
29450
|
+
for (const finding of result) {
|
|
29451
|
+
collected.push(finding);
|
|
29452
|
+
}
|
|
29453
|
+
}
|
|
29454
|
+
const report = buildReport({
|
|
29455
|
+
issueNumber,
|
|
29456
|
+
mode,
|
|
29457
|
+
scope,
|
|
29458
|
+
repoRoot,
|
|
29459
|
+
generatedAt: now,
|
|
29460
|
+
findings: collected
|
|
29461
|
+
});
|
|
29462
|
+
let reportPath = "";
|
|
29463
|
+
if (persist) {
|
|
29464
|
+
reportPath = persistAuditReport({
|
|
29465
|
+
report,
|
|
29466
|
+
repoRoot,
|
|
29467
|
+
reportDir
|
|
29468
|
+
});
|
|
29469
|
+
}
|
|
29470
|
+
return { report, reportPath };
|
|
29471
|
+
}
|
|
29472
|
+
function buildReport(args) {
|
|
29473
|
+
const buckets = emptyCategoryBuckets();
|
|
29474
|
+
for (const finding of args.findings) {
|
|
29475
|
+
pushIntoBucket(buckets, finding);
|
|
29476
|
+
}
|
|
29477
|
+
buckets.apiDiff.sort(compareFindings);
|
|
29478
|
+
buckets.tsdocCoverage.sort(compareFindings);
|
|
29479
|
+
buckets.referenceMismatches.sort(compareFindings);
|
|
29480
|
+
buckets.linkFailures.sort(compareFindings);
|
|
29481
|
+
buckets.sampleFailures.sort(compareFindings);
|
|
29482
|
+
const flat = [];
|
|
29483
|
+
for (const key of AUDIT_CATEGORY_ORDER) {
|
|
29484
|
+
const bucket = buckets[key];
|
|
29485
|
+
for (const finding of bucket) {
|
|
29486
|
+
flat.push(finding);
|
|
29487
|
+
}
|
|
29488
|
+
}
|
|
29489
|
+
flat.sort(compareFindings);
|
|
29490
|
+
return {
|
|
29491
|
+
schemaVersion: DOCS_SYNC_AUDIT_SCHEMA_VERSION,
|
|
29492
|
+
issueNumber: args.issueNumber,
|
|
29493
|
+
mode: args.mode,
|
|
29494
|
+
generatedAt: args.generatedAt.toISOString(),
|
|
29495
|
+
repoRoot: args.repoRoot,
|
|
29496
|
+
scope: args.scope,
|
|
29497
|
+
categories: {
|
|
29498
|
+
apiDiff: buckets.apiDiff,
|
|
29499
|
+
tsdocCoverage: buckets.tsdocCoverage,
|
|
29500
|
+
referenceMismatches: buckets.referenceMismatches,
|
|
29501
|
+
linkFailures: buckets.linkFailures,
|
|
29502
|
+
sampleFailures: buckets.sampleFailures
|
|
29503
|
+
},
|
|
29504
|
+
findings: flat
|
|
29505
|
+
};
|
|
29506
|
+
}
|
|
29507
|
+
function persistAuditReport(args) {
|
|
29508
|
+
const repoRoot = path5.resolve(args.repoRoot);
|
|
29509
|
+
const reportDir = args.reportDir ?? DEFAULT_AUDIT_REPORT_DIR;
|
|
29510
|
+
const targetDir = path5.resolve(repoRoot, reportDir);
|
|
29511
|
+
fs3.mkdirSync(targetDir, { recursive: true });
|
|
29512
|
+
const targetFile = path5.join(
|
|
29513
|
+
targetDir,
|
|
29514
|
+
`${args.report.issueNumber}-audit.json`
|
|
29515
|
+
);
|
|
29516
|
+
const tempFile = `${targetFile}.tmp-${process.pid}-${Date.now()}`;
|
|
29517
|
+
const serialized = `${JSON.stringify(args.report, null, 2)}
|
|
29518
|
+
`;
|
|
29519
|
+
fs3.writeFileSync(tempFile, serialized, "utf-8");
|
|
29520
|
+
fs3.renameSync(tempFile, targetFile);
|
|
29521
|
+
return targetFile;
|
|
29522
|
+
}
|
|
29523
|
+
function emptyCategoryBuckets() {
|
|
29524
|
+
return {
|
|
29525
|
+
apiDiff: [],
|
|
29526
|
+
tsdocCoverage: [],
|
|
29527
|
+
referenceMismatches: [],
|
|
29528
|
+
linkFailures: [],
|
|
29529
|
+
sampleFailures: []
|
|
29530
|
+
};
|
|
29531
|
+
}
|
|
29532
|
+
function pushIntoBucket(buckets, finding) {
|
|
29533
|
+
switch (finding.category) {
|
|
29534
|
+
case AuditCategory.ApiDiff:
|
|
29535
|
+
buckets.apiDiff.push(finding);
|
|
29536
|
+
return;
|
|
29537
|
+
case AuditCategory.TsdocCoverage:
|
|
29538
|
+
buckets.tsdocCoverage.push(finding);
|
|
29539
|
+
return;
|
|
29540
|
+
case AuditCategory.ReferenceMismatches:
|
|
29541
|
+
buckets.referenceMismatches.push(finding);
|
|
29542
|
+
return;
|
|
29543
|
+
case AuditCategory.LinkFailures:
|
|
29544
|
+
buckets.linkFailures.push(finding);
|
|
29545
|
+
return;
|
|
29546
|
+
case AuditCategory.SampleFailures:
|
|
29547
|
+
buckets.sampleFailures.push(finding);
|
|
29548
|
+
return;
|
|
29549
|
+
default: {
|
|
29550
|
+
const exhaustive = finding;
|
|
29551
|
+
throw new Error(
|
|
29552
|
+
`runScan: unrecognized finding category: ${JSON.stringify(exhaustive)}`
|
|
29553
|
+
);
|
|
29554
|
+
}
|
|
29555
|
+
}
|
|
29556
|
+
}
|
|
29557
|
+
function compareFindings(a, b) {
|
|
29558
|
+
const sevDelta = SEVERITY_RANK[a.severity] - SEVERITY_RANK[b.severity];
|
|
29559
|
+
if (sevDelta !== 0) {
|
|
29560
|
+
return sevDelta;
|
|
29561
|
+
}
|
|
29562
|
+
if (a.category !== b.category) {
|
|
29563
|
+
return a.category.localeCompare(b.category);
|
|
29564
|
+
}
|
|
29565
|
+
if (a.location.file !== b.location.file) {
|
|
29566
|
+
return a.location.file.localeCompare(b.location.file);
|
|
29567
|
+
}
|
|
29568
|
+
if (a.location.line !== b.location.line) {
|
|
29569
|
+
return a.location.line - b.location.line;
|
|
29570
|
+
}
|
|
29571
|
+
return a.subject.localeCompare(b.subject);
|
|
29572
|
+
}
|
|
29573
|
+
|
|
29574
|
+
// src/docs-sync/tsdoc-coverage/coverage.ts
|
|
29575
|
+
var path6 = __toESM(require("path"));
|
|
29646
29576
|
var import_tsdoc = require("@microsoft/tsdoc");
|
|
29647
29577
|
var ts2 = __toESM(require("typescript"));
|
|
29648
29578
|
var TsDocCoverageKind = {
|
|
@@ -29660,8 +29590,8 @@ var DEFAULT_THIN_SUMMARY_WORD_THRESHOLD = 4;
|
|
|
29660
29590
|
var DEFAULT_ENTRY_POINT = "src/index.ts";
|
|
29661
29591
|
function analyzeTsDocCoverage(options) {
|
|
29662
29592
|
const resolvedOptions = typeof options === "string" ? { packageRoot: options } : options;
|
|
29663
|
-
const packageRoot =
|
|
29664
|
-
const entryPoint =
|
|
29593
|
+
const packageRoot = path6.resolve(resolvedOptions.packageRoot);
|
|
29594
|
+
const entryPoint = path6.resolve(
|
|
29665
29595
|
packageRoot,
|
|
29666
29596
|
resolvedOptions.entryPoint ?? DEFAULT_ENTRY_POINT
|
|
29667
29597
|
);
|
|
@@ -29724,7 +29654,7 @@ function analyzeTsDocCoverage(options) {
|
|
|
29724
29654
|
}
|
|
29725
29655
|
function resolveCompilerOptions(packageRoot, tsconfigPath) {
|
|
29726
29656
|
if (tsconfigPath) {
|
|
29727
|
-
const absoluteTsconfig =
|
|
29657
|
+
const absoluteTsconfig = path6.resolve(packageRoot, tsconfigPath);
|
|
29728
29658
|
const configFile = ts2.readConfigFile(absoluteTsconfig, ts2.sys.readFile);
|
|
29729
29659
|
if (configFile.error) {
|
|
29730
29660
|
throw new Error(
|
|
@@ -29734,7 +29664,7 @@ function resolveCompilerOptions(packageRoot, tsconfigPath) {
|
|
|
29734
29664
|
const parsed = ts2.parseJsonConfigFileContent(
|
|
29735
29665
|
configFile.config,
|
|
29736
29666
|
ts2.sys,
|
|
29737
|
-
|
|
29667
|
+
path6.dirname(absoluteTsconfig)
|
|
29738
29668
|
);
|
|
29739
29669
|
return { ...parsed.options, noEmit: true };
|
|
29740
29670
|
}
|
|
@@ -30189,8 +30119,8 @@ var ResetTask = class _ResetTask extends import_projen14.Component {
|
|
|
30189
30119
|
const resetTask = this.project.tasks.addTask(this.taskName, {
|
|
30190
30120
|
description: "Delete build artifacts specified by pathsToRemove option, or artifactsDirectory if pathsToRemove is empty"
|
|
30191
30121
|
});
|
|
30192
|
-
this.pathsToRemove.forEach((
|
|
30193
|
-
resetTask.exec(`[ -e "${
|
|
30122
|
+
this.pathsToRemove.forEach((path7) => {
|
|
30123
|
+
resetTask.exec(`[ -e "${path7}" ] && rm -rf ${path7} || true`);
|
|
30194
30124
|
});
|
|
30195
30125
|
const rootHasTurbo = TurboRepo.of(this.project.root) !== void 0;
|
|
30196
30126
|
const isSubproject = this.project !== this.project.root;
|
|
@@ -30532,6 +30462,7 @@ var DEFAULT_TYPE_LABELS = [
|
|
|
30532
30462
|
];
|
|
30533
30463
|
var DEFAULT_WORKFLOW_NAME2 = "sync-labels";
|
|
30534
30464
|
var LABELS_CONFIG_PATH = ".github/labels.yml";
|
|
30465
|
+
var MAX_LABEL_DESCRIPTION_LENGTH = 100;
|
|
30535
30466
|
function addSyncLabelsWorkflow(project, options) {
|
|
30536
30467
|
const workflowName = options.workflowName ?? DEFAULT_WORKFLOW_NAME2;
|
|
30537
30468
|
const deleteOtherLabels = options.deleteOtherLabels ?? true;
|
|
@@ -30554,6 +30485,18 @@ function addSyncLabelsWorkflow(project, options) {
|
|
|
30554
30485
|
labelMap.set(label.name, label);
|
|
30555
30486
|
}
|
|
30556
30487
|
const allLabels = [...labelMap.values()];
|
|
30488
|
+
const overlength = allLabels.filter(
|
|
30489
|
+
(l) => (l.description ?? "").length > MAX_LABEL_DESCRIPTION_LENGTH
|
|
30490
|
+
);
|
|
30491
|
+
if (overlength.length > 0) {
|
|
30492
|
+
const offenders = overlength.map(
|
|
30493
|
+
(l) => ` - ${l.name} (${(l.description ?? "").length} chars): ${l.description}`
|
|
30494
|
+
).join("\n");
|
|
30495
|
+
throw new Error(
|
|
30496
|
+
`The following label descriptions exceed GitHub's ${MAX_LABEL_DESCRIPTION_LENGTH}-char limit and would break the sync-labels workflow:
|
|
30497
|
+
${offenders}`
|
|
30498
|
+
);
|
|
30499
|
+
}
|
|
30557
30500
|
new LabelsFile(project, allLabels);
|
|
30558
30501
|
const workflow = project.github?.addWorkflow(workflowName);
|
|
30559
30502
|
if (!workflow) {
|
|
@@ -32129,11 +32072,15 @@ var TypeScriptConfig = class extends import_projen23.Component {
|
|
|
32129
32072
|
AGENT_RULE_SCOPE,
|
|
32130
32073
|
AGENT_TIER_ROLES,
|
|
32131
32074
|
AGENT_TIER_VALUES,
|
|
32075
|
+
AUDIT_CATEGORY_ORDER,
|
|
32132
32076
|
AgentConfig,
|
|
32133
32077
|
ApiExtractor,
|
|
32134
32078
|
AstroConfig,
|
|
32135
32079
|
AstroOutput,
|
|
32136
32080
|
AstroProject,
|
|
32081
|
+
AuditCategory,
|
|
32082
|
+
AuditMode,
|
|
32083
|
+
AuditSeverity,
|
|
32137
32084
|
AwsCdkProject,
|
|
32138
32085
|
AwsDeployWorkflow,
|
|
32139
32086
|
AwsDeploymentConfig,
|
|
@@ -32149,6 +32096,7 @@ var TypeScriptConfig = class extends import_projen23.Component {
|
|
|
32149
32096
|
DEFAULT_API_EXTRACTOR_ENTRY_POINT,
|
|
32150
32097
|
DEFAULT_API_EXTRACTOR_REPORT_FILENAME,
|
|
32151
32098
|
DEFAULT_API_EXTRACTOR_REPORT_FOLDER,
|
|
32099
|
+
DEFAULT_AUDIT_REPORT_DIR,
|
|
32152
32100
|
DEFAULT_DECOMPOSITION_TEMPLATE,
|
|
32153
32101
|
DEFAULT_DELEGATE_TO_PR_REVIEWER,
|
|
32154
32102
|
DEFAULT_DISPATCH_MODEL,
|
|
@@ -32190,15 +32138,11 @@ var TypeScriptConfig = class extends import_projen23.Component {
|
|
|
32190
32138
|
DEFAULT_TYPE_LABELS,
|
|
32191
32139
|
DEFAULT_UNBLOCK_COMMENT_TEMPLATE,
|
|
32192
32140
|
DEFAULT_UNBLOCK_DEPENDENTS_ENABLED,
|
|
32193
|
-
|
|
32194
|
-
DEFAULT_WORKFLOW_DIAGRAMS_EMIT_CHECKER,
|
|
32195
|
-
DEFAULT_WORKFLOW_DIAGRAMS_EMIT_STARTER,
|
|
32196
|
-
DEFAULT_WORKFLOW_DIAGRAMS_ENABLED,
|
|
32197
|
-
DEFAULT_WORKFLOW_DIAGRAMS_PATH,
|
|
32198
|
-
DEFAULT_WORKFLOW_DIAGRAMS_REQUIRE_UPDATE,
|
|
32141
|
+
DOCS_SYNC_AUDIT_SCHEMA_VERSION,
|
|
32199
32142
|
JsiiFaker,
|
|
32200
32143
|
LAYOUT_ENFORCEMENT,
|
|
32201
32144
|
LAYOUT_ROOT_BY_PROJECT_TYPE,
|
|
32145
|
+
MAX_LABEL_DESCRIPTION_LENGTH,
|
|
32202
32146
|
MCP_TRANSPORT,
|
|
32203
32147
|
MERGE_METHODS,
|
|
32204
32148
|
MIMIMUM_RELEASE_AGE,
|
|
@@ -32237,6 +32181,7 @@ var TypeScriptConfig = class extends import_projen23.Component {
|
|
|
32237
32181
|
addSyncLabelsWorkflow,
|
|
32238
32182
|
agendaBundle,
|
|
32239
32183
|
analyzeTsDocCoverage,
|
|
32184
|
+
auditReportJsonSchema,
|
|
32240
32185
|
awsCdkBundle,
|
|
32241
32186
|
baseBundle,
|
|
32242
32187
|
bcmWriterBundle,
|
|
@@ -32253,6 +32198,7 @@ var TypeScriptConfig = class extends import_projen23.Component {
|
|
|
32253
32198
|
buildOrchestratorConventionsContent,
|
|
32254
32199
|
buildPeopleProfileBundle,
|
|
32255
32200
|
buildRegulatoryResearchBundle,
|
|
32201
|
+
buildReport,
|
|
32256
32202
|
buildRequirementsAnalystBundle,
|
|
32257
32203
|
buildRequirementsReviewerBundle,
|
|
32258
32204
|
buildRequirementsWriterBundle,
|
|
@@ -32269,6 +32215,7 @@ var TypeScriptConfig = class extends import_projen23.Component {
|
|
|
32269
32215
|
compileFencedSamples,
|
|
32270
32216
|
customerProfileBundle,
|
|
32271
32217
|
docsSyncBundle,
|
|
32218
|
+
emptyCategoryBuckets,
|
|
32272
32219
|
extractApiProcedure,
|
|
32273
32220
|
extractDocReferences,
|
|
32274
32221
|
extractFencedSamples,
|
|
@@ -32282,6 +32229,7 @@ var TypeScriptConfig = class extends import_projen23.Component {
|
|
|
32282
32229
|
meetingAnalysisBundle,
|
|
32283
32230
|
orchestratorBundle,
|
|
32284
32231
|
peopleProfileBundle,
|
|
32232
|
+
persistAuditReport,
|
|
32285
32233
|
pnpmBundle,
|
|
32286
32234
|
prReviewBundle,
|
|
32287
32235
|
projenBundle,
|
|
@@ -32321,10 +32269,6 @@ var TypeScriptConfig = class extends import_projen23.Component {
|
|
|
32321
32269
|
renderSourceTierExamples,
|
|
32322
32270
|
renderUnblockDependentsScript,
|
|
32323
32271
|
renderUnblockDependentsSection,
|
|
32324
|
-
renderWorkflowDiagramsBundleHook,
|
|
32325
|
-
renderWorkflowDiagramsCheckerScript,
|
|
32326
|
-
renderWorkflowDiagramsRuleContent,
|
|
32327
|
-
renderWorkflowDiagramsStarterPage,
|
|
32328
32272
|
requirementsAnalystBundle,
|
|
32329
32273
|
requirementsReviewerBundle,
|
|
32330
32274
|
requirementsWriterBundle,
|
|
@@ -32347,7 +32291,7 @@ var TypeScriptConfig = class extends import_projen23.Component {
|
|
|
32347
32291
|
resolveTemplateVariables,
|
|
32348
32292
|
resolveTypeScriptProjectOutdir,
|
|
32349
32293
|
resolveUnblockDependents,
|
|
32350
|
-
|
|
32294
|
+
runScan,
|
|
32351
32295
|
slackBundle,
|
|
32352
32296
|
softwareProfileBundle,
|
|
32353
32297
|
standardsResearchBundle,
|
|
@@ -32365,7 +32309,6 @@ var TypeScriptConfig = class extends import_projen23.Component {
|
|
|
32365
32309
|
validateSkillEvalsConfig,
|
|
32366
32310
|
validateStarlightSingleton,
|
|
32367
32311
|
validateUnblockDependentsConfig,
|
|
32368
|
-
validateWorkflowDiagramsConfig,
|
|
32369
32312
|
vitestBundle
|
|
32370
32313
|
});
|
|
32371
32314
|
//# sourceMappingURL=index.js.map
|