@codedrifters/configulator 0.0.391 → 0.0.393

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 CHANGED
@@ -5091,16 +5091,44 @@ declare const DEFAULT_SOURCES_THRESHOLDS: ScopeGateThresholds;
5091
5091
  * identical `ac=9 / src=2` dimensions, so the template's shape
5092
5092
  * itself is what trips the global cap. Cap: `mediumMax: 12` on
5093
5093
  * the AC axis (max observed 9 + ~3 headroom); sources unchanged.
5094
+ * - `research:scope` — the `research-analyst` Phase-1 scope phase
5095
+ * decomposes a research question and writes a single scope file
5096
+ * whose ACs are the per-section content checklist for that one
5097
+ * deliverable (question decomposition, per-slice briefs, and the
5098
+ * acceptance criteria for the final deliverable), not a phase-
5099
+ * completion checklist that can be decomposed. Sibling of
5100
+ * `research:verify` in the same pipeline; observed ac=7
5101
+ * (`codedrifters/openhi-planning`#6034). Cap: `mediumMax: 12` on
5102
+ * the AC axis (matching the `research:verify` sibling); sources
5103
+ * unchanged.
5094
5104
  * - `software:profile` — software-product profile pages enumerate
5095
5105
  * per-section content invariants (overview, vendor, integrations,
5096
5106
  * pricing, security posture, …). Max observed 11 ACs in the same
5097
5107
  * openhi-planning sample; cap: `mediumMax: 14` on the AC axis
5098
5108
  * (max observed + 3 headroom); sources unchanged.
5109
+ * - `software:research` — the `software-profile` Phase-1 research
5110
+ * phase gathers public sources and writes a single bounded
5111
+ * research-notes file whose ACs are the per-section content
5112
+ * checklist for that one deliverable, not a decomposable plan.
5113
+ * Sibling of `software:profile` in the same pipeline; observed
5114
+ * ac=8 (`codedrifters/openhi-planning`#6259). Cap: `mediumMax: 14`
5115
+ * on the AC axis (matching the `software:profile` sibling);
5116
+ * sources unchanged.
5099
5117
  * - `regulatory:research` — single regulation pages carry per-
5100
5118
  * section ACs covering jurisdiction, scope, obligations,
5101
5119
  * penalties, and effective dates. Single-document conformance
5102
5120
  * scans run ac=11; cap: `mediumMax: 12` on the AC axis;
5103
5121
  * sources unchanged.
5122
+ * - `regulatory:impact` — the `regulatory-research` Phase-3 impact
5123
+ * phase is synthesis-only (no web searches): it appends a single
5124
+ * `## Impact` section to the regulation page — product-impact
5125
+ * assessment, capability-gap enumeration, and obligation hand-offs
5126
+ * — whose ACs are the per-section content checklist for that one
5127
+ * document section. Sibling of `regulatory:research`; observed
5128
+ * ac=9 (`codedrifters/openhi-planning`#3505). Cap: `mediumMax: 10`
5129
+ * on the AC axis (observed max 9 + headroom; the tighter cap
5130
+ * versus the research sibling's 12 reflects the narrower
5131
+ * single-section deliverable); sources unchanged.
5104
5132
  * - `standards:research` — single standard-version research notes
5105
5133
  * enumerate one cohesive deliverable across per-section ACs
5106
5134
  * (candidate encodings, reconciliation, storage/query analysis,
package/lib/index.d.ts CHANGED
@@ -5140,16 +5140,44 @@ declare const DEFAULT_SOURCES_THRESHOLDS: ScopeGateThresholds;
5140
5140
  * identical `ac=9 / src=2` dimensions, so the template's shape
5141
5141
  * itself is what trips the global cap. Cap: `mediumMax: 12` on
5142
5142
  * the AC axis (max observed 9 + ~3 headroom); sources unchanged.
5143
+ * - `research:scope` — the `research-analyst` Phase-1 scope phase
5144
+ * decomposes a research question and writes a single scope file
5145
+ * whose ACs are the per-section content checklist for that one
5146
+ * deliverable (question decomposition, per-slice briefs, and the
5147
+ * acceptance criteria for the final deliverable), not a phase-
5148
+ * completion checklist that can be decomposed. Sibling of
5149
+ * `research:verify` in the same pipeline; observed ac=7
5150
+ * (`codedrifters/openhi-planning`#6034). Cap: `mediumMax: 12` on
5151
+ * the AC axis (matching the `research:verify` sibling); sources
5152
+ * unchanged.
5143
5153
  * - `software:profile` — software-product profile pages enumerate
5144
5154
  * per-section content invariants (overview, vendor, integrations,
5145
5155
  * pricing, security posture, …). Max observed 11 ACs in the same
5146
5156
  * openhi-planning sample; cap: `mediumMax: 14` on the AC axis
5147
5157
  * (max observed + 3 headroom); sources unchanged.
5158
+ * - `software:research` — the `software-profile` Phase-1 research
5159
+ * phase gathers public sources and writes a single bounded
5160
+ * research-notes file whose ACs are the per-section content
5161
+ * checklist for that one deliverable, not a decomposable plan.
5162
+ * Sibling of `software:profile` in the same pipeline; observed
5163
+ * ac=8 (`codedrifters/openhi-planning`#6259). Cap: `mediumMax: 14`
5164
+ * on the AC axis (matching the `software:profile` sibling);
5165
+ * sources unchanged.
5148
5166
  * - `regulatory:research` — single regulation pages carry per-
5149
5167
  * section ACs covering jurisdiction, scope, obligations,
5150
5168
  * penalties, and effective dates. Single-document conformance
5151
5169
  * scans run ac=11; cap: `mediumMax: 12` on the AC axis;
5152
5170
  * sources unchanged.
5171
+ * - `regulatory:impact` — the `regulatory-research` Phase-3 impact
5172
+ * phase is synthesis-only (no web searches): it appends a single
5173
+ * `## Impact` section to the regulation page — product-impact
5174
+ * assessment, capability-gap enumeration, and obligation hand-offs
5175
+ * — whose ACs are the per-section content checklist for that one
5176
+ * document section. Sibling of `regulatory:research`; observed
5177
+ * ac=9 (`codedrifters/openhi-planning`#3505). Cap: `mediumMax: 10`
5178
+ * on the AC axis (observed max 9 + headroom; the tighter cap
5179
+ * versus the research sibling's 12 reflects the narrower
5180
+ * single-section deliverable); sources unchanged.
5153
5181
  * - `standards:research` — single standard-version research notes
5154
5182
  * enumerate one cohesive deliverable across per-section ACs
5155
5183
  * (candidate encodings, reconciliation, storage/query analysis,
package/lib/index.js CHANGED
@@ -14213,12 +14213,21 @@ var DEFAULT_BUNDLE_OVERRIDES = {
14213
14213
  "research:verify": {
14214
14214
  acceptanceCriteria: { smallMax: 3, mediumMax: 12 }
14215
14215
  },
14216
+ "research:scope": {
14217
+ acceptanceCriteria: { smallMax: 3, mediumMax: 12 }
14218
+ },
14216
14219
  "software:profile": {
14217
14220
  acceptanceCriteria: { smallMax: 3, mediumMax: 14 }
14218
14221
  },
14222
+ "software:research": {
14223
+ acceptanceCriteria: { smallMax: 3, mediumMax: 14 }
14224
+ },
14219
14225
  "regulatory:research": {
14220
14226
  acceptanceCriteria: { smallMax: 3, mediumMax: 12 }
14221
14227
  },
14228
+ "regulatory:impact": {
14229
+ acceptanceCriteria: { smallMax: 3, mediumMax: 10 }
14230
+ },
14222
14231
  "standards:research": {
14223
14232
  acceptanceCriteria: { smallMax: 3, mediumMax: 10 }
14224
14233
  },
@@ -15024,8 +15033,9 @@ function renderUnblockDependentsSection(ud) {
15024
15033
  "",
15025
15034
  "1. Searches open issues for `Depends on: #<closed>` references in",
15026
15035
  " their body.",
15027
- "2. For each match, re-reads every dependency listed in the",
15028
- " `Depends on:` line and checks whether they are all closed.",
15036
+ "2. For each match, re-reads every dependency listed across",
15037
+ " **all** `Depends on:` lines in the body (bodies routinely list",
15038
+ " one dependency per line) and checks whether they are all closed.",
15029
15039
  "3. If **all** dependencies are closed, flips the dependent from",
15030
15040
  " `status:blocked` to `status:ready` and posts a one-line comment",
15031
15041
  " citing the resolving issue.",
@@ -15164,14 +15174,17 @@ function renderUnblockDependentsScript(ud) {
15164
15174
  "",
15165
15175
  "# \u2500\u2500 helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",
15166
15176
  "",
15167
- '# Extract issue numbers from a "Depends on:" line.',
15168
- '# Returns space-separated numbers, or empty string for "(none)".',
15177
+ '# Extract issue numbers from a "Depends on:" text. The argument may be a',
15178
+ '# single line ("Depends on: #1, #2, #3") OR several Depends-on lines',
15179
+ "# joined into one string: bodies routinely list one dependency per line",
15180
+ "# (issue #881), so callers union every matching line before calling this.",
15181
+ "# Returns the space-separated union of every #<n> reference, or an empty",
15182
+ '# string when the text has no concrete references (e.g. a lone "(none)"',
15183
+ '# sentinel). References are extracted directly, so a stray "(none)"',
15184
+ "# concatenated with a real dep line never suppresses the real dependency",
15185
+ "# \u2014 only reference-free text counts as having no dependencies.",
15169
15186
  "parse_deps() {",
15170
15187
  ' local line="$1"',
15171
- ` if echo "$line" | grep -qi '(none)'; then`,
15172
- ' echo ""',
15173
- " return",
15174
- " fi",
15175
15188
  ` echo "$line" | grep -oE '#[0-9]+' | tr -d '#' | tr '\\n' ' ' || echo ""`,
15176
15189
  "}",
15177
15190
  "",
@@ -15228,11 +15241,12 @@ function renderUnblockDependentsScript(ud) {
15228
15241
  " exit 0",
15229
15242
  "fi",
15230
15243
  "",
15231
- "# Extract the `Depends on:` line per candidate and stream as",
15232
- "# tab-separated number / title / dep-line tuples.",
15244
+ "# Union every `Depends on:` line per candidate (a body may list one",
15245
+ "# dependency per line) into a single space-joined dep string and stream",
15246
+ "# as tab-separated number / title / dep-line tuples.",
15233
15247
  `matches=$(echo "$dependents" | jq -r '`,
15234
15248
  " .[] |",
15235
- ' (.body | split("\\n") | map(select(test("Depends on:"; "i"))) | .[0] // "") as $dep_line |',
15249
+ ' (.body | split("\\n") | map(select(test("Depends on:"; "i"))) | join(" ")) as $dep_line |',
15236
15250
  ' "\\(.number)\\t\\(.title)\\t\\($dep_line)"',
15237
15251
  "')",
15238
15252
  "",
@@ -15404,14 +15418,17 @@ function buildCheckBlockedScript(tiers, scopeGate, _runRatio) {
15404
15418
  "",
15405
15419
  "# \u2500\u2500 helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",
15406
15420
  "",
15407
- '# Extract issue numbers from a "Depends on:" line.',
15408
- '# Returns space-separated numbers, or empty string for "(none)".',
15421
+ '# Extract issue numbers from a "Depends on:" text. The argument may be a',
15422
+ '# single line ("Depends on: #1, #2, #3") OR several Depends-on lines',
15423
+ "# joined into one string: bodies routinely list one dependency per line",
15424
+ "# (issue #881), so callers union every matching line before calling this.",
15425
+ "# Returns the space-separated union of every #<n> reference, or an empty",
15426
+ '# string when the text has no concrete references (e.g. a lone "(none)"',
15427
+ '# sentinel). References are extracted directly, so a stray "(none)"',
15428
+ "# concatenated with a real dep line never suppresses the real dependency",
15429
+ "# \u2014 only reference-free text counts as having no dependencies.",
15409
15430
  "parse_deps() {",
15410
15431
  ' local line="$1"',
15411
- ` if echo "$line" | grep -qi '(none)'; then`,
15412
- ' echo ""',
15413
- " return",
15414
- " fi",
15415
15432
  ` echo "$line" | grep -oE '#[0-9]+' | tr -d '#' | tr '\\n' ' ' || echo ""`,
15416
15433
  "}",
15417
15434
  "",
@@ -15459,7 +15476,7 @@ function buildCheckBlockedScript(tiers, scopeGate, _runRatio) {
15459
15476
  " local issue_data",
15460
15477
  ` issue_data=$(echo "$issues" | jq -r '`,
15461
15478
  " .[] |",
15462
- ' (.body | split("\\n") | map(select(test("Depends on:"; "i"))) | .[0] // "") as $dep_line |',
15479
+ ' (.body | split("\\n") | map(select(test("Depends on:"; "i"))) | join(" ")) as $dep_line |',
15463
15480
  ' "\\(.number)\\t\\($dep_line)"',
15464
15481
  " ')",
15465
15482
  "",
@@ -15559,7 +15576,7 @@ function buildCheckBlockedScript(tiers, scopeGate, _runRatio) {
15559
15576
  " local issue_data",
15560
15577
  ` issue_data=$(echo "$issues" | jq -r '`,
15561
15578
  " .[] |",
15562
- ' (.body | split("\\n") | map(select(test("Depends on:"; "i"))) | .[0] // "") as $dep_line |',
15579
+ ' (.body | split("\\n") | map(select(test("Depends on:"; "i"))) | join(" ")) as $dep_line |',
15563
15580
  ' (.labels | map(.name) | map(select(startswith("type:"))) | .[0] // "") as $type_label |',
15564
15581
  ' "\\(.number)\\t\\(.title)\\t\\($type_label)\\t\\($dep_line)"',
15565
15582
  " ')",
@@ -15664,7 +15681,7 @@ function buildCheckBlockedScript(tiers, scopeGate, _runRatio) {
15664
15681
  " local bl_data",
15665
15682
  ` bl_data=$(echo "$bl_issues" | jq -r '`,
15666
15683
  " .[] |",
15667
- ' (.body | split("\\n") | map(select(test("Depends on:"; "i"))) | .[0] // "") as $dep_line |',
15684
+ ' (.body | split("\\n") | map(select(test("Depends on:"; "i"))) | join(" ")) as $dep_line |',
15668
15685
  ' "\\(.number)\\t\\(.title)\\t\\(.updatedAt)\\t\\($dep_line)"',
15669
15686
  " ')",
15670
15687
  "",