You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 77adf29
Browse filesBrowse the repository at this point in the historyBrowse files
@@ -99,7 +99,7 @@ single-repository project work with no configuration at all.
99
99
|`repos`|`string[]`|`[backlogRepo]`| Every repository work may land in. Used for label setup and for validating routing labels. |
100
100
|`batch`|`number`|`3`| Maximum developer agents in flight at once. |
101
101
|`mode`|`"subagent" \| "cloud"`|`"subagent"`| Dispatch backend — see [Dispatch backends](#dispatch-backends). |
102
-
|`conventionsFile`|`string`| first existing of `AGENTS.md`, `CLAUDE.md`, `CONTRIBUTING.md`| Repository-relative path to the file that defines gates, branch rules, release-note artifacts and review policy. Injected by path into every dispatch. |
102
+
|`conventionsFile`|`string`| first existing of `AGENTS.md`, `CLAUDE.md`, `CONTRIBUTING.md`| Repository-relative path to the file that defines gates, branch rules, release-note artifacts, review policy and the capability-expansion stance. Injected by path into every dispatch. |
103
103
|`routingLabelPrefix`|`string`|`"repo:"`| Prefix of the labels that route an issue to a non-default repository, e.g. `repo:hotcrm-web`. Inert when `repos` has one entry. |
104
104
105
105
**Unknown keys are an error, not a hint.** If the file contains a key not in
@@ -182,7 +182,7 @@ classify each:
182
182
-**Maintainer confirm (`needs-user-decision`)** — design cards, feature or
183
183
contract-shape proposals, multi-week programs needing appetite and
184
184
sequencing, anything touching stored-data migration shape or removing a
185
-
shipped capability. The label alone is the inbox entry; the deep two-axis
185
+
shipped capability. The label alone is the inbox entry; the deep three-axis
186
186
analysis is written when the card is actually taken up.
187
187
-**Repair first** — a body truncated by GitHub's sanitizer cannot be
188
188
dispatched. Comment the repair instruction and move on.
@@ -449,23 +449,44 @@ When something *does* pass the bar:
449
449
no issue of its own.
450
450
2. Write the analysis with: background, the precise question, the options, your
451
451
recommendation, and the related issues / PRs / branches — **and analyze
452
-
every option on the two fixed axes below.**
452
+
every option on the three fixed axes below.**
453
453
3. If the session is interactive, additionally ask the maintainer directly; the
454
454
labeled issue remains the durable record either way. **Never** answer a
455
455
product or architecture question on the maintainer's behalf.
456
456
457
-
#### The two-axis decision frame (binding)
458
-
459
-
Every option in an escalation is analyzed on **both** axes. This framing is the
460
-
core of the escalation, not decoration.
461
-
462
-
**Axis ① — long-term architectural soundness for *this* project.** Which option
457
+
#### The three-axis decision frame (binding)
458
+
459
+
Every option in an escalation is analyzed on **all three** axes. This framing is
460
+
the core of the escalation, not decoration.
461
+
462
+
**Axis ① — real business need.** Does this option serve a business scenario that
463
+
**actually exists**, or a speculative capability surface? Ask it of every option
464
+
*first*, before the architecture argument, because it can retire the question
465
+
instead of answering it. The evidence must be **measured, not inferred**: who
466
+
writes this key, who reads this capability, how the project's example apps and
467
+
real deployments use it today. "It reads like it would be useful" does not
468
+
count — and neither does "we already shipped it": a **shipped-but-unconsumed
469
+
capability gets no sunk-cost exemption**. A declared surface with no pull is
470
+
handled **implementation-first** — narrow the declaration until
471
+
`declared = enforced` (retire it, or park the vocabulary and let it return with
472
+
the implementation) rather than building implementation to justify a declaration
473
+
nobody asked for. **How tight that default should be is your project's call, not
474
+
this skill's:** declare the capability-expansion stance in your conventions file —
475
+
tight while the core surface is still forming, more permissive once it is
476
+
stable — and this axis reads it from there, like every other project-specific
477
+
rule. This axis **changes verdicts** rather than decorating them: two findings
478
+
of identical technical shape can be ruled opposite ways on it alone — one
479
+
declared surface retired for lack of pull, another kept and made to *reject
480
+
loudly* because a real app proved the direction. On the other two axes they
481
+
would read the same, and that would be the wrong answer.
482
+
483
+
**Axis ② — long-term architectural soundness for *this* project.** Which option
463
484
matches where the project is going and a sustainable architecture — no
464
485
workarounds, contract-first — rather than which is cheapest today. **Name the
465
486
long-term cost of any patch-style option explicitly.** "We can special-case it
466
487
here" is a valid option only when its future removal cost is stated.
467
488
468
-
**Axis ② — making AI-authored code structurally hard to get wrong**, and
489
+
**Axis ③ — making AI-authored code structurally hard to get wrong**, and
469
490
especially AI-authored ObjectStack **metadata**. Prefer the option that
470
491
prevents the mistake at authoring time — a strict schema, publish-time
471
492
validation that rejects loudly, declared = enforced — over consumer-side
@@ -475,7 +496,7 @@ reader turns a whole generation of wrong metadata into something that "works"
475
496
until it does not. Never let an agent declare a capability the runtime does not
476
497
honour.
477
498
478
-
Your recommendation must be justified on **both** axes. If they conflict,
499
+
Your recommendation must be justified on **all three** axes. If they conflict,
479
500
present the trade-off honestly and let the maintainer decide.
480
501
481
502
### 9. Round report, then next round
@@ -571,7 +592,17 @@ or two readings of the issue lead to different architectures: make no guess,
571
592
write no speculative code. Return status "needs_decision" with each question,
572
593
the options, their costs, and your recommendation in open_questions. A wrong
573
594
guess shipped is far more expensive than a round-trip to the maintainer.
574
-
Analyze every option on two fixed axes:
595
+
Analyze every option on three fixed axes:
596
+
- Real business need — does the option serve a business scenario that ACTUALLY
597
+
EXISTS, or a speculative capability surface? Ask this first. The evidence must
598
+
be MEASURED, not inferred: who writes this key, who reads this capability, how
599
+
the project's example apps and real deployments use it today. "It reads like it
600
+
would be useful" does not count, and a shipped-but-unconsumed capability gets
601
+
no sunk-cost exemption. A declared surface with no pull is handled
602
+
implementation-first — narrow the declaration until declared = enforced
603
+
(retire it, or park the vocabulary until the implementation arrives) rather
604
+
than building implementation to justify the declaration. How tight the default
605
+
is comes from the project's conventions file, not from this template.
575
606
- Long-term architectural soundness for THIS project — which option matches a
576
607
sustainable architecture (no workarounds, contract-first), not which is
577
608
cheapest today. Name the long-term cost of any patch-style option.
@@ -580,7 +611,7 @@ Analyze every option on two fixed axes:
580
611
publish-time validation that rejects loudly, declared = enforced) over
581
612
consumer-side tolerance. Lenient consumers are where AI-generated errors hide
582
613
and multiply.
583
-
Justify your recommendation on both axes; if they conflict, present the
614
+
Justify your recommendation on all three axes; if they conflict, present the
584
615
trade-off and let the maintainer decide.
585
616
586
617
Return "blocked" (with evidence) when the default branch is broken under you, a
@@ -799,6 +830,7 @@ them into every dispatch:
799
830
| Files owned by a release process that a code PR must never touch | conventions file |
800
831
| Test / typecheck / lint commands per package | conventions file |
0 commit comments