@gobing-ai/spur 0.3.80 → 0.3.81
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/.claude-plugin/marketplace.json +1 -1
- package/config/config.example.yaml +29 -18
- package/config/config.global.yaml +10 -11
- package/config/pipeline-budgets.json +34 -2
- package/config/plugin-scripts.json +25 -0
- package/config/rules/boundary/config-loading-ownership.yaml +0 -3
- package/config/rules/boundary/dao-boundary.yaml +4 -17
- package/config/rules/boundary/planning-folder-hardcode.yaml +0 -1
- package/config/rules/boundary/sp-no-vendor-refs.yaml +3 -2
- package/config/rules/boundary/sp-runtime-path.yaml +3 -14
- package/config/rules/quality/coverage-gate.yaml +3 -14
- package/config/rules/quality/tsdoc-exports.yaml +4 -7
- package/config/rules/strict/http-boundaries.yaml +5 -8
- package/config/rules/strict/runtime-boundaries.yaml +1 -5
- package/config/rules/structure/protected-files.yaml +9 -3
- package/config/rules/structure/test-focus-skip.yaml +0 -2
- package/config/rules/structure/test-location.yaml +0 -5
- package/config/rules/surface/check-cli-surface.yaml +3 -2
- package/config/rules/typescript/bun-tooling.yaml +5 -7
- package/config/rules/typescript/guarded-happy-dom-register.yaml +0 -2
- package/config/rules/typescript/happy-dom-teardown.yaml +0 -2
- package/config/rules/typescript/no-biome-suppressions.yaml +0 -2
- package/config/rules/typescript/no-debugger.yaml +0 -2
- package/config/rules/typescript/no-eslint-suppressions.yaml +0 -4
- package/config/rules/typescript/no-leaky-module-mocks.yaml +6 -13
- package/config/rules/typescript/no-module-scope-import-calls.yaml +0 -2
- package/config/rules/typescript/no-syscall-emulation-in-boundary-mock.yaml +0 -3
- package/config/rules/typescript/no-unmocked-module-eval-side-effects.yaml +0 -3
- package/config/rules/typescript/output-boundaries.yaml +0 -3
- package/config/rules/typescript/prefer-accessible-role-for-button-queries.yaml +0 -3
- package/config/rules/ui/ui-import-boundary.yaml +1 -5
- package/config/transition-shims.json +7 -7
- package/config/workflows/basic.yaml +4 -0
- package/config/workflows/docs-pipeline.yaml +13 -14
- package/config/workflows/feature-dev.yaml +20 -65
- package/config/workflows/history-anatomy.yaml +22 -1
- package/config/workflows/idea-pipeline.yaml +53 -97
- package/config/workflows/pr-review.yaml +21 -33
- package/config/workflows/task-pipeline.yaml +87 -330
- package/config/workflows/wayfinder-resolution.yaml +12 -26
- package/config/workflows/wrapup-pipeline.yaml +48 -189
- package/package.json +9 -9
- package/plugins/sp/README.md +10 -1
- package/plugins/sp/agents/expert-spur.md +41 -19
- package/plugins/sp/lib/idea-handoff.generated.d.mts +17 -0
- package/plugins/sp/lib/idea-handoff.generated.mjs +1301 -0
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/scripts/feature-dev-precheck.mjs +146 -0
- package/plugins/sp/scripts/feature-dev-precheck.ts +238 -0
- package/plugins/sp/scripts/idea-handoff.mjs +27 -0
- package/plugins/sp/scripts/idea-handoff.ts +44 -0
- package/plugins/sp/scripts/quality-gate.mjs +165 -0
- package/plugins/sp/scripts/quality-gate.ts +217 -0
- package/plugins/sp/scripts/workflow-step-profile.mjs +319 -0
- package/plugins/sp/scripts/workflow-step-profile.ts +456 -0
- package/plugins/sp/scripts/wrapup-steps.mjs +350 -0
- package/plugins/sp/scripts/wrapup-steps.ts +466 -0
- package/plugins/sp/skills/parallel-execution/references/dispatch-surface.md +1 -1
- package/plugins/sp/skills/spec-decomposition/references/decomposition.md +29 -0
- package/plugins/sp/skills/spur-cli/references/agent.md +56 -14
- package/plugins/sp/skills/spur-cli/references/message.md +30 -3
- package/plugins/sp/skills/spur-cli/references/projects.md +45 -1
- package/plugins/sp/skills/spur-cli/references/self.md +5 -4
- package/plugins/sp/skills/spur-cli/references/serve.md +5 -4
- package/plugins/sp/skills/spur-cli/references/tasks.md +1 -1
- package/plugins/sp/skills/spur-cli/references/team.md +21 -1
- package/plugins/sp/skills/spur-cli/references/workflows/operations.md +6 -3
- package/plugins/sp/skills/spur-cli/references/workflows/workflow-fit-and-tuning.md +57 -18
- package/plugins/sp/skills/spur-composer/SKILL.md +145 -0
- package/plugins/sp/skills/spur-dev/references/planning-workflow.md +24 -0
- package/plugins/sp/skills/spur-doctor/SKILL.md +138 -0
- package/plugins/sp/skills/taste-refactoring-api/README.md +43 -0
- package/plugins/sp/skills/taste-refactoring-api/SKILL.md +334 -0
- package/plugins/sp/skills/taste-refactoring-api/checklists/daily-api-review.md +71 -0
- package/plugins/sp/skills/taste-refactoring-api/examples/refactor-example.md +72 -0
- package/plugins/sp/skills/taste-refactoring-api/examples/review-template.md +93 -0
- package/plugins/sp/skills/taste-refactoring-api/references/api-refactoring-playbook.md +253 -0
- package/plugins/sp/skills/taste-refactoring-api/references/protocol-modes.md +79 -0
- package/plugins/sp/skills/taste-refactoring-api/references/research-basis.md +58 -0
- package/plugins/sp/skills/taste-refactoring-architect/README.md +26 -0
- package/plugins/sp/skills/taste-refactoring-architect/SKILL.md +471 -0
- package/plugins/sp/skills/taste-refactoring-architect/checklists/daily-architecture-review.md +48 -0
- package/plugins/sp/skills/taste-refactoring-architect/examples/refactor-example.md +55 -0
- package/plugins/sp/skills/taste-refactoring-architect/examples/review-template.md +51 -0
- package/plugins/sp/skills/taste-refactoring-architect/references/architecture-refactoring-playbook.md +173 -0
- package/plugins/sp/skills/taste-refactoring-architect/references/research-basis.md +28 -0
- package/plugins/sp/skills/taste-refactoring-tests/README.md +28 -0
- package/plugins/sp/skills/taste-refactoring-tests/SKILL.md +482 -0
- package/plugins/sp/skills/taste-refactoring-tests/checklists/daily-test-review.md +39 -0
- package/plugins/sp/skills/taste-refactoring-tests/examples/refactor-example.md +85 -0
- package/plugins/sp/skills/taste-refactoring-tests/examples/review-template.md +59 -0
- package/plugins/sp/skills/taste-refactoring-tests/references/research-basis.md +47 -0
- package/plugins/sp/skills/taste-refactoring-tests/references/test-refactoring-playbook.md +222 -0
- package/plugins/sp/skills/taste-refactoring-ui/README.md +12 -0
- package/plugins/sp/skills/taste-refactoring-ui/SKILL.md +290 -0
- package/plugins/sp/skills/taste-refactoring-ui/checklists/daily-ui-review.md +72 -0
- package/plugins/sp/skills/taste-refactoring-ui/examples/review-template.md +51 -0
- package/plugins/sp/skills/taste-refactoring-ui/references/refactoring-ui-playbook.md +170 -0
- package/plugins/sp/skills/wayfinder/SKILL.md +2 -2
- package/plugins/sp/skills/wayfinder/references/pipeline-resolution.md +30 -0
- package/schemas/spur-config.schema.json +49 -0
- package/spur.js +46754 -44121
- package/web/_astro/{BoardApp.CHQ1lycZ.js → BoardApp.B1U26g3I.js} +97 -95
- package/web/_astro/BoardApp.Csgyg-lS.js +1 -0
- package/web/_astro/{TaskDetail.GKfQJ60c.js → TaskDetail.DwPqpq7v.js} +1 -1
- package/web/_astro/{arc.DWEtA3Tx.js → arc.CweZEjN2.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.DB42oWmP.js → architectureDiagram-3BPJPVTR.D89pbDuv.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.rhv-zNQV.js → blockDiagram-GPEHLZMM.BOuTeEpX.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.Ci4-4VvY.js → c4Diagram-AAUBKEIU.CASbkWZF.js} +1 -1
- package/web/_astro/channel.Cx6sXxhq.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.Cc9veUgf.js → chunk-2J33WTMH.BKQYtOvY.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.Bec9c4eI.js → chunk-4BX2VUAB.9sHLdMtG.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.DoV8S1iB.js → chunk-55IACEB6.wOLXWlPs.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.DwR-Qlyj.js → chunk-727SXJPM.DovFbwg3.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.ND_a81WY.js → chunk-AQP2D5EJ.B1Weod1X.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.Wv_jwG48.js → chunk-FMBD7UC4.TEMS04st.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.CXKXCMmp.js → chunk-ND2GUHAM.Cp8VT1wQ.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.nkaoNYQq.js → chunk-QZHKN3VN.BzATdEcP.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.cMQcVlQu.js → classDiagram-4FO5ZUOK.C9BOCfAO.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.cMQcVlQu.js → classDiagram-v2-Q7XG4LA2.C9BOCfAO.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.OaDJ7Mr2.js → cose-bilkent-S5V4N54A.DUnr4UAw.js} +1 -1
- package/web/_astro/{cynefin-OW5HDTMX.Chi8IphF.js → cynefin-OW5HDTMX.rYq5uM3D.js} +1 -1
- package/web/_astro/{cytoscape.esm.DzSz-X2X.js → cytoscape.esm.BB4DxJjf.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.CzK2t_Fp.js → dagre-BM42HDAG.CWeNKe3I.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.DRvxlVS7.js → diagram-2AECGRRQ.DCkfls10.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.CnYvNdwA.js → diagram-5GNKFQAL.D5U4JCka.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.CpLpMw5R.js → diagram-KO2AKTUF.BZJgqaqG.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.JTb78qUA.js → diagram-LMA3HP47.DoMeHvPR.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.Bk-1jDIb.js → diagram-OG6HWLK6.B50qwwWX.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.D8hN9GZq.js → erDiagram-TEJ5UH35.DdGPG6LK.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.-6zQr6m5.js → flowDiagram-I6XJVG4X.QP2MJ12u.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.DboLQ9ca.js → ganttDiagram-6RSMTGT7.BI6LgKSy.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.4tYvJKGR.js → gitGraphDiagram-PVQCEYII.npPZiC2G.js} +1 -1
- package/web/_astro/index.DayyIngm.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.Bd9rXpsB.js → infoDiagram-5YYISTIA.DCJCBVbp.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.CvMoaf67.js → ishikawaDiagram-YF4QCWOH.BMLV-3I1.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.Ccy1CA7y.js → journeyDiagram-JHISSGLW.LE58crde.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.0MaMqHNS.js → kanban-definition-UN3LZRKU.BPbz8rH9.js} +1 -1
- package/web/_astro/{linear.CHXgcIbN.js → linear.DhZaBtYh.js} +1 -1
- package/web/_astro/{mermaid.core.Ca-kcelG.js → mermaid.core.BD5-jXum.js} +6 -6
- package/web/_astro/{mindmap-definition-RKZ34NQL.BUIDlHa0.js → mindmap-definition-RKZ34NQL.MTJyrQ65.js} +1 -1
- package/web/_astro/ordinal.BYWQX77i.js +1 -0
- package/web/_astro/{pieDiagram-4H26LBE5.2dX3CU1s.js → pieDiagram-4H26LBE5.BrDhDvIS.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.B3LBlRiv.js → quadrantDiagram-W4KKPZXB.71d73_5N.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.X12I2uNx.js → requirementDiagram-4Y6WPE33.Bga6UF-z.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.BXohIHqx.js → sankeyDiagram-5OEKKPKP.BnHs4K82.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.C37ZIUzg.js → sequenceDiagram-3UESZ5HK.DsfY2gnj.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.BRgz317z.js → stateDiagram-AJRCARHV.DvsTSc9a.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.7VYSXN9-.js → stateDiagram-v2-BHNVJYJU.DxzzmHUR.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.BVNz_HiN.js → timeline-definition-PNZ67QCA.4ZuQmOTt.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.CHVDkPX4.js → vennDiagram-CIIHVFJN.Ck5Q86SG.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.EQQ_qT9v.js → wardleyDiagram-YWT4CUSO.BK7k2hXr.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.DrAT9WoP.js → xychartDiagram-2RQKCTM6.DfCrgauK.js} +1 -1
- package/web/index.html +2 -2
- package/web/_astro/BoardApp.DV9kx0wo.js +0 -1
- package/web/_astro/channel.BAI6xLeV.js +0 -1
- package/web/_astro/index.Dcr_8fiK.css +0 -1
- package/web/_astro/ordinal.DBvzRdQf.js +0 -1
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# Architecture Refactoring Playbook
|
|
2
|
+
|
|
3
|
+
## 1. Definition of “better”
|
|
4
|
+
A refactored architecture is better when it preserves required business behavior and delivery qualities while decreasing unnecessary complexity, coordination, operational burden, or irreversible commitments.
|
|
5
|
+
|
|
6
|
+
A useful before/after scorecard tracks:
|
|
7
|
+
- runtime components and dependencies,
|
|
8
|
+
- synchronous call depth,
|
|
9
|
+
- deployable units,
|
|
10
|
+
- persistence technologies,
|
|
11
|
+
- duplicated domain rules,
|
|
12
|
+
- cross-team handoffs per representative change,
|
|
13
|
+
- deployment lead time and failure rate,
|
|
14
|
+
- incident frequency/blast radius/recovery time,
|
|
15
|
+
- cost per useful business unit,
|
|
16
|
+
- time for a new engineer to understand/change a critical flow.
|
|
17
|
+
|
|
18
|
+
## 2. Simplification lenses
|
|
19
|
+
|
|
20
|
+
### Capability lens
|
|
21
|
+
Map components to business capabilities. Unmapped components are deletion candidates; multiple components for one capability may be consolidation candidates.
|
|
22
|
+
|
|
23
|
+
### Change-coupling lens
|
|
24
|
+
Inspect which components change together. If independent services are almost always changed/deployed together, the boundary may be false.
|
|
25
|
+
|
|
26
|
+
### Runtime-coupling lens
|
|
27
|
+
Inspect critical request paths. Long synchronous chains multiply latency and failure probability.
|
|
28
|
+
|
|
29
|
+
### Data lens
|
|
30
|
+
Identify sources of truth, replicas, caches, shared writes, synchronization, and reconciliation. Complexity often hides in data movement rather than boxes.
|
|
31
|
+
|
|
32
|
+
### Ownership lens
|
|
33
|
+
Map every component to one accountable team. Misalignment creates coordination tax and unreliable operations.
|
|
34
|
+
|
|
35
|
+
### Failure lens
|
|
36
|
+
For each dependency, ask what happens when it is slow, unavailable, duplicated, reordered, or partially successful.
|
|
37
|
+
|
|
38
|
+
### Quality lens
|
|
39
|
+
Tie each structural decision to a measurable quality requirement. Redundancy, isolation, caching, asynchronous processing, and extra deployment units may all be justified — but only by a requirement.
|
|
40
|
+
|
|
41
|
+
## 3. Complexity budget
|
|
42
|
+
Think of architecture complexity as a budget. Spend it only where it buys a material capability or quality.
|
|
43
|
+
|
|
44
|
+
Common costs:
|
|
45
|
+
- network boundaries,
|
|
46
|
+
- distributed consistency,
|
|
47
|
+
- async semantics,
|
|
48
|
+
- schema evolution,
|
|
49
|
+
- independent deployment pipelines,
|
|
50
|
+
- observability surface,
|
|
51
|
+
- access control surface,
|
|
52
|
+
- operational ownership,
|
|
53
|
+
- version compatibility,
|
|
54
|
+
- data synchronization,
|
|
55
|
+
- incident diagnosis.
|
|
56
|
+
|
|
57
|
+
## 4. Refactoring patterns
|
|
58
|
+
|
|
59
|
+
### Delete
|
|
60
|
+
Remove dead services, queues, adapters, databases, caches, gateways, compatibility layers, feature flags, or pipelines after proving they are unused.
|
|
61
|
+
|
|
62
|
+
### Inline
|
|
63
|
+
Inline a thin service/module that only delegates and has no independent ownership, policy, scaling, security, or lifecycle reason.
|
|
64
|
+
|
|
65
|
+
### Merge
|
|
66
|
+
Merge components with the same owner, lifecycle, data, and change cadence when separation creates more coordination than isolation value.
|
|
67
|
+
|
|
68
|
+
### Modularize in place
|
|
69
|
+
Before extracting services, create explicit module boundaries, ownership, dependency rules, and tests inside the existing deployment unit.
|
|
70
|
+
|
|
71
|
+
### Split by proven axis
|
|
72
|
+
Split only where independence is valuable: ownership, security, scale, failure isolation, data lifecycle, or release cadence.
|
|
73
|
+
|
|
74
|
+
### Replace bespoke with standard capability
|
|
75
|
+
Retire custom schedulers, service discovery, retry frameworks, configuration systems, or deployment machinery when a standard platform/managed capability can satisfy requirements with less burden.
|
|
76
|
+
|
|
77
|
+
### Strangle incrementally
|
|
78
|
+
Place a seam around legacy behavior, route selected flows to a replacement, compare results, migrate consumers/data gradually, then delete the legacy path.
|
|
79
|
+
|
|
80
|
+
### Collapse integration hops
|
|
81
|
+
Remove unnecessary gateways/translators/brokers in a path where they add no policy, protocol, security, buffering, or ownership value.
|
|
82
|
+
|
|
83
|
+
### Make data ownership explicit
|
|
84
|
+
Assign one authoritative writer and expose controlled reads/events/APIs rather than shared writes.
|
|
85
|
+
|
|
86
|
+
### Introduce async deliberately
|
|
87
|
+
Use a queue/event log for buffering, fan-out, long-running work, temporal decoupling, or resilience. Pair it with idempotency, retries, DLQ/recovery, ordering assumptions, and observability.
|
|
88
|
+
|
|
89
|
+
### Introduce cache deliberately
|
|
90
|
+
Add cache only for measured cost/latency/load. Define key ownership, TTL/invalidation, stampede protection, consistency expectations, and failure behavior.
|
|
91
|
+
|
|
92
|
+
## 5. Redesign triggers
|
|
93
|
+
Redesign is warranted when evidence shows the architecture cannot economically or safely satisfy required qualities with local improvements.
|
|
94
|
+
|
|
95
|
+
Strong triggers:
|
|
96
|
+
- repeated systemic incidents caused by structural coupling,
|
|
97
|
+
- scaling ceiling that cannot be relieved locally,
|
|
98
|
+
- security/compliance requires a new trust boundary,
|
|
99
|
+
- core data model prevents correctness,
|
|
100
|
+
- common changes require coordinated releases across many independently owned systems,
|
|
101
|
+
- platform is unsupported and blocks safe delivery,
|
|
102
|
+
- operational cost dominates product value despite optimization.
|
|
103
|
+
|
|
104
|
+
Weak triggers (not enough alone):
|
|
105
|
+
- “old technology”,
|
|
106
|
+
- “not cloud native”,
|
|
107
|
+
- “competitors use microservices”,
|
|
108
|
+
- desire for a new framework,
|
|
109
|
+
- preference for a pattern,
|
|
110
|
+
- aesthetically messy diagrams.
|
|
111
|
+
|
|
112
|
+
## 6. Quality-preservation matrix
|
|
113
|
+
For each refactor, explicitly assess:
|
|
114
|
+
|
|
115
|
+
| Quality | Questions |
|
|
116
|
+
|---|---|
|
|
117
|
+
| Functionality | Are all user/business flows preserved? Any edge-case behavior lost? |
|
|
118
|
+
| Reliability | Does failure isolation improve or regress? What new dependencies appear? |
|
|
119
|
+
| Recoverability | Are backup, replay, restore, rollback, RTO/RPO preserved? |
|
|
120
|
+
| Performance | What happens to latency, throughput, capacity, and tail behavior? |
|
|
121
|
+
| Security | Do trust boundaries, least privilege, auditability, and secrets improve? |
|
|
122
|
+
| Data | Is ownership clearer? Are consistency and retention semantics unchanged? |
|
|
123
|
+
| Operability | Is it easier to deploy, observe, diagnose, and recover? |
|
|
124
|
+
| Maintainability | Does a common change touch fewer concepts/components/teams? |
|
|
125
|
+
| Compatibility | Are existing consumers/contracts preserved during migration? |
|
|
126
|
+
| Cost | Does total runtime + engineering + operational cost improve? |
|
|
127
|
+
|
|
128
|
+
## 7. Architecture fitness functions
|
|
129
|
+
Examples:
|
|
130
|
+
- no domain package may depend on infrastructure packages except through defined ports,
|
|
131
|
+
- no synchronous request path may exceed N remote calls,
|
|
132
|
+
- critical APIs must meet p99 latency and error-rate thresholds,
|
|
133
|
+
- all externally consumed schemas pass compatibility checks,
|
|
134
|
+
- critical business flows meet availability SLO,
|
|
135
|
+
- restore drill meets RTO/RPO,
|
|
136
|
+
- no production component lacks an owning team and runbook,
|
|
137
|
+
- no service may directly write another service’s owned tables,
|
|
138
|
+
- representative feature change must require no more than N team handoffs,
|
|
139
|
+
- architecture cost per transaction stays below threshold.
|
|
140
|
+
|
|
141
|
+
## 8. Migration safety
|
|
142
|
+
Each migration step should be independently deployable and observable.
|
|
143
|
+
|
|
144
|
+
Use as appropriate:
|
|
145
|
+
- consumer inventory,
|
|
146
|
+
- contract tests,
|
|
147
|
+
- compatibility adapters,
|
|
148
|
+
- feature flags,
|
|
149
|
+
- shadow reads/writes,
|
|
150
|
+
- dual run with reconciliation,
|
|
151
|
+
- canary rollout,
|
|
152
|
+
- traffic splitting,
|
|
153
|
+
- backfill checkpoints,
|
|
154
|
+
- immutable migration logs,
|
|
155
|
+
- rollback-safe schema changes,
|
|
156
|
+
- explicit decommission criteria.
|
|
157
|
+
|
|
158
|
+
## 9. Architecture decision quality
|
|
159
|
+
Record ADRs for decisions that are expensive to reverse, constrain many teams, or encode important trade-offs.
|
|
160
|
+
|
|
161
|
+
A concise ADR contains:
|
|
162
|
+
- context/constraints,
|
|
163
|
+
- decision,
|
|
164
|
+
- alternatives considered,
|
|
165
|
+
- trade-offs,
|
|
166
|
+
- consequences,
|
|
167
|
+
- validation/fitness functions,
|
|
168
|
+
- review trigger/date.
|
|
169
|
+
|
|
170
|
+
Delete or supersede stale ADRs when their constraints disappear.
|
|
171
|
+
|
|
172
|
+
## 10. “Simple” does not mean simplistic
|
|
173
|
+
A simpler architecture may still include redundancy, asynchronous processing, partitioning, isolation, or multiple data stores if those elements are essential to required quality. The goal is justified complexity, not minimal box count.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Research Basis and Industry Practices
|
|
2
|
+
|
|
3
|
+
This skill treats “STOA” as **state-of-the-art architecture techniques** rather than as a single formal standard. If a team uses a specific internal framework named STOA, map its terminology into the intervention ladder and quality model in this skill.
|
|
4
|
+
|
|
5
|
+
## Quality attributes
|
|
6
|
+
ISO/IEC 25010:2023 provides a modern product quality model with nine characteristics and sub-characteristics. The skill uses it as a vocabulary for preservation contracts and quality trade-offs, while adding delivery/operability concerns that architecture teams usually need in practice.
|
|
7
|
+
|
|
8
|
+
## Well-Architected thinking
|
|
9
|
+
AWS Well-Architected uses six pillars: operational excellence, security, reliability, performance efficiency, cost optimization, and sustainability. The skill borrows the idea that architecture is evaluated through explicit trade-offs and operational evidence, not pattern compliance.
|
|
10
|
+
|
|
11
|
+
Google Cloud’s Architecture Framework emphasizes robust system design, decoupling where useful, documentation, high availability/scalability, and cost-conscious design. This skill uses these ideas but explicitly warns against adding decoupling when it increases complexity without delivering a quality benefit.
|
|
12
|
+
|
|
13
|
+
## Evolutionary architecture
|
|
14
|
+
Evolutionary architecture practices emphasize guided incremental change, fitness functions, reversible decisions, and continuous feedback. The skill therefore requires measurable fitness functions and prefers small migration steps over big-bang rewrites.
|
|
15
|
+
|
|
16
|
+
## Team/service ownership
|
|
17
|
+
Single-team ownership patterns such as STOSA and modern team-topology thinking reinforce the principle that service boundaries should have clear operational ownership. The skill treats shared/no ownership as a refactoring smell and favors boundaries that align responsibility, data, change cadence, and operations.
|
|
18
|
+
|
|
19
|
+
## Incremental modernization
|
|
20
|
+
Strangler-style modernization and compatibility seams are used as migration techniques when replacement is necessary. The objective is not to preserve legacy structure, but to preserve behavior while shrinking risk and allowing progressive deletion.
|
|
21
|
+
|
|
22
|
+
## Architecture documentation
|
|
23
|
+
C4-style abstraction levels and ADRs are compatible with this skill: use diagrams to communicate current/target structures and ADRs to record consequential trade-offs. Documentation is useful only when it remains consistent with runtime evidence.
|
|
24
|
+
|
|
25
|
+
## Guiding synthesis
|
|
26
|
+
The distinctive bias of this skill is:
|
|
27
|
+
|
|
28
|
+
> **Reduce first. Re-boundary second. Enhance only against a named quality gap. Redesign last. Prove every structural change against preserved features and delivery qualities.**
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# taste-refactoring-tests
|
|
2
|
+
|
|
3
|
+
A reusable agent skill for refactoring existing unit tests so the test suite improves **real delivery quality** instead of creating an “always-pass” illusion.
|
|
4
|
+
|
|
5
|
+
Its core bias is simple:
|
|
6
|
+
|
|
7
|
+
> A test earns its place by detecting meaningful regressions.
|
|
8
|
+
|
|
9
|
+
The skill uses a graded intervention model:
|
|
10
|
+
|
|
11
|
+
- T0 KEEP
|
|
12
|
+
- T1 DIRECT REMOVE
|
|
13
|
+
- T2 SUGGEST REMOVE
|
|
14
|
+
- T3 STRENGTHEN
|
|
15
|
+
- T4 SIMPLIFY / DE-BRITTLE
|
|
16
|
+
- T5 ADD MISSING PROTECTION
|
|
17
|
+
- T6 RE-DESIGN TEST STRATEGY
|
|
18
|
+
- T7 QUARANTINE / INVESTIGATE
|
|
19
|
+
|
|
20
|
+
The package includes:
|
|
21
|
+
- `SKILL.md` — operational agent instructions
|
|
22
|
+
- `references/test-refactoring-playbook.md` — detailed techniques and heuristics
|
|
23
|
+
- `references/research-basis.md` — industry-practice basis and concepts
|
|
24
|
+
- `checklists/daily-test-review.md` — quick daily checklist
|
|
25
|
+
- `examples/review-template.md` — reusable assessment format
|
|
26
|
+
- `examples/refactor-example.md` — worked example of converting green-but-weak tests into failure-sensitive tests
|
|
27
|
+
|
|
28
|
+
The skill is intentionally skeptical of vanity coverage, tautological assertions, mock-heavy choreography, flaky retries, and tests that merely prove that the test setup works.
|