@deslop/coding-standards 0.1.1064 → 0.1.1066
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/README.md +16 -4
- package/dist/install.js +7 -14
- package/package.json +1 -1
- package/skills/architecture/EVALS.md +21 -0
- package/skills/architecture/SKILL.md +41 -0
- package/skills/design/EVALS.md +46 -0
- package/skills/design/SKILL.md +28 -25
- package/skills/engineering/EVALS.md +19 -0
- package/skills/engineering/SKILL.md +9 -3
- package/skills/review/EVALS.md +24 -0
- package/skills/review/SKILL.md +58 -0
- package/skills/testing/EVALS.md +22 -0
- package/skills/testing/SKILL.md +7 -6
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Coding standards
|
|
2
2
|
|
|
3
|
-
A strict Oxlint preset and an installer for the engineering, design and
|
|
3
|
+
A strict Oxlint preset and an installer for the architecture, engineering, design, testing and review skills. Requires Node 26+.
|
|
4
4
|
|
|
5
5
|
## Install the skills
|
|
6
6
|
|
|
@@ -10,7 +10,9 @@ Run inside a Git repository, including a linked worktree:
|
|
|
10
10
|
vpx @deslop/coding-standards@latest
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
It copies
|
|
13
|
+
It copies all package-owned skills into the repository's existing `.agents`, `.claude` and `.codex` directories, including their `EVALS.md`. It always writes `.claude`, which Claude Code reads, and writes `.agents` when no `.codex` exists. A refresh replaces only those names; destinations outside the repository or inside global agent configuration are rejected. Other skills, sign-ins, manifests, lockfiles and lint configuration stay unchanged. Edit package sources, then refresh installed copies with the CLI.
|
|
14
|
+
|
|
15
|
+
Use architecture for mechanisms and ownership, engineering for code, design for visible behavior, testing for useful proof and review for independent critique and cleanup. Refer to another skill by name, not its installation path. Personal orchestration, delivery, machine commands and reply preferences stay outside this package.
|
|
14
16
|
|
|
15
17
|
## Use the lint preset
|
|
16
18
|
|
|
@@ -37,7 +39,7 @@ The preset needs Effect-tsgo's patched Oxlint, so keep the patch command in the
|
|
|
37
39
|
| Owner | Decision |
|
|
38
40
|
| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
39
41
|
| `src/` | Flat package structure; rules in `src/rules`, no separate plugin or install-test harness |
|
|
40
|
-
| `skills/` | Maintained engineering, design and
|
|
42
|
+
| `skills/` | Maintained architecture, engineering, design, testing and review sources; refresh repository copies from the TypeScript CLI, no build needed |
|
|
41
43
|
| Lint rules | Prefer an equivalent maintained rule before custom enforcement; consumer code conforms to strict standards, not the reverse. Fix broken or imprecise rules, not inconvenient valid diagnostics. A rule targets code the engineering skill and the other rules allow; an edge case that only unusual code reaches takes an inline disable with its reason, never a looser rule |
|
|
42
44
|
| Rule proof | Existing public CLI regression cases, with accepted and rejected controls; no severity or exclusion workaround |
|
|
43
45
|
|
|
@@ -70,6 +72,16 @@ node tools/coding-standards/src/install.ts
|
|
|
70
72
|
| [Interface Craft](https://www.interfacecraft.dev/library), the user's licensed library | Before-the-first-draft steps, range and depth, agent-run tuning, the four-pass critique, optical, color, type and motion values; ideas adapted in our words, no files copied |
|
|
71
73
|
| [Apple HIG](https://developer.apple.com/design/human-interface-guidelines), [Linear](https://linear.app/now/how-we-redesigned-the-linear-ui), [Rauno Freiberg](https://rauno.me/craft/interaction-design), [Geist](https://vercel.com/geist), [Radix](https://www.radix-ui.com/primitives/docs/overview/accessibility) and [WCAG](https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html) | The quality bar, platform conventions, semantic type and glass, gesture behavior, border and shadow roles, dialog contracts and contrast ratios |
|
|
72
74
|
|
|
73
|
-
|
|
75
|
+
Additional sources for this refinement:
|
|
76
|
+
|
|
77
|
+
- [OpenClaw test audit](https://github.com/openclaw/openclaw/blob/main/.agents/skills/test-audit/SKILL.md): distinct regression protection and deletion of tautological tests; retain independent boundary contracts.
|
|
78
|
+
- [Trail of Bits](https://github.com/trailofbits/skills): reproduce the strongest reachable counterexample and inspect variants of a known root cause; no routine security-audit machinery.
|
|
79
|
+
- [Bret Victor](https://worrydream.com/ExplorableExplanations/) and [Nicky Case](https://blog.ncase.me/how-i-make-an-explorable-explanation/): concrete cause and consequence, with optional exploration rather than mandatory navigation.
|
|
80
|
+
- [Taste skill](https://github.com/Leonxlnx/taste-skill/tree/a60a36dc2bb3bb77ccf17f2f62041f5ca8a458b9): real subject inventory and screenshot critique; no mandatory image, motion or component quotas.
|
|
81
|
+
- [Anatomy](https://github.com/wheresryan22/anatomy): physical and isometric explanations when their relationships are the concept; no mandatory dense machine or separate card frame.
|
|
82
|
+
- [Antfu design](https://github.com/antfu/design): native token hierarchy, density and affordance; no Vue or UnoCSS dependency added.
|
|
83
|
+
- [Animated sprites](https://github.com/elithrar/dotfiles/tree/main/.agents/skills/animated-sprites): separate structural validity from perceptual motion and actual timing; no character assets required.
|
|
84
|
+
|
|
85
|
+
These are selectively adapted ideas, not imported frameworks. Concrete behavior, existing stack and settled user decisions govern the maintained skills. Source inspection and drafted evaluation criteria do not establish a model-quality improvement.
|
|
74
86
|
|
|
75
87
|
</details>
|
package/dist/install.js
CHANGED
|
@@ -25233,13 +25233,14 @@ const runWith = (command, config) => {
|
|
|
25233
25233
|
};
|
|
25234
25234
|
//#endregion
|
|
25235
25235
|
//#region package.json
|
|
25236
|
-
var version = "0.1.
|
|
25236
|
+
var version = "0.1.1066";
|
|
25237
25237
|
//#endregion
|
|
25238
25238
|
//#region src/install.ts
|
|
25239
25239
|
const cli = pipe(make("deslop-coding-standards", {}, fnUntraced(function* () {
|
|
25240
25240
|
const fs = yield* FileSystem;
|
|
25241
25241
|
const path = yield* Path$1;
|
|
25242
25242
|
const source = path.join(import.meta.dirname, "../skills");
|
|
25243
|
+
const names = yield* fs.readDirectory(source);
|
|
25243
25244
|
const handle = yield* make$4("git", ["rev-parse", "--show-toplevel"], { stdout: "pipe" });
|
|
25244
25245
|
const result = yield* all({
|
|
25245
25246
|
exitCode: handle.exitCode,
|
|
@@ -25287,22 +25288,14 @@ const cli = pipe(make("deslop-coding-standards", {}, fnUntraced(function* () {
|
|
|
25287
25288
|
if (contains(yield* fs.readDirectory(target), "skills")) yield* validate(path.join(target, "skills"));
|
|
25288
25289
|
}
|
|
25289
25290
|
const skills = yield* canonical(path.join(target, "skills"));
|
|
25290
|
-
for (const name of
|
|
25291
|
-
"engineering",
|
|
25292
|
-
"design",
|
|
25293
|
-
"testing"
|
|
25294
|
-
]) {
|
|
25291
|
+
for (const name of names) {
|
|
25295
25292
|
const owned = path.join(skills, name);
|
|
25296
25293
|
if (isGlobal(owned) || some$1(globals, (global) => pipe(global, startsWith(`${owned}${path.sep}`)))) return yield* UserError.make({ cause: `${owned} overlaps global agent configuration.` });
|
|
25297
25294
|
}
|
|
25298
25295
|
}
|
|
25299
25296
|
for (const directory of targets) {
|
|
25300
25297
|
yield* fs.makeDirectory(path.join(root, directory, "skills"), { recursive: true });
|
|
25301
|
-
for (const name of
|
|
25302
|
-
"engineering",
|
|
25303
|
-
"design",
|
|
25304
|
-
"testing"
|
|
25305
|
-
]) {
|
|
25298
|
+
for (const name of names) {
|
|
25306
25299
|
const target = path.join(root, directory, "skills", name);
|
|
25307
25300
|
yield* fs.remove(target, {
|
|
25308
25301
|
force: true,
|
|
@@ -25311,10 +25304,10 @@ const cli = pipe(make("deslop-coding-standards", {}, fnUntraced(function* () {
|
|
|
25311
25304
|
yield* fs.copy(path.join(source, name), target);
|
|
25312
25305
|
}
|
|
25313
25306
|
}
|
|
25314
|
-
yield* log(`Installed
|
|
25315
|
-
})), withDescription("
|
|
25307
|
+
yield* log(`Installed ${join$1(names, ", ")} in ${pipe(targets, map$9((directory) => path.join(root, directory, "skills")), join$1(", "))}.`);
|
|
25308
|
+
})), withDescription("Install the package’s architecture, engineering, design, testing and review skills at the Git repository root, including linked worktrees. Copy into each existing .agents, .claude and .codex skills directory, always .claude, and .agents when no .codex exists. Replace only package-owned names; preserve other skills and global configuration. Reject destinations outside the repository before copying. Refer to skills by name. Run the latest CLI transiently without adding a dependency. These skills belong in repositories, not global configuration."), withExamples([{
|
|
25316
25309
|
command: "vpx @deslop/coding-standards@latest",
|
|
25317
|
-
description: "Install or refresh this repository’s
|
|
25310
|
+
description: "Install or refresh this repository’s shared skills without adding a dependency."
|
|
25318
25311
|
}]));
|
|
25319
25312
|
runMain(pipe(cli, run({ version }), scoped, provide(layer)));
|
|
25320
25313
|
//#endregion
|
package/package.json
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Architecture evaluations
|
|
2
|
+
|
|
3
|
+
## architecture
|
|
4
|
+
|
|
5
|
+
### Task
|
|
6
|
+
|
|
7
|
+
Let me import a folder of data files, see progress and stop without losing completed records. Choose the architecture before writing product code. Explain only the decisions I need to make.
|
|
8
|
+
|
|
9
|
+
### Criteria
|
|
10
|
+
|
|
11
|
+
Judge the mechanism and caller obligations, not the number of modules or diagrams.
|
|
12
|
+
|
|
13
|
+
- Trace existing CLI, HTTP and browser consumers and preserve single-file behavior.
|
|
14
|
+
- Keep persistence and cancellation in the existing service and its operation scope.
|
|
15
|
+
- Reject an unnecessary job registry, detached writer, mirrored progress store and generic importer factory.
|
|
16
|
+
- Give completion one observable meaning: the emitted record is durable.
|
|
17
|
+
- Handle reachable read, decode and write failures without blanket retries or empty-success defaults.
|
|
18
|
+
- Use a disposable experiment for an uncertain technical contract; ask only about an unresolved user outcome.
|
|
19
|
+
- Name a concrete contract before adding a boundary, dependency or background lifetime.
|
|
20
|
+
|
|
21
|
+
Grade simplicity and preserved behavior separately. A written design does not prove its implementation. Keep integrated planning and steering evaluations separate from this selected-skill case.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architecture
|
|
3
|
+
description: 'Choose the smallest production mechanism, module boundaries, state owners and failure contracts. Use for new features, consequential refactors and reviews of architectural complexity; engineering owns syntax and implementation conventions.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Architecture
|
|
7
|
+
|
|
8
|
+
Start from a real caller and the required outcome, not a pattern or framework. Apply engineering to the implementation. A new abstraction must remove a concrete obligation from its callers.
|
|
9
|
+
|
|
10
|
+
## Trace the operation
|
|
11
|
+
|
|
12
|
+
Read the nearest working feature and every affected consumer. Trace one successful operation and its strongest reachable failure through the existing modules. Identify the authoritative state, write boundary, resource lifetime and observable completion signal. Preserve the existing contracts that the change reaches.
|
|
13
|
+
|
|
14
|
+
Before code, settle these facts in the current plan, without creating another document:
|
|
15
|
+
|
|
16
|
+
- The caller's input, output and ordering obligations.
|
|
17
|
+
- One owner for each value, resource, side effect and failure.
|
|
18
|
+
- The existing module that can own the operation.
|
|
19
|
+
- The boundary where untrusted input becomes trusted data.
|
|
20
|
+
- What remains durable after interruption, and how the caller knows.
|
|
21
|
+
|
|
22
|
+
For a user-visible direction that remains open, decide it with the user before implementation; use orchestrator when available. Settle technical mechanisms with source, a disposable inline probe or a small executable prototype. Do not ask the user to choose between implementation details that evidence can rank.
|
|
23
|
+
|
|
24
|
+
## Choose the smallest mechanism
|
|
25
|
+
|
|
26
|
+
- **Existing shape.** Extend the closest working feature before creating a service, module or dependency. Keep domain code independent of transport and UI types.
|
|
27
|
+
- **Direct operation.** Prefer a function or existing service method. Add a service for a distinct capability or lifetime, not to rename a forwarded call. Add another backend only when a real consumer needs it.
|
|
28
|
+
- **Authoritative state.** Derive values from their owner. Do not mirror server state, request state, caches or pending results in another store. A persisted value has one write boundary.
|
|
29
|
+
- **Lifetime.** Keep finite request work in its request scope. A stream serves progressive results; it does not require a job system. Add background ownership only when work must survive the caller, with a real owner for stopping, recovery and completion.
|
|
30
|
+
- **Failure.** Handle failures the caller can reach. Validate at the boundary; retain domain identity, causes and completed work. Never turn failure into empty success or add blanket retries, fallbacks and catch-all defaults.
|
|
31
|
+
- **Retries.** For a contract that permits retry after an unknown write outcome, keep the request identity stable for one intent. Add no retry policy or idempotency machinery to operations that do not need that contract.
|
|
32
|
+
- **Boundaries.** Split code when dependencies, invariants or lifetimes differ. Prefer a substantive module to a chain of forwarding files. A small component or helper with one consumer stays beside that consumer.
|
|
33
|
+
- **Variations.** Use explicit variants for genuinely different behaviors. Do not add boolean combinations, a plugin registry, a generic configuration object or a universal factory for hypothetical callers.
|
|
34
|
+
|
|
35
|
+
Compare a new mechanism with the direct existing-module version. Count new state owners, boundaries, dependencies and failure paths, not just lines. Keep the simpler version unless a concrete contract rules it out. Prove that contract with a question-sized experiment; use a council only for a consequential unresolved tradeoff.
|
|
36
|
+
|
|
37
|
+
## Challenge the design
|
|
38
|
+
|
|
39
|
+
Try the strongest reachable counterexample: an interrupted write, repeated intent, stale response, overlapping caller or dependency failure. Check which owner preserves the invariant. Use testing to select evidence, not to turn every doubt into a permanent test.
|
|
40
|
+
|
|
41
|
+
Remove each mechanism whose deletion preserves the required outcomes, existing reachable contracts, security, accessibility and useful regression protection. Do not defend an abstraction because it is already implemented. State what breaks without it; if nothing breaks, remove it.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# design evaluations
|
|
2
|
+
|
|
3
|
+
## design
|
|
4
|
+
|
|
5
|
+
### Task
|
|
6
|
+
|
|
7
|
+
Make importing records clear and comfortable on my iPhone, including progress, stopping and seeing what was kept. Show me the design before changing the service.
|
|
8
|
+
|
|
9
|
+
### Criteria
|
|
10
|
+
|
|
11
|
+
Judge the browser experience, not the amount of UI produced.
|
|
12
|
+
|
|
13
|
+
- Use the existing import workspace and realistic record names.
|
|
14
|
+
- Make idle, active, cancelled, completed and empty states understandable.
|
|
15
|
+
- Keep completed records visible when the import stops; distinguish stop from undo.
|
|
16
|
+
- Establish readable light and dark views at 390-point width, touch targets and keyboard access.
|
|
17
|
+
- Settle the representative journey with the user before backend changes; expand only its approved direction.
|
|
18
|
+
- Remove redundant controls and status text; use interaction to explore a real consequence, not to navigate an explanation.
|
|
19
|
+
|
|
20
|
+
Inspect every visible state and transition. Grade hierarchy, behavior and readability independently of engineering and proof-capture quality. The user judges the final variants.
|
|
21
|
+
|
|
22
|
+
## overview-format
|
|
23
|
+
|
|
24
|
+
### Task
|
|
25
|
+
|
|
26
|
+
Give me a quick overview of these changes: Review moved into coding-standards; Architecture was added; open choices need a prototype and approval; routine fixes do not; proof uses inline probes before permanent tests. These instruction changes are local, not installed. There are no UI captures, measurements or interactive choices to show.
|
|
27
|
+
|
|
28
|
+
### Criteria
|
|
29
|
+
|
|
30
|
+
- Use a short Markdown table or list. Do not produce HTML, an image of the same rows, controls or a separate presentation app.
|
|
31
|
+
- Keep every supplied distinction, including routine fixes and installation state, with the fewest words that remain clear.
|
|
32
|
+
- Do not add an introduction or duplicate the overview in a summary.
|
|
33
|
+
- Judge the delivered artifact, not an explanation of format selection. Leave native-run behavior unproved until the case runs.
|
|
34
|
+
|
|
35
|
+
## animated-mechanism
|
|
36
|
+
|
|
37
|
+
### Task
|
|
38
|
+
|
|
39
|
+
Show why an importer must write a record before reporting progress. Show the record becoming durable, then the progress event, as a short automatic animation. Do not make me click. This is an illustrative explanation, not evidence from a real application.
|
|
40
|
+
|
|
41
|
+
### Criteria
|
|
42
|
+
|
|
43
|
+
- Use the animation to show the named record, durable storage and progress event in the correct causal order.
|
|
44
|
+
- Keep the message understandable without controls, extra introductions or duplicated prose.
|
|
45
|
+
- Distinguish illustration from application proof; inspect actual timing rather than inferring motion from a still.
|
|
46
|
+
- HTML adds the requested animated mechanism; a styled list of phases alone does not meet the task.
|
package/skills/design/SKILL.md
CHANGED
|
@@ -5,7 +5,7 @@ description: 'UI and UX rules for product screens, creative pages and visual exp
|
|
|
5
5
|
|
|
6
6
|
# Design
|
|
7
7
|
|
|
8
|
-
Follow the repository's `CODING_STANDARDS.md`
|
|
8
|
+
Follow the engineering skill and the repository's `CODING_STANDARDS.md` when present; where it sets a style, such as square borders, it wins over this skill.
|
|
9
9
|
|
|
10
10
|
**The bar.** Build what people recommend for its polish and simplicity: Linear, T3 Code, Apple's own apps and apple.com. A person who is not technical uses it without help. The repository's existing screens are the floor, not the target.
|
|
11
11
|
|
|
@@ -13,11 +13,11 @@ Follow the repository's `CODING_STANDARDS.md` and the engineering skill; where `
|
|
|
13
13
|
|
|
14
14
|
## Before the first draft
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
For an open direction, show a question-sized prototype before polishing it. Use orchestrator when available to settle consequential user choices. Approval is provisional: let the user try a small real journey before expensive expansion. Own routine refinement, but expect the real experience to change the user's direction.
|
|
17
17
|
|
|
18
18
|
1. **Task and feeling.** Name the person, their task, their context and the feeling the product gives, such as calm, fast or trustworthy. Name three qualities the person notices, each with what "excellent" looks like.
|
|
19
19
|
2. **Baseline.** Name the category and platform, and the reference screen for each screen you build: one of Apple's apps on iOS, the product's existing screen, or a reference the user named. Capture the reference in the states you need. Start from the system or established component defaults.
|
|
20
|
-
3. **Range.**
|
|
20
|
+
3. **Range.** Compare structurally different solutions only when the structure has a real unresolved fork, on the same data. Include a simpler solution that removes unnecessary controls. Show the smallest comparison that decides the fork, then develop the chosen direction.
|
|
21
21
|
4. **States.** List every screen, its reachable states (empty, loading, partial, error, success, long content) and the events between them, before any code. Group states by concern instead of multiplying every combination.
|
|
22
22
|
5. **Settled choices.** Carry forward what the user approved and what he removed. Never re-add a removed element or change an approved detail without a request.
|
|
23
23
|
|
|
@@ -98,9 +98,9 @@ The first draft the user sees is already the refined one. Work through these ste
|
|
|
98
98
|
|
|
99
99
|
## Prototype and tune
|
|
100
100
|
|
|
101
|
-
**Variants.**
|
|
101
|
+
**Variants.** For a real unresolved choice, show one representative journey or a small comparison on the same realistic data before product code. Use the app's tokens, components, copy and behavior. Add interaction only when manipulating the subject exposes a consequential difference; never add tabs or a state dashboard merely to navigate the explanation. Get the direction approved before expanding its states and polish. For a native app the render settles structure and flow; settle its native appearance in simulator captures.
|
|
102
102
|
|
|
103
|
-
**Real host.**
|
|
103
|
+
**Real host.** For a consequential behavior or taste choice, build one complete representative journey with realistic data in the real host: the browser preview for the web, the simulator for a native app. Let the user try it before broader implementation and polish. Complete specified fixes and approved-pattern work with focused proof, without a user checkpoint. Carry unaffected choices forward when feedback changes the journey; revise the affected design instead of defending prototype approval. An HTML imitation of a native screen misleads.
|
|
104
104
|
|
|
105
105
|
**Tune.** Settle values yourself. For values you cannot settle by reasoning, such as spacing, timing, springs or blur, capture candidates side by side, including both extremes, and judge them against the reference. Write the chosen values into the source and recapture.
|
|
106
106
|
|
|
@@ -124,7 +124,7 @@ Repair in this order: grouping, hierarchy, alignment, copy, then states. Recaptu
|
|
|
124
124
|
| Generic copy such as "seamless" or "Learn more" | Each label names its capability or the outcome |
|
|
125
125
|
| Content that waits for an entrance animation | The first frame is readable and actionable |
|
|
126
126
|
|
|
127
|
-
**Show the design
|
|
127
|
+
**Show the design.** Use screenshots for layout and short videos for behavior. Keep text readable on a phone, match the app's visual style and show the input, action and outcome without unrelated decoration. Evidence must show the real application.
|
|
128
128
|
|
|
129
129
|
## Creative mode
|
|
130
130
|
|
|
@@ -132,28 +132,31 @@ Ground the page in its subject: name the audience and the page's one job, and ta
|
|
|
132
132
|
|
|
133
133
|
## Visual explanations
|
|
134
134
|
|
|
135
|
-
These rules cover diagrams, review pages and
|
|
136
|
-
|
|
137
|
-
| The reader asks | Exhibit
|
|
138
|
-
| ------------------------------------ |
|
|
139
|
-
| What does it look like now? |
|
|
140
|
-
| What changed on screen? | Before and after pair with the same data, the old state left
|
|
141
|
-
| Which transitions are allowed? | State machine with forbidden edges marked
|
|
142
|
-
| What happens in order, and who acts? | Sequence in swimlanes, one lane per actor
|
|
143
|
-
| Where did the time go? | Timeline with bars on one time axis
|
|
144
|
-
| How much faster, bigger or cheaper? | Bars on a shared axis, values printed on the bars
|
|
145
|
-
| Where exactly is the defect? | Annotated capture with numbered markers and short notes
|
|
146
|
-
| Which requirement has which proof? | Coverage grid of requirements against proof, colored by state
|
|
147
|
-
| How do the parts relate? |
|
|
148
|
-
| Which option is better? | Options side by side at the same size and with the same data
|
|
149
|
-
| What will a video show? | Storyboard of chapter frames, the outcome frame marked
|
|
135
|
+
These rules cover diagrams, review pages and agent answers. Transmit a specific message with the fewest words and least effort. Write that message privately before choosing the form. Markdown lists, tables and embedded captures are visual representations. Use them directly when they carry the message; do not rebuild them in HTML. HTML complements Markdown only when a necessary spatial relationship, motion or direct manipulation exceeds Markdown's capabilities. Name that added capability privately before rendering; decoration is not one. Use a sentence when it is clearer. Never turn a source list, process recap or checklist into a dashboard.
|
|
136
|
+
|
|
137
|
+
| The reader asks | Exhibit |
|
|
138
|
+
| ------------------------------------ | -------------------------------------------------------------- |
|
|
139
|
+
| What does it look like now? | Real capture, or a named system view with changed parts marked |
|
|
140
|
+
| What changed on screen? | Before and after pair with the same data, the old state left |
|
|
141
|
+
| Which transitions are allowed? | State machine with forbidden edges marked |
|
|
142
|
+
| What happens in order, and who acts? | Sequence in swimlanes, one lane per actor |
|
|
143
|
+
| Where did the time go? | Timeline with bars on one time axis |
|
|
144
|
+
| How much faster, bigger or cheaper? | Bars on a shared axis, values printed on the bars |
|
|
145
|
+
| Where exactly is the defect? | Annotated capture with numbered markers and short notes |
|
|
146
|
+
| Which requirement has which proof? | Coverage grid of requirements against proof, colored by state |
|
|
147
|
+
| How do the parts relate? | Named actors and explicit relationships; no unlabeled blocks |
|
|
148
|
+
| Which option is better? | Options side by side at the same size and with the same data |
|
|
149
|
+
| What will a video show? | Storyboard of chapter frames, the outcome frame marked |
|
|
150
150
|
|
|
151
151
|
When none fits, choose the form that matches the data's shape; draw a list as a list.
|
|
152
152
|
|
|
153
|
-
- **One message.**
|
|
154
|
-
- **One dominant element.** Size, weight and position show importance; mute the
|
|
153
|
+
- **One message.** The first visible state must state the actual change, comparison or consequence. Put the relevant names, direction, units and state on the subject. Use a sentence only when the graphic otherwise requires guessing. A decorative title or recap is not a substitute for that meaning.
|
|
154
|
+
- **One dominant element.** Size, weight and position show importance; mute context. Use the available width without stretching an empty stage. Add each shape, label and surface only for a relationship or action it communicates. Isometric depth belongs to a meaningful layer or ownership boundary, not arbitrary slabs.
|
|
155
155
|
- **Honest scale.** Bars start at zero on one linear scale; draw a range as a range.
|
|
156
156
|
- **Labels.** Put names, values and units on the data, with one scale per comparison. Labels and captions stay under twelve words, and a visual holds no paragraphs.
|
|
157
|
-
- **Real content.** Use
|
|
158
|
-
- **Interaction.**
|
|
157
|
+
- **Real content.** Use actual names, operations and relationships. Keep a proposal distinct from an applied change, and a simulated explanation distinct from application evidence. A physical model is useful only when its operation explains the concept without another metaphor to decode.
|
|
158
|
+
- **Interaction.** Keep the message understandable without a click. Add a control only to explore a real alternative or change an assumption. A predetermined change uses an automatic sequence, not a required click. On a phone, keep essential comparisons visible; do not hide the answer in tabs or menus.
|
|
159
|
+
- **Motion.** Animate the subject from its real source to its destination. Keep identity, scale, alignment and unchanged context stable. Use transform and opacity, not per-frame layout. Make transitions brief and uninterrupted; pause only to let the reader see a state. If a demonstration needs replay, make its reset distinct from an undo. Do not use an invisible one-shot movement as the only explanation.
|
|
160
|
+
- **Host.** Match the enclosing UI's typography, density, controls, surfaces and semantic tokens, not only its colors. Keep the outer background transparent and remove unnecessary card wrappers. Prefer native CSS for simple automatic diagrams; use relative geometry instead of JavaScript sizing when it gives the same result.
|
|
161
|
+
- **Proof.** Inspect the artifact in its actual host, including an intermediate frame and the final state. A valid file, a correct model or a headless screenshot alone does not prove readable, smooth, correctly triggered motion. Compare before and after at the same scale and actual playback speed. Fix a repeated failure in its representation or source, not with more prompt prohibitions.
|
|
159
162
|
- **Check.** Use the host's theme variables, check light, dark and a 390-point width, and fix clipping, overlap and contrast before you show it. At that width the page stays under about 400 points tall.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# engineering evaluations
|
|
2
|
+
|
|
3
|
+
## engineering
|
|
4
|
+
|
|
5
|
+
### Task
|
|
6
|
+
|
|
7
|
+
Let me import a folder of data files, see progress and stop an import without losing completed records.
|
|
8
|
+
|
|
9
|
+
### Criteria
|
|
10
|
+
|
|
11
|
+
Judge the final patch and the full run, not task completion alone. Independent behavior proof must exercise nested folders, emitted progress, interruption after a completed record, durable completed records and unchanged single-file CLI and HTTP behavior. Write that proof outside the candidate's source and choose its driver from the candidate's documented interface, not a prescribed implementation.
|
|
12
|
+
|
|
13
|
+
- Use appropriate Effect primitives and the existing package boundaries.
|
|
14
|
+
- Keep both consumers on the shared service; remove the code, exports, configuration and docs the change supersedes.
|
|
15
|
+
- Use no unnecessary wrappers, runtimes, dependencies, retries or compatibility branches.
|
|
16
|
+
- Establish resource release and no further record writes after cancellation.
|
|
17
|
+
- List each corrective edit required before you would accept the patch.
|
|
18
|
+
|
|
19
|
+
Do not score agent-written test quality here; the testing case owns it. Passing behavior checks is a prerequisite, not the quality score. Report first-pass readiness and corrective edits from evidence, distinguishing deliberate failing tests and environment failures from implementation defects. Leave a fact unobserved when the trace cannot establish it.
|
|
@@ -3,15 +3,21 @@ name: engineering
|
|
|
3
3
|
description: 'TypeScript and Effect code conventions paired with shared lint. Use when designing, implementing or reviewing product and test code, including prototypes.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
**Scope.** Apply these rules and the repository's `CODING_STANDARDS.md
|
|
6
|
+
**Scope.** Apply these rules and the repository's `CODING_STANDARDS.md` when present. Aim for a structurally correct first pass with few lint errors, not a promise of zero diagnostics. Oxlint remains the authoritative check; instructions do not replace it. Oxfmt owns whitespace, indentation and other mechanical formatting. Use automatic formatting and available fixes instead of spending reasoning on those details; fix remaining structural diagnostics at their source without a full rewrite or weakened rules. A refactor or cleanup request applies every rule to every line of the owned files. Scratch code outside the repository follows no style rule. Do not create a standards file just to satisfy this reference.
|
|
7
|
+
|
|
8
|
+
**Before checking.** Run Oxfmt and the repository's deterministic lint autofix before manual code analysis, independent review or a check-only lint pass. Use the owned scope and preserve unrelated changes. Run both even when generated code looks correct; automatic fixes need no model iteration. Analyze the remaining diagnostics and behavior only after normalization. For a read-only review, the author prepares the normalized diff; the reviewer never writes the reviewed checkout.
|
|
7
9
|
|
|
8
10
|
## Simplicity
|
|
9
11
|
|
|
12
|
+
**Architecture.** Use architecture for a new boundary, state owner, background lifetime, dependency or storage contract. Reuse the existing shape for routine changes; do not turn a small feature into a framework.
|
|
13
|
+
|
|
10
14
|
**MVP.** Write the most direct code that meets the request today. Apply YAGNI to every file, function, branch, parameter, option, export, Layer, check, config value, library and abstraction; configure only what callers vary. Write functional, explicit code: pure functions over immutable data, effects only inside Effect, and Effect modules instead of hand-written helpers.
|
|
11
15
|
|
|
12
|
-
**Plan the shape.** Before writing, choose the file tree, entrypoints and the smallest mechanism per feature, checked against
|
|
16
|
+
**Plan the shape.** Before writing, choose the file tree, entrypoints and the smallest mechanism per feature, checked against existing repository rules and the nearest sibling.
|
|
17
|
+
|
|
18
|
+
**Clarity.** Code, names and files read top to bottom. Rename or split code instead of narrating it.
|
|
13
19
|
|
|
14
|
-
**
|
|
20
|
+
**Comments.** Default to no comments. Add one only for a necessary outside constraint that names, types and control flow cannot express. Keep it to one line. Delete narration, section labels, restated code, change history and temporary planning notes. Required diagnostic directives retain their reason.
|
|
15
21
|
|
|
16
22
|
**Reuse first.** Check existing code, installed modules and platform capabilities before adding code. Extend the nearest sibling: match its permissions, errors, refresh and tests, and reuse its helpers. Implement only the missing behavior, and keep required behavior, safety and accessibility.
|
|
17
23
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Review evaluations
|
|
2
|
+
|
|
3
|
+
These cases and criteria are drafts for discussion with the user, not approved acceptance thresholds.
|
|
4
|
+
|
|
5
|
+
## review
|
|
6
|
+
|
|
7
|
+
### Task
|
|
8
|
+
|
|
9
|
+
Is this folder-import change ready for me to accept? Review the current diff without changing application code.
|
|
10
|
+
|
|
11
|
+
### Criteria
|
|
12
|
+
|
|
13
|
+
The starting repository contains the existing single-file importer and an uncommitted folder-import change. Judge the review against independently reproduced defects, not the number of findings.
|
|
14
|
+
|
|
15
|
+
- Detect omitted nested files and progress emitted before durable writes.
|
|
16
|
+
- Show the reaching input, observable consequence and smallest fix for each defect.
|
|
17
|
+
- Keep findings limited to the changed behavior and its real consumers.
|
|
18
|
+
- Do not flag preserved schema decoding, cause mapping or sequential stream consumption as defects.
|
|
19
|
+
- Do not rewrite code, invent requirements or reverse settled decisions.
|
|
20
|
+
- Keep the report readable and actionable; omit praise and process narration.
|
|
21
|
+
- Reproduce suspicions with inline probes rather than adding permanent tests or private test seams.
|
|
22
|
+
- Preserve independent validation, failure causes and existing caller contracts during cleanup.
|
|
23
|
+
|
|
24
|
+
Record missed defects, false positives, unnecessary reads, tokens, elapsed time and corrective requests separately. The user judges whether the report supports acceptance. This case measures read-only code review, not implementation or PR-body formatting.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review
|
|
3
|
+
description: 'Read-only, evidence-backed review of code, architecture, cleanup, designs, instructions and published artifacts. Use for reviews, audits and critiques; the author owns implementation, services and browser interaction.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Review
|
|
7
|
+
|
|
8
|
+
Challenge the work independently. Trace the contract, try its strongest reachable counterexample and establish the consequence before reporting a defect. The author's rationale is a hypothesis, not authority. Apply the available engineering, architecture, design and testing skills by name; when one is unavailable, use the repository's explicit contracts without inventing its rules.
|
|
9
|
+
|
|
10
|
+
## Code review
|
|
11
|
+
|
|
12
|
+
Review the normalized diff: the author must run Oxfmt and deterministic lint autofix first. Do not spend review reasoning on formatting or already-fixable diagnostics. If normalization is unavailable, name that gap and have the author prepare it; never mutate a read-only target.
|
|
13
|
+
|
|
14
|
+
- **Depth.** Read every hand-written changed line. For generated output, review the generator change and a sample, such as one package per source format. Trace each contract through its real consumers, failure paths, concurrency and resource ownership against the merge base. Try the inputs, orderings and failures that the tests miss. When the change refactors a whole file, list each behavior the file had at the merge base and prove that each one still holds, apart from the planned change.
|
|
15
|
+
- **Findings.** Report broken behavior or contracts that a real caller's input reaches. Report violations of engineering, design or `CODING_STANDARDS.md` in changed lines, and in every line of a file that the task adds or rewrites. Skip what lint enforces outside legacy lists, and restyling that the change does not need.
|
|
16
|
+
- **Beyond the diff.** A contradiction with an unchanged file, a stale reference that the change leaves, and a false assumption that the change rests on are findings.
|
|
17
|
+
- **Not findings.** Taste without a rule, wording, hypothetical inputs, and defects that the branch neither made nor relies on.
|
|
18
|
+
- **Later rounds.** Retain the covered commit, contracts and scope. Review only uncovered hunks, the fixes since that commit, and their affected consumers. Reuse prior source reads while those sources are unchanged. A confirmed local fix needs no new independent round unless it introduces an uncovered contract, mechanism or failure path. A new notice or a changed PR body is not a code-review trigger.
|
|
19
|
+
- **Probes.** Settle a suspicion with disposable inline code against the public interface, real data or installed artifact. Use the repository's runtime command, such as `vp node -e '<script>'` or `vp env exec bun -e '<script>'`; verify that it loads the source and dependencies. Do not create a test file, worktree or test-only seam to answer one question. Never start a service or test suite during read-only review.
|
|
20
|
+
- **Browser evidence.** Inspect the existing preview, captures, console and relevant requests without changing page state. Give the owner the smallest missing browser action and observable result to check; the owner drives the browser and records it. A screenshot proves a visible state, not unobserved timing, persistence or release behavior.
|
|
21
|
+
- **Test value.** Use testing to decide whether a permanent test protects a distinct plausible regression. Do not demand a new test for every finding when an inline probe or existing browser proof settles it.
|
|
22
|
+
- **Variants.** After reproducing a defect, look for the same root cause in its other real callers. Broaden one dimension at a time and stop when unrelated hypotheses replace concrete evidence.
|
|
23
|
+
|
|
24
|
+
Return the findings, or "Clean" with the covered scope. Each finding gives the path and line, the reaching input, the actual and required outcome, the consequence, the probe and the smallest fix.
|
|
25
|
+
|
|
26
|
+
## Cleanup audit
|
|
27
|
+
|
|
28
|
+
Classify every changed file and hunk against the user's outcome and the reachable existing contracts. The author's plan does not authorize added scope. Default to removal, but preserve security, accessibility, required dependencies and useful regression protection:
|
|
29
|
+
|
|
30
|
+
- **Revert:** unrelated formatting, lint-only rewrites, renames, reordered keys and files. Retain a required root fix and the repository's explicit cleanup scope. Do not weaken valid rules to retain obsolete code.
|
|
31
|
+
- **Supersede:** features and versions that the final direction replaced, compatibility for unreleased versions, and capabilities that only a test or demo needed.
|
|
32
|
+
- **Simplify:** the same behavior with less code or a clearer layout: files, folders and names that break the repository's layout, dead code, unused exports, duplicate logic, layered overrides, no-ops and workarounds.
|
|
33
|
+
- **Cut:** anything the request does not need: features, function branches, files, libraries, settings, config values, UI elements, and machinery such as budgets, retries, caches, fallbacks, queues, daemons and dependency patches. Name what the user loses without each one; when he loses nothing, it goes.
|
|
34
|
+
- **Keep:** a required outcome, dependency, reachable existing contract or useful regression proof. Quote the requirement or show the caller and the input that break without it.
|
|
35
|
+
|
|
36
|
+
Read every hand-written hunk; a sample is not an audit. Compare added, moved and renamed files and folders with `CODING_STANDARDS.md` and the closest sibling app or package. Near-empty files and helper files that mix roles are Simplify rows. Judge generated output through its generator and a sample. List each cast, suppression, filename exemption and file-wide disable that the change adds: a Simplify row with its typed alternative, or a Keep row for an exception that engineering allows. Return one row per item: the path and lines, the class, the evidence, the smallest change, its size and what it breaks.
|
|
37
|
+
|
|
38
|
+
## Critique
|
|
39
|
+
|
|
40
|
+
Challenge the outcome, the taste and the attempts so far, and do not defer to the author. Compare different mechanisms, including a smaller one. Test the strongest counterexample and the weakest assumption. Prefer a reversible combination of compatible strengths. Return the recommendation, its decisive reason and the observation that would change it.
|
|
41
|
+
|
|
42
|
+
## Instruction review
|
|
43
|
+
|
|
44
|
+
Review the affected instructions as one system: prompts, skills, references, settings, repository rules and installed copies in the requested scope. Read every relevant file whole. Check each rule against the runtime and tool behavior it assumes, in source or a real session. Installation belongs to the configuration owner, not the reviewer.
|
|
45
|
+
|
|
46
|
+
Report contradictions, duplicate rules, rules that only one harness gets, rules that no agent can act on, stale names, paths and models, breaks of applicable repository language rules, text that does not change an agent's action, and eval claims without evidence. Return the findings ranked, each with the path and line, the probe and the smallest change.
|
|
47
|
+
|
|
48
|
+
## Body reader
|
|
49
|
+
|
|
50
|
+
Read the published pull request as a reviewer who knows nothing else. Download the body and every embedded capture from the host, such as `glab api "projects/<project>/uploads/<secret>/<file>"`, and inspect each one. Compare them with the branch head and the source tickets. Report:
|
|
51
|
+
|
|
52
|
+
- A risk that a tired reviewer misses: a migration, contract change or removed behavior the published body does not name.
|
|
53
|
+
- A claim that a capture or the code contradicts.
|
|
54
|
+
- A ticket requirement without proof.
|
|
55
|
+
- A capture that is unreadable, ends before its outcome, or shows loading that is not the claim.
|
|
56
|
+
- Each departure from the repository's publishing contract or the available delivery skill.
|
|
57
|
+
|
|
58
|
+
Return each finding with the section, the evidence and the smallest fix.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# testing evaluations
|
|
2
|
+
|
|
3
|
+
## testing
|
|
4
|
+
|
|
5
|
+
### Task
|
|
6
|
+
|
|
7
|
+
Make me confident that stopping a folder import keeps completed records and releases its resources.
|
|
8
|
+
|
|
9
|
+
### Criteria
|
|
10
|
+
|
|
11
|
+
This case supplies the folder-import implementation. Judge the agent's tests separately from engineering changes.
|
|
12
|
+
|
|
13
|
+
- Exercise observable persistence, streaming order, cancellation and resource ownership through real boundaries.
|
|
14
|
+
- Synchronize on progress or a controlled dependency, not arbitrary sleeps.
|
|
15
|
+
- Test the existing single-file contract and both consumers where the claim crosses them.
|
|
16
|
+
- Prove the tests fail when progress is emitted before the write and when a detached writer continues after cancellation; mutation trials run outside the candidate checkout.
|
|
17
|
+
- Cancel during an active file read through a controlled filesystem adapter and verify release. Do not mutate Effect's resource implementation or require an importer-owned finalizer that does not exist.
|
|
18
|
+
- Reject tests of private implementation details, fabricated successes and redundant assertions.
|
|
19
|
+
- Keep only distinct regression protection with a named wrong implementation and observable failure; do not reward new files or case count.
|
|
20
|
+
- Use inline probes and real browser evidence for one-off questions without turning each observation into a permanent test.
|
|
21
|
+
|
|
22
|
+
Report which defects each test detects and which remain uncovered. Do not reward test count or coverage percentage. Record merge readiness and effort separately.
|
package/skills/testing/SKILL.md
CHANGED
|
@@ -7,12 +7,12 @@ description: 'Select and run black-box behavior proof for Effect apps and tools.
|
|
|
7
7
|
|
|
8
8
|
**Scope.** Test behavior the changed code owns; a coverage count proves nothing.
|
|
9
9
|
|
|
10
|
-
- **Worth it.**
|
|
10
|
+
- **Worth it.** Retain a test only when it names owned behavior, a plausible wrong implementation, an independently known observable result and distinct protection. State what breaks without it. A green suite, coverage increase or extra case is not a reason to keep a test.
|
|
11
11
|
- **Public interface.** Test exported Layers, services and functions through observable behavior, so a rewrite that keeps the contract keeps the tests green. The browser proves web UI components; the simulator proves native ones.
|
|
12
12
|
- **Redundant.** Delete touched cases that only repeat dependency guarantees, constants, wording, removed behavior or a covered input. Keep boundary tests of the application's own validation, encoding or integration.
|
|
13
13
|
- **Independent.** Take expected values from the contract or a worked example, never from the implementation. Use the smallest reachable fixture that tells the cases apart.
|
|
14
|
-
- **Bugs.** Reproduce a bug before you fix it. Keep
|
|
15
|
-
- **Throwaway.**
|
|
14
|
+
- **Bugs.** Reproduce a bug before you fix it. Keep a regression case when future changes can plausibly break its contractual behavior, in the existing test of the fixed code or a new case when none fits. An independently reproduced defect does not require a new test file.
|
|
15
|
+
- **Throwaway.** Start with question-sized inline code, an existing test or a focused real-browser check. Delete the spike after it answers the question. Promote it only when its distinct regression protection meets Worth it; never add a private export or configurable production seam just for proof.
|
|
16
16
|
- **Honest.** No wrong expectations or rule workarounds. Change assertions only for recorded behavior changes, and keep every still-relevant value.
|
|
17
17
|
|
|
18
18
|
**Assertions.** Use one representative input per behavior, in its existing case. Share a helper only between cases that use it. Use @effect/vitest assertions for outputs and structured error identity. Replace dependencies through Layers or public parameters, never global or module mocks. Keep mutable state in its owning fixture.
|
|
@@ -42,6 +42,7 @@ assert.strictEqual(Array.flatMap(attioProvider.groups, group => group.actions).l
|
|
|
42
42
|
- **Branches.** Exercise the reachable distinctions: empty, duplicate, concurrent and dependency failure. Write no Cartesian product, and no random or repeated happy paths without a hypothesis.
|
|
43
43
|
- **Failure.** Use `Effect.flip` for an expected failure and `Effect.exit` for both outcomes. Assert domain identity and preserved state and resources: no partial write, lost value, extra retry or leak. Wording or rejection alone is not enough, and incidental order is no assertion.
|
|
44
44
|
- **Control.** Run the regression test against the unfixed implementation, and confirm that the intended assertion fails, not setup, imports or compilation. Before a refactor, cover the old behavior.
|
|
45
|
+
- **Audit.** Remove duplicate and tautological cases in the touched scope, but retain independent protocol, package, validation, authorization and persistence contracts. Mock call counts do not prove an external boundary. Do not replace a useful test with a disposable script just to reduce the count.
|
|
45
46
|
|
|
46
47
|
## Effect and fixtures
|
|
47
48
|
|
|
@@ -49,7 +50,7 @@ assert.strictEqual(Array.flatMap(attioProvider.groups, group => group.actions).l
|
|
|
49
50
|
- **Lifetime.** `it.effect` and `it.live` supply a Scope per case; `it.layer` acquisition belongs to its block. Use scoped platform resources and no redundant whole-case `Effect.scoped`. To assert cleanup, close the smaller operation scope before you inspect.
|
|
50
51
|
- **Isolation.** Shared layers share mutable services, `TestClock` and `TestConsole`, and `Layer.fresh` does not reset cached context. Use distinct keys, a public reset or case-local fixtures. Cases pass alone and together.
|
|
51
52
|
- **Clock.** Take `TestClock` and `TestConsole` from `effect/testing`. Fork, await a `Deferred` at the dependency boundary that carries the actual key or path, adjust time, then join; forking alone is not readiness. JavaScript timers, sockets and processes need live services.
|
|
52
|
-
- **Concurrency.** Give the dependency an entered and release pair: await entry, start the competing action, release, then assert the contract. Set `Effect.all` concurrency for overlap. For cancellation, await acquisition, interrupt and await completion, and assert
|
|
53
|
+
- **Concurrency.** Give the dependency an entered and release pair: await entry, start the competing action, release, then assert the contract. Set `Effect.all` concurrency for overlap. For cancellation, await acquisition, interrupt and await completion, and assert release at the owning dependency while an unrelated outer Scope stays open. Joining an interrupted fiber alone does not prove resource release. Never test primitives or incidental ordering.
|
|
53
54
|
- **Boundary.** Double only dependencies outside the tested logic, through a Layer or a public parameter. A claim about an SDK, process, filesystem, HTTP, browser or package integration needs the real boundary, not mocks or spies.
|
|
54
55
|
- **Artifacts.** Prove a public tool with real packing and declared dependencies, not source imports or stubs. Generate fixtures with the real generator after one representative input settles; never alter expected output to fit a bug.
|
|
55
56
|
- **Platform.** `FileSystem.layerNoop` is not memory storage, and `HttpServer.layerServices` supplies no filesystem: use a platform Layer and scoped paths. `RpcTest` bypasses serialization, and `HttpApiTest` bypasses sockets but proves routing, encoding, middleware and decoding; neither proves deployment or an external integration.
|
|
@@ -59,5 +60,5 @@ assert.strictEqual(Array.flatMap(attioProvider.groups, group => group.actions).l
|
|
|
59
60
|
- **Run.** Use the documented test selectors, and confirm that they collect and run the intended cases. Zero collected tests, setup alone or exit code 0 alone prove nothing.
|
|
60
61
|
- **Inventory.** Collect independent failures in one run instead of stopping at the first, and tell separate cases from repeated observations. Rerun a timed-out test once in isolation; a pass proves that run, not the cause. Never call a bypassed selector or a skipped operation flaky.
|
|
61
62
|
- **Evidence.** Keep the first failure, exact command, execution count and exit status. Separate cause from hypothesis, product defect from setup failure, and a skipped criterion from a passing one. A source read or a green command never replaces a missing behavior check.
|
|
62
|
-
- **Final proof.**
|
|
63
|
-
- **Visual proof.**
|
|
63
|
+
- **Final proof.** Retain each claim's command or browser journey, result, source revision, input, dependencies and configuration. Reconcile required behavior on the final code: rerun proof whose relevant inputs changed and reuse proof whose inputs did not. A steer invalidates dependent claims, not every check or capture. Required final repository gates still run. Use the actual built preview for final browser proof when the repository provides one. A command named preview that runs development watchers does not prove the production build. Screenshots and video prove visible outcomes; execution through the public interface proves the rest.
|
|
64
|
+
- **Visual proof.** Record one claim through the real application with matching input, action and outcome. Keep every meaningful step. A capture is stale once a component it shows changes. For a provider-event claim, trigger the real provider when an account exists; otherwise send a signed request. When only the user can do the provider-side step, prepare a guide.
|