@1aboveio/skills 1.0.9 → 1.0.11
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/.codex-plugin/plugin.json +1 -1
- package/.codex-plugin/resources.json +297 -216
- package/README.md +3 -3
- package/package.json +10 -8
- package/skills/app-dev/airflow/SKILL.md +1 -1
- package/skills/app-dev/android-foundation/SKILL.md +35 -37
- package/skills/app-dev/android-foundation/references/delivery-focus.md +4 -2
- package/skills/app-dev/android-foundation/references/feature-work.md +50 -0
- package/skills/app-dev/android-foundation/references/setup.md +24 -9
- package/skills/app-dev/android-foundation/references/workspace.md +81 -0
- package/skills/app-dev/android-foundation/scripts/workspace-runtime/bin/workspaces.mjs +52 -0
- package/skills/app-dev/android-foundation/scripts/workspace-runtime/native-workspace.mjs +239 -0
- package/skills/app-dev/android-foundation/scripts/workspace-runtime/workspace-lifecycle.mjs +2154 -0
- package/skills/app-dev/app-debug/SKILL.md +1 -1
- package/skills/app-dev/better-auth/SKILL.md +1 -1
- package/skills/app-dev/data-catalog/SKILL.md +1 -1
- package/skills/app-dev/data-quality/SKILL.md +1 -1
- package/skills/app-dev/ios-foundation/SKILL.md +15 -10
- package/skills/app-dev/ios-foundation/references/setup.md +25 -9
- package/skills/app-dev/ios-foundation/references/workspace.md +82 -0
- package/skills/app-dev/ios-foundation/scripts/workspace-runtime/bin/workspaces.mjs +52 -0
- package/skills/app-dev/ios-foundation/scripts/workspace-runtime/native-workspace.mjs +239 -0
- package/skills/app-dev/ios-foundation/scripts/workspace-runtime/workspace-lifecycle.mjs +2154 -0
- package/skills/app-dev/monorepo/SKILL.md +1 -1
- package/skills/app-dev/nextjs-fullstack/SKILL.md +1 -1
- package/skills/app-dev/prisma-setup/SKILL.md +1 -1
- package/skills/app-dev/pyspark/SKILL.md +1 -1
- package/skills/app-dev/python-backend/SKILL.md +1 -1
- package/skills/app-dev/shadcn/SKILL.md +1 -1
- package/skills/app-dev/zod-v4/SKILL.md +1 -1
- package/skills/cicd/cloud-build/SKILL.md +1 -1
- package/skills/cicd/cloud-debug/SKILL.md +1 -1
- package/skills/cicd/cloud-deploy/SKILL.md +1 -1
- package/skills/cicd/docker/SKILL.md +1 -1
- package/skills/cicd/github-actions/SKILL.md +1 -1
- package/skills/cicd/github-flow/SKILL.md +1 -1
- package/skills/cicd/google-cloud/SKILL.md +1 -1
- package/skills/cicd/mergify/SKILL.md +1 -1
- package/skills/cicd/podman/SKILL.md +1 -1
- package/skills/content/article-review/SKILL.md +1 -1
- package/skills/content/article-to-image/SKILL.md +1 -1
- package/skills/content/flowchart-svg/SKILL.md +1 -1
- package/skills/content/image-gen/SKILL.md +1 -1
- package/skills/content/mermaid/SKILL.md +1 -1
- package/skills/content/wechat-article-writer/SKILL.md +1 -1
- package/skills/content/wechat-publisher/SKILL.md +1 -1
- package/skills/content/wechat-search/SKILL.md +1 -1
- package/skills/content/xai-search/SKILL.md +1 -1
- package/skills/core/distill-writing/SKILL.md +3 -3
- package/skills/core/distill-writing/references/extraction.md +1 -1
- package/skills/core/doc-to-md/SKILL.md +1 -1
- package/skills/core/editorial-review/SKILL.md +82 -12
- package/skills/core/editorial-review/references/checklist.md +26 -1
- package/skills/core/house-style/SKILL.md +8 -3
- package/skills/core/house-style/references/analytical-reporting.md +123 -0
- package/skills/core/house-style/references/analytical-writing-patterns.md +79 -0
- package/skills/core/house-style/references/analytical-writing-research.md +129 -0
- package/skills/core/{write-doc → house-style}/references/bilingual.md +7 -5
- package/skills/core/house-style/references/definitions-and-metrics.md +86 -0
- package/skills/core/house-style/references/document-workflow.md +193 -0
- package/skills/core/house-style/references/initialization.md +66 -0
- package/skills/core/house-style/references/persistence.md +9 -4
- package/skills/core/house-style/references/rules.md +11 -4
- package/skills/core/house-style/scripts/init-guidance.mjs +213 -0
- package/skills/core/house-style/templates/analytical-report.md +54 -0
- package/skills/core/house-style/templates/gap-analysis.md +1 -1
- package/skills/core/plain-language/SKILL.md +2 -2
- package/skills/core/polish-cn/SKILL.md +9 -2
- package/skills/core/reg-parser/SKILL.md +3 -3
- package/skills/core/terminology/SKILL.md +8 -4
- package/skills/core/write-doc/SKILL.md +40 -151
- package/skills/core/write-report/SKILL.md +129 -0
- package/skills/core/{write-doc → write-report}/references/compliance-reports.md +4 -4
- package/skills/engineering/better-review/SKILL.md +37 -37
- package/skills/engineering/better-review/references/passes.md +35 -41
- package/skills/engineering/better-review/references/result.md +10 -9
- package/skills/engineering/e2e-test/SKILL.md +17 -17
- package/skills/engineering/e2e-test/references/authoring/playwright-config.md +11 -13
- package/skills/engineering/e2e-test/references/presentation-sweep.md +7 -7
- package/skills/engineering/e2e-test/references/reviewing.md +9 -11
- package/skills/engineering/e2e-test/references/route-manifest.md +1 -1
- package/skills/engineering/engineering/SKILL.md +124 -0
- package/skills/engineering/engineering/references/engineering-conventions.md +32 -0
- package/skills/engineering/engineering/references/feature-delivery.md +8 -0
- package/skills/engineering/engineering/references/init-scope.md +37 -0
- package/skills/engineering/engineering/scripts/init.mjs +160 -0
- package/skills/engineering/{contributing → engineering}/scripts/persist-conventions.mjs +1 -1
- package/skills/engineering/engineering-runtime/SKILL.md +1 -1
- package/skills/engineering/engineering-runtime/coherence/workflow.json +19 -19
- package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +1 -1
- package/skills/engineering/ensure-coverage/SKILL.md +22 -109
- package/skills/engineering/ensure-coverage/references/breadth/coverage-ledger.md +7 -5
- package/skills/engineering/ensure-coverage/references/breadth/surface-baseline.md +4 -4
- package/skills/engineering/ensure-coverage/references/breadth/surface-discovery.md +3 -3
- package/skills/engineering/ensure-coverage/references/depth/characterization.md +4 -65
- package/skills/engineering/ensure-coverage/references/depth/grading.md +5 -7
- package/skills/engineering/ensure-coverage/references/depth/mock-policy.md +6 -12
- package/skills/engineering/ensure-coverage/references/enforcement/ci-contract.md +1 -1
- package/skills/engineering/ensure-coverage/references/presentation/axis.md +6 -6
- package/skills/engineering/ensure-coverage/references/process/audit-mode.md +7 -23
- package/skills/engineering/ensure-coverage/references/process/output-template.md +18 -133
- package/skills/engineering/ensure-coverage/references/process/test-strategy.md +7 -12
- package/skills/engineering/ensure-coverage/scripts/README.md +12 -4
- package/skills/engineering/golden-path/SKILL.md +1 -1
- package/skills/engineering/harness-runtime/SKILL.md +3 -1
- package/skills/engineering/harness-runtime/bin/workspaces.mjs +52 -0
- package/skills/engineering/harness-runtime/native-workspace.mjs +239 -0
- package/skills/engineering/harness-runtime/references/workspaces.md +78 -0
- package/skills/engineering/harness-runtime/workspace-lifecycle.mjs +2154 -0
- package/skills/engineering/resolve-issues/SKILL.md +40 -61
- package/skills/engineering/resolve-issues/references/ci.md +13 -3
- package/skills/engineering/resolve-issues/references/delivery-progress.md +4 -3
- package/skills/engineering/resolve-issues/references/done.md +11 -2
- package/skills/engineering/resolve-issues/references/expire.md +9 -2
- package/skills/engineering/resolve-issues/references/implementation.md +33 -17
- package/skills/engineering/resolve-issues/references/preflight.md +3 -1
- package/skills/engineering/resolve-issues/references/principles.md +52 -0
- package/skills/engineering/resolve-issues/references/review.md +25 -15
- package/skills/engineering/resolve-issues/references/task-plan.md +64 -27
- package/skills/engineering/resolve-issues/references/workspaces.md +164 -0
- package/skills/engineering/resolve-issues/scripts/cleanup-runs.mjs +185 -317
- package/skills/engineering/resolve-issues/scripts/next-actions.mjs +44 -7
- package/skills/engineering/resolve-issues/scripts/rehydrate.mjs +36 -2
- package/skills/engineering/resolve-issues/scripts/review-verdict.mjs +9 -8
- package/skills/engineering/resolve-issues/scripts/workspace-lifecycle.mjs +1 -0
- package/skills/engineering/resolve-release/SKILL.md +1 -1
- package/skills/engineering/rush-issues/SKILL.md +7 -5
- package/skills/engineering/rush-release/SKILL.md +1 -1
- package/skills/engineering/test-quality/SKILL.md +19 -4
- package/skills/engineering/test-quality/references/lint.md +1 -1
- package/skills/engineering/test-quality/references/principles.md +2 -2
- package/skills/engineering/test-quality/references/testing-conventions.md +1 -1
- package/skills/risk-compliance/compliance-audit/SKILL.md +4 -8
- package/skills/risk-compliance/compliance-audit/references/audience-and-reports.md +12 -0
- package/skills/risk-compliance/contract-compare/SKILL.md +17 -1
- package/skills/risk-compliance/contract-review/SKILL.md +6 -1
- package/skills/risk-compliance/contract-review/references/report-stage.md +17 -0
- package/skills/risk-compliance/doc-authenticity/SKILL.md +11 -1
- package/skills/risk-compliance/fraud-detection/LICENSE +3 -0
- package/skills/risk-compliance/fraud-detection/SKILL.md +148 -0
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/archetypes/first-party-fraud.md +3 -2
- package/skills/risk-compliance/fraud-detection/references/archetypes/third-party-fraud.md +47 -0
- package/skills/risk-compliance/fraud-detection/references/collection-payout-features.md +151 -0
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/contexts/bank-transfer.md +4 -3
- package/skills/risk-compliance/fraud-detection/references/contexts/card-payment.md +70 -0
- package/skills/risk-compliance/fraud-detection/references/contexts/payment-collection.md +34 -0
- package/skills/risk-compliance/fraud-detection/references/contexts/payout.md +34 -0
- package/skills/risk-compliance/fraud-detection/references/enrichment.md +74 -0
- package/skills/risk-compliance/fraud-detection/references/entities.md +48 -0
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/feature-engineering.md +69 -33
- package/skills/risk-compliance/fraud-detection/references/feature-sql.md +150 -0
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/report-rationale.md +4 -2
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/report-template.md +45 -23
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/review-checklist.md +60 -20
- package/skills/risk-compliance/fraud-detection/references/workflow.md +216 -0
- package/skills/risk-compliance/fraud-detection/release-check.mjs +95 -0
- package/skills/risk-compliance/payment-analysis/SKILL.md +36 -17
- package/skills/risk-compliance/payment-analysis/references/auth-rate-actions.md +2 -2
- package/skills/risk-compliance/payment-analysis/references/report-template.md +10 -2
- package/skills/risk-compliance/payment-analysis/references/visualization.md +11 -1
- package/skills/risk-compliance/portfolio-payment-analysis/LICENSE +3 -0
- package/skills/risk-compliance/portfolio-payment-analysis/SKILL.md +170 -0
- package/skills/risk-compliance/portfolio-payment-analysis/references/identity-and-reconciliation.md +46 -0
- package/skills/risk-compliance/portfolio-payment-analysis/references/metrics-and-reporting.md +170 -0
- package/skills/risk-compliance/portfolio-payment-analysis/references/risk-history.md +89 -0
- package/skills/risk-compliance/portfolio-payment-analysis/release-check.mjs +95 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/analyze.py +636 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/build_report.py +386 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/comparison_charts.py +425 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/csv_export.py +52 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/render.py +160 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/risk_history.py +435 -0
- package/skills/risk-compliance/similar-domain/SKILL.md +9 -4
- package/skills/risk-compliance/tld-detection/SKILL.md +124 -239
- package/skills/risk-compliance/tld-detection/agents/openai.yaml +1 -1
- package/skills/risk-compliance/tld-detection/references/clean.md +18 -51
- package/skills/risk-compliance/tld-detection/references/fx-conversion.md +56 -219
- package/skills/risk-compliance/tld-detection/references/metric-contract.md +109 -0
- package/skills/risk-compliance/tld-detection/references/pattern.md +99 -0
- package/skills/risk-compliance/tld-detection/references/report-template.md +49 -272
- package/skills/risk-compliance/tld-detection/scripts/detect_ladders.py +46 -13
- package/skills/risk-compliance/tld-detection/scripts/detect_patterns.py +346 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_streams.py +51 -19
- package/skills/risk-compliance/tld-detection/scripts/profile_groups.py +109 -0
- package/skills/risk-compliance/tld-detection/scripts/render_charts.py +218 -0
- package/skills/risk-compliance/tld-detection/scripts/tld_common.py +243 -0
- package/skills/engineering/contributing/SKILL.md +0 -70
- package/skills/risk-compliance/fraud-analysis/SKILL.md +0 -114
- package/skills/risk-compliance/fraud-analysis/references/archetypes/third-party-fraud.md +0 -27
- package/skills/risk-compliance/fraud-analysis/references/contexts/card-payment.md +0 -30
- package/skills/risk-compliance/fraud-analysis/references/contexts/payment-collection.md +0 -20
- package/skills/risk-compliance/fraud-analysis/references/contexts/payout.md +0 -20
- package/skills/risk-compliance/fraud-analysis/references/workflow.md +0 -175
- package/skills/risk-compliance/tld-detection/references/chinese-polish.md +0 -55
- package/skills/risk-compliance/tld-detection/references/clustering.md +0 -235
- package/skills/risk-compliance/tld-detection/references/decision.md +0 -189
- package/skills/risk-compliance/tld-detection/references/streams.md +0 -141
- package/skills/risk-compliance/tld-detection/references/terminology.md +0 -95
- package/skills/risk-compliance/tld-detection/references/workflow.md +0 -95
- /package/skills/{engineering/contributing → core/write-report}/LICENSE +0 -0
- /package/skills/core/{write-doc → write-report}/references/reports/audit-report-template.md +0 -0
- /package/skills/core/{write-doc → write-report}/references/reports/external-assessment-template.md +0 -0
- /package/skills/core/{write-doc → write-report}/references/reports/management-report-template.md +0 -0
- /package/skills/core/{write-doc → write-report}/references/reports/vars-report-template.md +0 -0
- /package/skills/{engineering/contributing → core/write-report}/release-check.mjs +0 -0
- /package/skills/{risk-compliance/fraud-analysis → engineering/engineering}/LICENSE +0 -0
- /package/skills/engineering/{contributing → engineering}/references/tracker-conventions.md +0 -0
- /package/skills/{risk-compliance/fraud-analysis → engineering/engineering}/release-check.mjs +0 -0
- /package/skills/engineering/{contributing → engineering}/scripts/persist-conventions-core.mjs +0 -0
- /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/archetypes/authorized-payment-scam.md +0 -0
- /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/mechanisms/account-takeover.md +0 -0
- /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/taxonomy.md +0 -0
- /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/terminology.md +0 -0
|
@@ -17,11 +17,10 @@ finding's `rule` and `paths` ([result.md](result.md)). Below a P0/P1, skip them.
|
|
|
17
17
|
it is a P2 follow-up. On a delta, search again only when the fix diff adds or moves a writer.
|
|
18
18
|
Example: grep every call that changes a balance: the refund route, the batch refund job, and
|
|
19
19
|
the chargeback webhook are three rows, not the one the trigger used.
|
|
20
|
-
3. **Check
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
line; one guard that rules out a whole row of events closes every cell in it.
|
|
20
|
+
3. **Check relevant conditions on every path.** Select reachable outcomes and interleavings
|
|
21
|
+
from the broken rule, changed contract, and material risks, including failures where they
|
|
22
|
+
matter. Follow binding repo hazard and proof requirements. Rule out a case using code, not
|
|
23
|
+
assumptions about how it is reached; do not build a full event matrix by default.
|
|
25
24
|
Example: an org switch was tried against "offline" and "a second tab", never against "the
|
|
26
25
|
role lookup times out after the switch", and that cell granted the old org's role.
|
|
27
26
|
4. **One rule, one finding, one id, every round.** A new witness that breaks the same guarded
|
|
@@ -30,47 +29,40 @@ finding's `rule` and `paths` ([result.md](result.md)). Below a P0/P1, skip them.
|
|
|
30
29
|
an id resolved in an earlier round that breaks again is a new id whose summary names it.
|
|
31
30
|
Example: a cache-invalidation finding fixed for writes is still open when a bulk import
|
|
32
31
|
leaves the cache stale: same id, one more open row.
|
|
33
|
-
5. **
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
5. **Identify the applicable paths, not a mandatory architecture.** A shared owner may help
|
|
33
|
+
explain a defect, but do not require centralization or prescribe a new framework. Copied
|
|
34
|
+
guards that close every row resolve the finding.
|
|
36
35
|
Example: three handlers each re-check the tenant; the owner is the repository method all
|
|
37
36
|
three call.
|
|
38
|
-
6. **A rule
|
|
39
|
-
|
|
40
|
-
it were the first. Example: the refund cap is open after two fixes, each adding a check to
|
|
37
|
+
6. **A rule still broken after a fix stays open.** Say so in the finding and re-derive every
|
|
38
|
+
path (2); never review the next patch as if it were the first. Example: the refund cap is open after two fixes, each adding a check to
|
|
41
39
|
one route: the finding names the balance service as the owner and lists every writer.
|
|
42
40
|
|
|
43
41
|
## Adversarial techniques
|
|
44
42
|
|
|
45
43
|
"Be adversarial" means nothing without a method. The one move behind all four: **build the
|
|
46
|
-
specific artifact that would fail, and cite it.**
|
|
44
|
+
specific artifact that would fail, and cite it.** Alternatively cite an explicit unmet requirement
|
|
45
|
+
and evidence; a finding supported by neither is a hunch.
|
|
47
46
|
|
|
48
47
|
- **Diff each new or changed function against its siblings.** Find its family: the same module,
|
|
49
48
|
naming pattern, or role (a set of `detect*`, `validate*`, `parse*`, or route handlers). Compare
|
|
50
49
|
the logic line by line. A function that handles a case differently, uses a looser or tighter
|
|
51
|
-
pattern, orders its guards differently, or lacks a branch all its siblings have is a
|
|
52
|
-
|
|
50
|
+
pattern, orders its guards differently, or lacks a branch all its siblings have is a lead to
|
|
51
|
+
investigate, not a defect without a supported failure or unmet requirement. Name the sibling
|
|
52
|
+
and the exact divergence, for example:
|
|
53
53
|
"`detectOverMockedEvidence` matches `route.fulfill` but its sibling `detectTier1UiOnlyEvidence`
|
|
54
54
|
also matches `page.route(`, so the first misses that vector."
|
|
55
|
-
- **Break patterns with boundary inputs.**
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
caller of the step, including timers, push events, expiry, and error handlers, not just the
|
|
67
|
-
button a user presses. A test that awaits the step to completion never runs this window, so it
|
|
68
|
-
proves nothing about it. Example: "export a report to a temp
|
|
69
|
-
file, put the app in the background, then log out and leave the logout request hanging: the
|
|
70
|
-
cleanup waits for logout to finish, so the exported file outlives the session."
|
|
71
|
-
- **Name a test for each new branch.** For every conditional, `else`, early return, switch case,
|
|
72
|
-
and error path in the diff, find the test that drives it. A branch whose failure would be
|
|
73
|
-
observable and has no test is a gap; line coverage is not branch coverage.
|
|
55
|
+
- **Break relevant patterns with boundary inputs.** Choose inputs from the contract and material
|
|
56
|
+
risks, such as prefix leakage, empty values, case, escaping, or malformed input. Put a failing
|
|
57
|
+
input in the finding; do not require every boundary for every pattern.
|
|
58
|
+
- **Examine relevant async windows.** Where the contract or material risk depends on pending
|
|
59
|
+
state or ordering, trace reachable callers and interleavings, including failure outcomes that
|
|
60
|
+
matter. Cite the sequence or the code that rules it out. A completed async test does not prove
|
|
61
|
+
a pending state. Example: "export a report to a temp file, background the app, then leave
|
|
62
|
+
logout hanging: cleanup waits for logout, so the file outlives the session."
|
|
63
|
+
- **Assess test evidence for the changed behavior.** Look for tests that can expose material
|
|
64
|
+
failures and for proof explicitly required by the agreement or binding repo rules. Do not
|
|
65
|
+
demand a test for every branch or invent a new harness.
|
|
74
66
|
|
|
75
67
|
Shapes to look for while doing this:
|
|
76
68
|
|
|
@@ -85,12 +77,12 @@ Shapes to look for while doing this:
|
|
|
85
77
|
can pin its own expected state, so the service accepting it proves nothing about the action the
|
|
86
78
|
button calls.
|
|
87
79
|
- **A permanent event routed through a temporary path.** Code that handles "paused, hidden,
|
|
88
|
-
checking" and "revoked, signed out, deleted" in one branch
|
|
89
|
-
should be gone. Check
|
|
90
|
-
|
|
80
|
+
checking" and "revoked, signed out, deleted" in one branch can keep data or access alive after
|
|
81
|
+
it should be gone. Check relevant reachable interleavings and record them under `windows`
|
|
82
|
+
(see "Revocation during a pause" in [domain-hazards.md](domain-hazards.md)).
|
|
91
83
|
- **Centralizing drops an edge.** A refactor that moves a cross-cutting concern into one place (an
|
|
92
84
|
auth redirect into a layout, error handling into a shared hook) silently loses edges the old
|
|
93
|
-
paths handled. Check
|
|
85
|
+
paths handled. Check relevant old behavior against the changed contract and any required proof.
|
|
94
86
|
|
|
95
87
|
## Enforcement-point sweep
|
|
96
88
|
|
|
@@ -122,10 +114,10 @@ searching for the old value, not by rerunning the suite.
|
|
|
122
114
|
|
|
123
115
|
Search hard; then report only what survives this bar.
|
|
124
116
|
|
|
125
|
-
- **Provable.**
|
|
126
|
-
breaks. Label any inference.
|
|
127
|
-
- **One finding per broken rule.** Say the rule
|
|
128
|
-
|
|
117
|
+
- **Provable.** Cite the diff hunk and a supported failure, or the explicit unmet requirement
|
|
118
|
+
and evidence. For a ripple effect cite the code it breaks. Label any inference.
|
|
119
|
+
- **One finding per broken rule.** Say the rule and every open path in `paths`; identify a
|
|
120
|
+
shared owner when useful, without making an architecture decision. Example: four places miss the generation check: one finding with four open
|
|
129
121
|
rows, not four findings and not one row.
|
|
130
122
|
- **The author would fix it.** Do not flag intended changes or rely on guesses about intent.
|
|
131
123
|
- **Rigor in proportion.** Hold the code to the bar the surrounding code already holds.
|
|
@@ -135,6 +127,8 @@ Do not raise:
|
|
|
135
127
|
|
|
136
128
|
- a sibling divergence that is justified by a genuinely different case;
|
|
137
129
|
- an unanchored pattern whose inputs come from a closed, validated set;
|
|
130
|
+
- a missing test or hypothetical hardening as a blocker without required proof or a concrete
|
|
131
|
+
material defect; do not invent gates, expanded acceptance, a new harness, or unrelated cleanup;
|
|
138
132
|
- an "untested" branch already driven by an integration or E2E test, or whose failure is harmless;
|
|
139
133
|
- a fake of a real external boundary (third-party API, clock, email, randomness);
|
|
140
134
|
- a pre-existing issue the diff neither depends on nor worsens as a blocker (P2 at most);
|
|
@@ -10,8 +10,8 @@ Only P0/P1 block. Pick the level by consequence, not by which pass found it. Nev
|
|
|
10
10
|
| Level | Meaning |
|
|
11
11
|
|---|---|
|
|
12
12
|
| **P0** | Exploitable security, auth, tenancy, money, or data-loss defect on a reachable path. |
|
|
13
|
-
| **P1** | A contract break: an acceptance criterion unmet or
|
|
14
|
-
| **P2** | A
|
|
13
|
+
| **P1** | A supported contract break: an explicit acceptance criterion or binding repo rule unmet, agreed or binding required proof missing, or a correctness defect with a concrete breaking input or sequence. Cite the requirement and evidence or the supported failure. |
|
|
14
|
+
| **P2** | A material non-blocking issue: for example, a test weakness or scope creep that does not violate required proof or show a concrete material defect. Optional hardening alone is not a blocker. |
|
|
15
15
|
| **P3** | Not reported. Cleanup, naming, smells, cosmetics, architecture opinions, minor pre-existing issues: leave them out of the result and the chat report. |
|
|
16
16
|
|
|
17
17
|
A pre-existing defect the diff neither causes nor worsens is never P0/P1 for this change, however
|
|
@@ -101,7 +101,9 @@ P2 lacks its follow-up URL when the caller asked for follow-ups.
|
|
|
101
101
|
- `commands` lists the checks you ran against the code. Leave out this skill's update check and its
|
|
102
102
|
scripts (`pr-context.mjs`, `scan-diff.mjs`, `rereview-scope.mjs`): a caller reads a non-empty
|
|
103
103
|
list as proof the code was checked.
|
|
104
|
-
- `trigger` is required on P0/P1: the input, state, or sequence that breaks it
|
|
104
|
+
- `trigger` is required on P0/P1: the concrete input, state, or sequence that breaks it; for
|
|
105
|
+
an explicitly unmet requirement or missing required proof, identify the requirement and the
|
|
106
|
+
evidence of what is missing.
|
|
105
107
|
- `rule` and `paths` are required on P0/P1, with at least one row `open`: the rule as one
|
|
106
108
|
sentence, and one row per path the diff adds, changes, or relies on (a writer, caller, sweep
|
|
107
109
|
place, or async cell), each `open` or `closed`, a closed row citing its guard's `file:line`.
|
|
@@ -124,12 +126,11 @@ P2 lacks its follow-up URL when the caller asked for follow-ups.
|
|
|
124
126
|
needs both matching identities, otherwise review in full. Empty `sweeps` is `[]`.
|
|
125
127
|
- On a delta, retain the tier decision (`reasons`, `integrationFiles`, `integrationLines`,
|
|
126
128
|
`baseMovedFiles`, and prior HEAD) so carry-forward approval names what was checked.
|
|
127
|
-
- `windows` lists
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
inputs tried against it; `[]` when the diff has none.
|
|
129
|
+
- `windows` lists the async windows selected for the changed contract and material risks,
|
|
130
|
+
their relevant callers, events and outcomes checked, and what the code did or what ruled a
|
|
131
|
+
case out; `[]` when none was selected. Binding repo proof requirements still apply.
|
|
132
|
+
- `boundaries` lists the patterns, parsers, or validators selected for the changed contract and
|
|
133
|
+
material risks with the inputs tried; `[]` when none was selected.
|
|
133
134
|
- On a re-review, keep a prior finding's `id` while its rule is broken anywhere, with every
|
|
134
135
|
row updated; a new witness of that rule is a new row, never a new id.
|
|
135
136
|
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: e2e-test
|
|
3
|
-
description: "Playwright end-to-end
|
|
4
|
-
release-version: 0.
|
|
3
|
+
description: "Playwright end-to-end guidance for affected browser journeys, render health and presentation checks, with route manifests and sweeps for broader audits. Use when browser routes or user flows ship or change, or a Playwright test flakes. NOT for non-browser tests, defining what to test (ensure-coverage), the curated ALIVE/DEAD golden-path gate (golden-path), or CI workflow YAML (github-actions)."
|
|
4
|
+
release-version: 0.45.0
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# E2E Testing Standard
|
|
8
8
|
|
|
9
|
-
The executable browser layer for `ensure-coverage
|
|
9
|
+
The executable browser layer for `ensure-coverage`: that skill determines what needs proof; this skill shows how to obtain browser evidence. For routine feature work, use the existing suite and exercise the affected business journey, relevant render checks, and material errors. Reuse a journey's assertions for each render, functional, or presentation claim they actually check. Do not create a new harness, duplicate tests by tier, regenerate an all-routes manifest, run a whole-app sweep, or add a golden-path gate automatically. Follow existing binding repo requirements and safety rules. Route product policy and broad architecture decisions to their owners.
|
|
10
10
|
|
|
11
11
|
## Test tiers
|
|
12
12
|
|
|
13
13
|
| Tier | Name | What to test | Required when |
|
|
14
14
|
|---|---|---|---|
|
|
15
|
-
| 1 | **Render-health** | Route loads, no crash,
|
|
16
|
-
| 2 | **Functional** | Forms, filters, auth, API responses, error states |
|
|
17
|
-
| 3 | **Journey** | Multi-step flows crossing pages and APIs
|
|
15
|
+
| 1 | **Render-health** | Route loads, no crash, meaningful content visible, no material console errors | Relevant affected renders |
|
|
16
|
+
| 2 | **Functional** | Forms, filters, auth, API responses, error states | Affected behavior needing proof |
|
|
17
|
+
| 3 | **Journey** | Multi-step flows crossing pages and APIs | Affected business journey |
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
These tiers describe kinds of evidence, not three required tests. Existing golden paths may select a curated journey subset; changing that contract belongs to `golden-path` and needs an appropriate request or binding requirement.
|
|
20
20
|
|
|
21
21
|
## Directory layout
|
|
22
22
|
|
|
@@ -33,10 +33,10 @@ e2e/
|
|
|
33
33
|
|
|
34
34
|
## Writing tests
|
|
35
35
|
|
|
36
|
-
1.
|
|
37
|
-
2.
|
|
38
|
-
3.
|
|
39
|
-
4.
|
|
36
|
+
1. Extend or run existing tests for the affected journey and relevant render health, including material errors and appropriate success or failure cases. Add focused proof where existing tests leave a meaningful gap.
|
|
37
|
+
2. Reuse assertions where they actually prove the claim; do not duplicate a journey solely to fill separate tiers. Real UX and layout claims need real-browser evidence, and a functional pass alone does not prove contrast.
|
|
38
|
+
3. When an audit or binding repo requirement calls for a manifest, generate it rather than hand-editing it; put curation in the overlay ([route-manifest.md](references/route-manifest.md)).
|
|
39
|
+
4. Follow existing `// @covers <surface-id>` and `// @level <level>` conventions where the repo uses a ledger.
|
|
40
40
|
5. `getByRole` / `getByLabel` / `getByText`, never CSS selectors. Wait for real state, never `waitForTimeout()`.
|
|
41
41
|
6. Auth lives in shared fixtures. Seeded accounts and tenants carry the `e2e-` prefix with a run-scoped suffix ([auth-flows.md](references/authoring/auth-flows.md)).
|
|
42
42
|
7. Journeys drive real APIs. Mock only external third-party boundaries; a first-party `page.route` in a journey grades `Over-mocked`.
|
|
@@ -45,9 +45,9 @@ e2e/
|
|
|
45
45
|
|
|
46
46
|
Patterns and tier examples: [playwright-patterns.md](references/authoring/playwright-patterns.md). Config and the AGENTS.md snippet: [playwright-config.md](references/authoring/playwright-config.md).
|
|
47
47
|
|
|
48
|
-
##
|
|
48
|
+
## Whole-app audit tools
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
Run a whole-app sweep only for an explicit audit, a changed shared shell with a real broad blast radius, or an existing binding repo requirement. When that scope needs a current manifest, regenerate it from the inventory:
|
|
51
51
|
|
|
52
52
|
```bash
|
|
53
53
|
node "$SKILL_DIR/scripts/project-route-manifest.mjs" \
|
|
@@ -55,7 +55,7 @@ node "$SKILL_DIR/scripts/project-route-manifest.mjs" \
|
|
|
55
55
|
--overlay e2e/route-manifest.overlay.json --out e2e/route-manifest.json
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
For a whole-app sweep, run it over every manifest route against the real render path:
|
|
59
59
|
|
|
60
60
|
```bash
|
|
61
61
|
E2E_AUTH_BYPASS=1 node "$SKILL_DIR/scripts/presentation-sweep.mjs" \
|
|
@@ -65,7 +65,7 @@ E2E_AUTH_BYPASS=1 node "$SKILL_DIR/scripts/presentation-sweep.mjs" \
|
|
|
65
65
|
|
|
66
66
|
`SKILL_DIR` is this skill's own directory, the path you read this file from. Never resolve a script against your CWD, and never locate one with `find` over `$HOME`.
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
A real-browser journey can also prove the render and presentation properties it explicitly checks; functional success alone does not prove contrast or other untested layout properties. A spec intercepting first-party APIs does not prove the real backend render path. Instruments, fixtures, mutate-health, and the result shape: [presentation-sweep.md](references/presentation-sweep.md). A route with no in-app link can still be reached by URL.
|
|
69
69
|
|
|
70
70
|
## Verify locally before the queue
|
|
71
71
|
|
|
@@ -77,11 +77,11 @@ Whether you added tests, wrote notes, or reviewed a PR, the first line answers "
|
|
|
77
77
|
|
|
78
78
|
## CI
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
Run the repo's existing required checks; routine feature work does not create or change a golden-path gate. When explicitly tasked with CI wiring, see [ci-integration.md](references/ci-integration.md) and [ci-playwright-container.md](references/ci-playwright-container.md).
|
|
81
81
|
|
|
82
82
|
## Reviewing
|
|
83
83
|
|
|
84
|
-
Checklist and comment template: [reviewing.md](references/reviewing.md).
|
|
84
|
+
Checklist and comment template: [reviewing.md](references/reviewing.md). Report missing relevant proof and actual failures; do not block solely because a manifest, sweep, or separate tier is absent unless explicitly agreed or required by the repo. Preserve required checks and do not count a 404 or empty page as a real render.
|
|
85
85
|
|
|
86
86
|
## Scripts
|
|
87
87
|
|
|
@@ -42,17 +42,17 @@ export default defineConfig({
|
|
|
42
42
|
|
|
43
43
|
## AGENTS.md section
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
Use this snippet only when explicitly authorized to update a repo's AGENTS.md or CLAUDE.md; preserve existing binding requirements:
|
|
46
46
|
|
|
47
47
|
```markdown
|
|
48
48
|
## E2E Testing
|
|
49
49
|
|
|
50
50
|
### Rules
|
|
51
|
-
1.
|
|
52
|
-
2.
|
|
53
|
-
3.
|
|
54
|
-
4.
|
|
55
|
-
5.
|
|
51
|
+
1. Use the existing suite to prove the affected business journey, relevant render health, and material errors.
|
|
52
|
+
2. Reuse journey assertions for the render, functional, and presentation properties they actually check; do not duplicate tests by tier.
|
|
53
|
+
3. Prove UX and layout claims in a real browser; functional success alone does not prove contrast.
|
|
54
|
+
4. Journeys claiming real backend proof use real first-party APIs. Do not add a golden-path gate automatically.
|
|
55
|
+
5. Follow the repo's existing test layout and required checks.
|
|
56
56
|
6. Use `getByRole`/`getByLabel`/`getByText` -- not CSS selectors
|
|
57
57
|
7. No `waitForTimeout()` -- wait for real state
|
|
58
58
|
8. Run route discovery and reachability analysis before E2E coverage audits; do not audit from memory, sampling, or file enumeration alone
|
|
@@ -61,13 +61,11 @@ Drop into each repo's AGENTS.md or CLAUDE.md:
|
|
|
61
61
|
11. Timeouts: 15s per action/assertion (`actionTimeout`/`expect.timeout`); no per-test timeout raises without justification
|
|
62
62
|
|
|
63
63
|
### Checks before a PR
|
|
64
|
-
- Run
|
|
65
|
-
- Run
|
|
66
|
-
-
|
|
64
|
+
- Run affected specs and relevant real-browser checks; report failures and unverified claims.
|
|
65
|
+
- Run a whole-app sweep only for an explicit audit, a shared-shell change with a real broad blast radius, or an existing binding repo requirement.
|
|
66
|
+
- Do not require a manifest, separate tier, or sweep solely because a browser route changed.
|
|
67
67
|
|
|
68
68
|
### CI
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
- the job passes only on an ALIVE verdict (DEAD, CANNOT-RUN, and EMPTY fail it)
|
|
72
|
-
- Reviewer will block uncovered interactive routes based on the audit evidence, not CI wiring
|
|
69
|
+
- Run existing required CI checks; do not create a new gate for routine feature work.
|
|
70
|
+
- Existing real-backend smoke drives the real app with deterministic seeded state and no first-party interception.
|
|
73
71
|
```
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
A green functional suite can pass while a route throws on render — when the only spec for that route **intercepts its own API** (`page.route('**/api/**')`), it never exercises the real render path that crashes. The presentation sweep catches this: it opens **every manifest route** in a real browser over the real render path (no first-party interception) and asserts the presentation floor **spine first**. It is the runner half of ensure-coverage's presentation axis (that skill *grades* the axis; this skill *runs* it and owns the result shape below).
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
A real-browser journey can prove the presentation properties it actually asserts. A functional pass alone does not prove contrast or other unchecked presentation properties; first-party interception does not prove the real backend render path.
|
|
8
8
|
|
|
9
9
|
## Instruments (import into a spec, or use the sweep)
|
|
10
10
|
|
|
@@ -28,9 +28,9 @@ test('/tasks renders without error', async ({ page, baseURL }) => {
|
|
|
28
28
|
})
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
## The sweep (
|
|
31
|
+
## The sweep (scoped whole-app work)
|
|
32
32
|
|
|
33
|
-
Run
|
|
33
|
+
Run a whole-app sweep only for an explicit audit, a changed shared shell with a real broad blast radius, or an existing binding repo requirement. Routine changes use affected journey and render checks instead. When a sweep is in scope:
|
|
34
34
|
```bash
|
|
35
35
|
E2E_AUTH_BYPASS=1 node <skill-dir>/scripts/presentation-sweep.mjs \
|
|
36
36
|
--manifest e2e/route-manifest.json --base-url http://127.0.0.1:3000 \
|
|
@@ -42,9 +42,9 @@ It exits non-zero on any `fail`/`blocked` and writes the per-`(route, level)` re
|
|
|
42
42
|
|
|
43
43
|
#### "No in-app way to view it" is not blocked
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
The sweep navigates *by URL*, so a route with no nav link or in-app entry point may still be reachable. A missing convenient link alone is not evidence that a required check is impossible. When needed, stand up the local build (dev server + disposable DB + seeded/bypass auth) and drive the route's URL directly:
|
|
46
46
|
|
|
47
|
-
- **
|
|
47
|
+
- **Whole-app sweep in scope → `presentation-sweep.mjs`** — produces the per-route results the ledger can consume.
|
|
48
48
|
- **Ad-hoc one-route check → `agent-browser` (preferred).** Navigate, screenshot the states that matter (expanded/collapsed/popover), read the console, clean up. The default for "is this one route OK before I merge."
|
|
49
49
|
- When agent-browser doesn't fit: **chrome-devtools MCP** for devtools surfaces (console, network, a perf/Lighthouse trace) alongside the render; **raw Playwright** (`page.goto(url)`) when scripting navigation into an authored spec.
|
|
50
50
|
|
|
@@ -73,7 +73,7 @@ Opt-in, for a surface built from a cited design source. ensure-coverage owns the
|
|
|
73
73
|
|
|
74
74
|
## What the sweep must do, and the result shape the ledger consumes
|
|
75
75
|
|
|
76
|
-
`coverage-ledger.mjs` is a static analyzer: it
|
|
76
|
+
`coverage-ledger.mjs` is a static analyzer: it cannot observe a `pageerror`, an overflow, or a layout shift. Use observed real-browser evidence for claims about those properties. A sweep can supply that evidence when in scope; an existing journey can supply it for the properties it actually checks. Follow the repo's required checks.
|
|
77
77
|
|
|
78
78
|
Given the generated route manifest (the `kind: "route"` surfaces from the surface inventory), the sweep must:
|
|
79
79
|
|
|
@@ -101,4 +101,4 @@ Emit JSON to `docs/tests/_generated/presentation-results.json`:
|
|
|
101
101
|
|
|
102
102
|
- `status` is `pass | fail | unverified | blocked`. `fail` and `blocked` exit the sweep non-zero. `unverified` is a ledger warning by default.
|
|
103
103
|
- `evidence` names the concrete observation: the `pageerror` text, the offending selector and overflow px, the unreachable param.
|
|
104
|
-
- The ledger reconciles
|
|
104
|
+
- The ledger reconciles results against its configured required levels. Report a `fail`, `blocked`, or missing required result accurately; do not claim a missing sweep alone blocks routine work unless explicitly agreed or required by the repo.
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
Checklist:
|
|
6
6
|
|
|
7
|
-
- [ ]
|
|
8
|
-
- [ ]
|
|
9
|
-
- [ ]
|
|
10
|
-
- [ ]
|
|
11
|
-
- [ ]
|
|
7
|
+
- [ ] The affected business journey, relevant renders, and material errors have appropriate evidence from the existing suite or focused checks
|
|
8
|
+
- [ ] Reused journey assertions are credited only for what they actually check; functional success alone does not prove contrast or layout
|
|
9
|
+
- [ ] UX and layout claims have real-browser evidence; first-party interception is not real backend proof
|
|
10
|
+
- [ ] A whole-app sweep is scoped to an explicit audit, a shared-shell change with a real broad blast radius, or an existing binding repo requirement; discover and check reachability when conducting an audit
|
|
11
|
+
- [ ] Required checks ran, and actual failures or unverified obligations are reported with their cause. A reviewer's inability to run a check is not evidence that the diff lacks coverage
|
|
12
12
|
- [ ] No `waitForTimeout()` -- use explicit waits
|
|
13
13
|
- [ ] No CSS class assertions -- test user-visible behavior
|
|
14
14
|
- [ ] **No test skipped or disabled.** The PR adds no `test.skip` / `xit` / `describe.skip`, no conditional skip unless CI still runs the test where the condition is false (a platform or optional-dependency skip), no disguised `if (!x) return` guard. A missing precondition is **seeded**; an un-sandboxable/flaky case goes to the **quarantine lane** (non-blocking, graded `Unverified`), never skipped. A `TODO`/issue link does **not** authorize a skip (policy: `ensure-coverage/references/process/test-strategy.md`)
|
|
@@ -17,10 +17,9 @@ Checklist:
|
|
|
17
17
|
- [ ] Auth in shared fixtures, not duplicated
|
|
18
18
|
- [ ] Bugfix PRs have regression test covering the exact failure
|
|
19
19
|
- [ ] Tier 3 journeys use real APIs (no mocking internal endpoints)
|
|
20
|
-
- [ ]
|
|
21
|
-
- [ ] Specs tagged `@covers`/`@level` so the ledger resolves them
|
|
20
|
+
- [ ] Existing golden-path and ledger conventions are followed where required; no new gate is demanded automatically
|
|
22
21
|
|
|
23
|
-
**Red flags
|
|
22
|
+
**Red flags:** treating a route as rendered only because a file exists, assertions that pass on a 404 or empty page, fixed sleeps, unsupported skips or guards, and an authorized lane that only times out instead of proving its subject rendered. Report material gaps and failures. Do not block solely for an absent manifest, sweep, or separate tier unless explicitly agreed or required by the repo.
|
|
24
23
|
|
|
25
24
|
**Lead with the verdict, then follow-ups.** Put the verdict at the **top** of the review (and any coverage `notes.md`) — *is this surface covered / ship-ready, or do gaps remain?* — then what the tests prove and deliberately don't, and concrete follow-up action items (owner/level where known) for anything uncovered.
|
|
26
25
|
|
|
@@ -29,9 +28,8 @@ Checklist:
|
|
|
29
28
|
### E2E Coverage
|
|
30
29
|
|
|
31
30
|
**Missing:**
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
- `/tasks` has no presentation-sweep result (render unproven)
|
|
31
|
+
- The affected date-filter journey has no evidence for its error state
|
|
32
|
+
- The claimed contrast improvement has no real-browser contrast evidence
|
|
35
33
|
|
|
36
34
|
**Issues:**
|
|
37
35
|
- `line 42`: Uses `waitForTimeout(3000)` -- replace with `waitForResponse`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Route Discovery and the Route Manifest
|
|
2
2
|
|
|
3
|
-
> Read when: a
|
|
3
|
+
> Read when: an audit, a shared-shell change with a real broad blast radius, or a binding repo requirement needs route discovery or a current manifest. A routine route change does not itself require a whole-app inventory or regeneration.
|
|
4
4
|
|
|
5
5
|
## Discover first, never audit from memory
|
|
6
6
|
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: engineering
|
|
3
|
+
description: "Project engineering conventions and explicit /engineering init: feature-delivery priorities, focused verification and review, operational boundaries, and tracker routing. Use when setting up AGENTS.md or CONTRIBUTING.md, saving engineering defaults, or before creating an engineering issue, spec, epic, ticket, or sub-issue on GitHub or Linear. Reads existing policy without writing during ordinary work. NOT the issue-to-PR workflow (resolve-issues), release execution (resolve-release), Git delivery (github-flow), or CI setup (github-actions)."
|
|
4
|
+
release-version: 0.45.0
|
|
5
|
+
---
|
|
6
|
+
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
|
+
# Engineering
|
|
8
|
+
|
|
9
|
+
Keep engineering work focused on the requested business outcome. Read the project's
|
|
10
|
+
existing `AGENTS.md` and `CONTRIBUTING.md` and the relevant domain
|
|
11
|
+
hazards or ADRs. Follow binding local requirements. Do not turn ordinary feature
|
|
12
|
+
work into a setup, audit, framework, or gate project.
|
|
13
|
+
|
|
14
|
+
## Find the task
|
|
15
|
+
|
|
16
|
+
| Task | Action |
|
|
17
|
+
| --- | --- |
|
|
18
|
+
| `/engineering init` or an explicit request to register project defaults | [Initialize](#initialize-project-guidance) |
|
|
19
|
+
| Ordinary implementation or review | Read applicable guidance; apply the defaults below without writing files |
|
|
20
|
+
| Create an issue, spec, epic, or sub-issue | [Tracker routing](#tracker-routing); do not initialize as a side effect |
|
|
21
|
+
| Existing guidance conflicts with a proposed default | Preserve it; ask for a decision only if the requested action needs one |
|
|
22
|
+
| Choose additional setup capabilities | [Initialization scope](references/init-scope.md); route to the owning skill |
|
|
23
|
+
|
|
24
|
+
## Delivery defaults
|
|
25
|
+
|
|
26
|
+
Prioritize the requested outcome. Supporting code, tests, and infrastructure need
|
|
27
|
+
a direct dependency, a binding requirement, or a demonstrated defect. Reuse existing
|
|
28
|
+
patterns and sufficient proof. Preserve security, tenancy, financial correctness,
|
|
29
|
+
data integrity, and cleanup. Do not invent recovery, compatibility, test layers,
|
|
30
|
+
frameworks, or gates for speculative scenarios. Keep acceptance stable and stop when
|
|
31
|
+
the outcome works and the agreed checks pass. Report unrelated debt without fixing it.
|
|
32
|
+
|
|
33
|
+
These defaults do not waive project rules, authorize external actions, or require
|
|
34
|
+
extra planning roles. Ordinary implementation choices stay with the implementer.
|
|
35
|
+
|
|
36
|
+
## Initialize project guidance
|
|
37
|
+
|
|
38
|
+
An explicit `/engineering init` authorizes the additions described here in the
|
|
39
|
+
selected project. Automatic skill discovery, an issue-routing trigger, installation,
|
|
40
|
+
updates, and quoted examples do not authorize writes. When defaults would help an
|
|
41
|
+
unconfigured project, offer init once and continue; setup is not a feature prerequisite.
|
|
42
|
+
|
|
43
|
+
1. Read existing project guidance and check for policy conflicts. The script preserves
|
|
44
|
+
existing sections; it does not interpret or replace the project's decisions.
|
|
45
|
+
2. Set `SKILL_DIR` to this installed skill's directory. Preview:
|
|
46
|
+
|
|
47
|
+
```sh
|
|
48
|
+
node "$SKILL_DIR/scripts/init.mjs" [--repo-root <project-root>] \
|
|
49
|
+
[--github-repo <owner/name>] [--linear-project "<name>"]...
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
3. For the explicitly authorized init, run the same command with `--write`. A preview
|
|
53
|
+
request alone stays read-only. No second approval is needed for the additions
|
|
54
|
+
already requested; a conflicting policy change needs separate agreement.
|
|
55
|
+
4. Report created, updated, and preserved files and any unresolved project decisions.
|
|
56
|
+
Do not install dependencies, generate CI, create issues, push, or deploy as part of init.
|
|
57
|
+
|
|
58
|
+
The default scope is the nearest Git root, or the current directory without a Git
|
|
59
|
+
repository. `--repo-root` explicitly selects a different project. Do not walk parent
|
|
60
|
+
projects or edit global agent files. A GitHub origin or explicit `--github-repo` supplies
|
|
61
|
+
the known issue destination; without one, write neutral routing instructions and
|
|
62
|
+
resolve the destination before any issue creation. Never infer a Linear project.
|
|
63
|
+
|
|
64
|
+
| File or section | Init owns |
|
|
65
|
+
| --- | --- |
|
|
66
|
+
| `AGENTS.md` | Missing `Feature delivery` section and a pointer to `CONTRIBUTING.md` |
|
|
67
|
+
| `CONTRIBUTING.md` | Missing `Engineering conventions`, `Testing conventions`, and `Issue tracking` sections |
|
|
68
|
+
|
|
69
|
+
The templates are [feature delivery](references/feature-delivery.md),
|
|
70
|
+
[engineering conventions](references/engineering-conventions.md),
|
|
71
|
+
[testing conventions](../test-quality/references/testing-conventions.md), and
|
|
72
|
+
[tracker conventions](references/tracker-conventions.md). Install `engineering` with
|
|
73
|
+
its required sibling `test-quality`; init reads that skill's canonical template
|
|
74
|
+
without invoking its writer. `test-quality` owns the testing rules and deliberate
|
|
75
|
+
updates; init only adds a missing section. The [skill review](references/init-scope.md)
|
|
76
|
+
explains what is included and what remains opt-in.
|
|
77
|
+
|
|
78
|
+
Existing sections, including legacy `conventions:tracker` blocks written by
|
|
79
|
+
`contributing`, are preserved byte-for-byte. Repeated init is not a refresh and
|
|
80
|
+
leaves manual edits unchanged. No force/update mode is implied. If policy needs to
|
|
81
|
+
change, agree the specific change rather than rerunning setup over it.
|
|
82
|
+
|
|
83
|
+
Every target is checked before writing. Invalid targets, unreadable files, malformed
|
|
84
|
+
owned markers, dangling links, and links outside the selected project refuse setup.
|
|
85
|
+
Valid in-project symlinks are preserved. Keep distinct agent-instruction and
|
|
86
|
+
contributor-guide files. Init does not read, create, or update `CLAUDE.md`.
|
|
87
|
+
Report a write error honestly; do not claim setup completed when it did not.
|
|
88
|
+
|
|
89
|
+
## Tracker routing
|
|
90
|
+
|
|
91
|
+
Read the destination from project guidance first, then the GitHub resources linked
|
|
92
|
+
from a source Linear project; ask if unresolved. An explicit user destination wins.
|
|
93
|
+
|
|
94
|
+
| Work | Default tracker |
|
|
95
|
+
| --- | --- |
|
|
96
|
+
| Product goals, business requirements, consulting work, delivery summaries | Linear where used by the project |
|
|
97
|
+
| Engineering specs, implementation epics, technical tasks, engineering bugs | GitHub |
|
|
98
|
+
|
|
99
|
+
Before creating work:
|
|
100
|
+
|
|
101
|
+
1. Classify the work, not the conversation it came from. Engineering implementation
|
|
102
|
+
stays in GitHub even when the request started in Linear.
|
|
103
|
+
2. Resolve the actual repository. Do not guess among multiple repos or fall back to
|
|
104
|
+
Linear because the GitHub destination is missing.
|
|
105
|
+
3. Search the destination for duplicates and reuse a match.
|
|
106
|
+
4. Link the GitHub epic to its Linear source requirement once. Do not create
|
|
107
|
+
implementation children in Linear or mirror every ticket there.
|
|
108
|
+
5. Report engineering delivery in Linear as a linked summary; the requester owns
|
|
109
|
+
product acceptance.
|
|
110
|
+
|
|
111
|
+
The retained tracker-only helper supports explicit requests to persist or update
|
|
112
|
+
that section:
|
|
113
|
+
|
|
114
|
+
```sh
|
|
115
|
+
node "$SKILL_DIR/scripts/persist-conventions.mjs" --repo-root <project-root> \
|
|
116
|
+
[--github-repo <owner/name>] [--linear-project "<name>"]... [--if-missing] [--write]
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
It previews without `--write`; `--if-missing` preserves an existing tracker block.
|
|
120
|
+
Without that flag, an authorized tracker refresh replaces only its managed block.
|
|
121
|
+
It retains the existing shared convention-writer behavior; use `init.mjs` for
|
|
122
|
+
project setup with the all-target validation and preservation rules above. Ordinary
|
|
123
|
+
issue routing never runs either writer automatically. The old `contributing` name
|
|
124
|
+
is archived, not a second active policy owner.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
## Engineering conventions
|
|
2
|
+
|
|
3
|
+
### Deliver the requested outcome
|
|
4
|
+
|
|
5
|
+
Build the smallest complete end-to-end change using existing patterns and tools.
|
|
6
|
+
Supporting code, tests, and infrastructure need a direct dependency, a binding
|
|
7
|
+
requirement, or a concrete defect. Do not invent fallback values, retries,
|
|
8
|
+
compatibility modes, or abstractions for hypothetical future needs. Preserve
|
|
9
|
+
necessary input validation and report unexpected failures through existing boundaries.
|
|
10
|
+
|
|
11
|
+
### Verify proportionately
|
|
12
|
+
|
|
13
|
+
Reuse tests and checks that already prove the changed behavior. Add focused proof
|
|
14
|
+
for material risks at the lowest level that observes the real outcome. Mocks do
|
|
15
|
+
not prove the persistence, authorization, or transaction behavior they replace.
|
|
16
|
+
Do not duplicate proof across layers, pin source text instead of behavior, or
|
|
17
|
+
start a whole-app audit for a local change. Run the project's required checks;
|
|
18
|
+
report failed or unavailable checks honestly, without weakening them to get green.
|
|
19
|
+
|
|
20
|
+
### Review and finish
|
|
21
|
+
|
|
22
|
+
Block delivery for a concrete supported failure, an explicit unmet requirement,
|
|
23
|
+
or missing agreed required proof, not speculative hardening or optional tests.
|
|
24
|
+
Keep acceptance criteria stable; new scope needs agreement. Stop when the outcome
|
|
25
|
+
works and the agreed checks pass. Report unrelated debt without fixing it.
|
|
26
|
+
|
|
27
|
+
### Respect operational boundaries
|
|
28
|
+
|
|
29
|
+
Preserve authentication, tenant isolation, financial correctness, data integrity,
|
|
30
|
+
and cleanup. Follow this project's existing commit, PR, queue, and release policy.
|
|
31
|
+
Do not invent a delivery flow, introduce new CI gates, or treat initialization as
|
|
32
|
+
authorization to push, deploy, migrate shared data, change permissions, or release.
|