Skip to content

Commit a922df5

Browse files
committed
chore(wheelhouse): cascade template@cb90aed9
Auto-applied by socket-wheelhouse sync-scaffolding into socket-cli. 69 file(s) touched: - .agents/skills/fleet-auditing-api-surface/SKILL.md - .agents/skills/fleet-prose/SKILL.md - .agents/skills/fleet-prose/references/conversational.md - .agents/skills/fleet-updating-pricing/SKILL.md - .agents/skills/fleet-updating/SKILL.md - .claude/commands/fleet/update-pricing.md - .claude/hooks/fleet/clone-reviewed-repo-nudge/README.md - .claude/hooks/fleet/clone-reviewed-repo-nudge/detect.mts - .claude/hooks/fleet/clone-reviewed-repo-nudge/index.mts - .claude/hooks/fleet/clone-reviewed-repo-nudge/package.json - .claude/hooks/fleet/clone-reviewed-repo-nudge/test/index.test.mts - .claude/hooks/fleet/clone-reviewed-repo-nudge/tsconfig.json - .claude/hooks/fleet/markdown-filename-guard/index.mts - .claude/hooks/fleet/markdown-filename-guard/test/index.test.mts - .claude/hooks/fleet/no-corepack-guard/README.md - .claude/hooks/fleet/no-corepack-guard/index.mts - .claude/hooks/fleet/no-corepack-guard/package.json - .claude/hooks/fleet/no-corepack-guard/test/index.test.mts - .claude/hooks/fleet/no-corepack-guard/tsconfig.json - .claude/hooks/fleet/no-premature-commit-kill-guard/index.mts ... and 49 more
1 parent 9ac5a1a commit a922df5

69 files changed

Lines changed: 3735 additions & 248 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/skills/fleet-auditing-api-surface/SKILL.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
name: fleet-auditing-api-surface
3-
description: Audits a lib's published export surface for dead/unconsumed subpaths. For each `package.json#exports` subpath, checks whether any other fleet repo imports it and whether the lib's own `src/` references it, then classifies every subpath (dead / single-consumer / internal-only / consumed) into a ranked report. Read-only — reports prune candidates, never deletes. Use weekly (the `audit-api-surface.yml` cron drives it), before a major version bump, or when trimming bundle size on an infra lib.
3+
description: Audits a lib's published export surface for dead/unconsumed subpaths. For each `package.json#exports` subpath, checks whether any other fleet repo imports it and whether the lib's own `src/` references it, then classifies every subpath (dead / single-consumer / internal-only / consumed) into a ranked report. Read-only — reports prune candidates, never deletes. Use weekly (the `audit-api-surface.lock.yml` gh-aw cron drives it), before a major version bump, or when trimming bundle size on an infra lib.
44
user-invocable: true
55
allowed-tools: Read, Grep, Glob, Bash(node:*), Bash(rg:*), Bash(git:*), Bash(gh:*)
66
model: claude-haiku-4-5
@@ -22,9 +22,9 @@ target; other libs get a meaningful report too.
2222

2323
## When to use
2424

25-
- **Weekly health check** — the `audit-api-surface.yml` cron runs this and opens
26-
a tracking issue. Dead surface accumulates silently; a weekly sweep keeps it
27-
visible.
25+
- **Weekly health check** — the `audit-api-surface.lock.yml` gh-aw cron (Monday
26+
09:23 UTC; source `audit-api-surface.md`) runs this and opens a tracking
27+
issue. Dead surface accumulates silently; a weekly sweep keeps it visible.
2828
- **Before a major version bump** — a `dead` or `single-consumer` export is a
2929
candidate to remove (major) or inline into its one consumer.
3030
- **Bundle trimming** — pairs with `trimming-bundle`; an unconsumed subpath is

.agents/skills/fleet-prose/SKILL.md

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,22 @@ Eliminate AI writing patterns from prose.
1313

1414
Hardik Pandya wrote the upstream version (`stop-slop`). MIT-licensed. Source: https://github.com/hardikpandya/stop-slop. Core rules + references run verbatim. Edit only in `socket-wheelhouse/template/`; the cascade refreshes downstream copies.
1515

16-
## Fleet surfaces
16+
## Fleet surfaces — two modes
1717

18-
Apply this skill when you write:
18+
This skill runs in two modes. Both strip the AI-slop the Core Rules target; the conversational mode adds brevity + voice on top.
1919

20-
- Commit message bodies (multi-paragraph). Subject lines stay terse and imperative per `commit-message-format-guard`.
21-
- PR descriptions (`gh pr create --body`, `gh pr edit --body`).
22-
- CHANGELOG entries.
23-
- README sections.
24-
- `docs/` markdown.
25-
- GitHub Release notes.
20+
**Route by surface:**
21+
22+
- Targeting a `docs/**` file, README, CHANGELOG, GitHub Release notes, or API-reference prose → **documentation mode** (the Core Rules below, unchanged).
23+
- Targeting a PR description / comment (`gh pr create/edit/comment --body`), an issue body or reply (`gh issue create/comment`), a review comment, a Linear issue/comment, a status summary, or a multi-paragraph commit *body***conversational mode**: the Core Rules **plus** [references/conversational.md](references/conversational.md) (lead with the point, be brief, show the receipt, drop the AI scaffolding).
24+
25+
**Documentation mode applies to:**
26+
27+
- CHANGELOG entries, README sections, `docs/` markdown, GitHub Release notes, API-reference prose. Complete + precise + durable; length serves correctness.
28+
29+
**Conversational mode applies to:**
30+
31+
- PR descriptions + comments, issue bodies + replies, review comments, Linear issues/comments, status summaries, and multi-paragraph commit bodies. Land the point now, to a person; length serves the point (often 1–3 sentences). Commit subject lines stay terse + imperative per `commit-message-format-guard` (not this skill).
2632

2733
## When to skip this skill
2834

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# Conversational mode
2+
3+
Extra rules for **conversational** surfaces (PR descriptions + comments, issue bodies + replies, review comments, Linear, status summaries, commit bodies). Apply these ON TOP of the Core Rules. They do not apply to documentation (`docs/`, README, CHANGELOG, release notes, API reference).
4+
5+
The goal shifts from "complete, precise, durable" (documentation) to "land the point now, to a specific person, in the moment." Shorter is better. Personality is fine. The model voice is a maintainer talking to a peer on a PR, not a report.
6+
7+
## Contents
8+
9+
- Lead with the point
10+
- Be brief
11+
- Show the receipt
12+
- Code beats prose
13+
- Plain, direct register
14+
- Ask when collaborating
15+
- No structure for its own sake
16+
- Drop the AI scaffolding
17+
18+
## Lead with the point
19+
20+
The first sentence is the decision, the finding, or the answer. No preamble, no restating the task, no "Great question" / "Sure thing" / "Thanks for the report."
21+
22+
- Bad: "Thanks for flagging this! I took a look and it seems like there might be an issue with how the cache is invalidated."
23+
- Good: "This is a cache-invalidation bug: the key is computed from mtime, which FAT32 rounds to 2s."
24+
25+
## Be brief
26+
27+
Default to 1-3 sentences. A comment that could be one line should be one line. Cut anything the reader already knows.
28+
29+
- Good (a whole comment): "It's a bigger typo than that, it's supposed to be `clearTimeout` :P"
30+
- Good (a whole comment): "Related: #62893."
31+
32+
## Show the receipt
33+
34+
Back a claim with evidence, not adjectives. Link the issue / PR / commit SHA, paste the repro, drop the real numbers. Never "this is faster" without the measurement.
35+
36+
- Bad: "This should be significantly more performant."
37+
- Good: "`acorn` ~700ms vs `swc` ~2s on babylon.max.js (10.6MB)." or a pasted `hyperfine` / `vitest bench` line.
38+
39+
## Code beats prose
40+
41+
When code is the answer, paste it. A two-line function or a runnable command is clearer than a paragraph describing it.
42+
43+
```js
44+
function isPrimitive(value) {
45+
return Object(value) !== value
46+
}
47+
```
48+
49+
## Plain, direct register
50+
51+
Contractions are fine. Casual is fine. A `:)` or `~~strikethrough~~` is fine when it fits. This is a person talking to a person. Real openers ("Ya", "Hmm", "Ah", "Boo!") beat service-desk ones. Still no secrets and no private names (public-surface-hygiene is unchanged on every surface).
52+
53+
## Ask when collaborating
54+
55+
A question pulls people in. "What do you think?" or "@person — thoughts?" beats a wall of unilateral justification. Credit good work plainly: "good catch", "nice, the perf is rad".
56+
57+
## No structure for its own sake
58+
59+
Do not impose Summary / Changes / Testing headers on a PR a sentence describes. Use a list only when there genuinely are N parallel items. A small PR body is one sentence on what + why, then (if needed) a short list of the non-obvious changes, then the test note. Big PRs earn structure; small ones do not.
60+
61+
## Drop the AI scaffolding
62+
63+
The biggest tell. Cut all of it:
64+
65+
- Opening throat-clearers: "I've gone ahead and...", "Let me...", "In this PR, I..."
66+
- Closing filler: "Let me know if you have any questions!", "Hope this helps!", a trailing summary that repeats the opening.
67+
- Restating what the diff already shows ("This changes the function to...").
68+
- Hedge-stacking: "essentially", "fundamentally", "simply", "just", "basically".
69+
- Em-dash chains and "not X, it's Y" contrast pairs (the Core Rules catch these; they are especially glaring in a short comment).
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
---
2+
name: fleet-updating-pricing
3+
description: Refresh the fleet's model-pricing data by reading current per-model prices off the vendor pricing page and rewriting `scripts/fleet/constants/model-pricing.json` (and the routing-doc snapshot marker) with today's date. Sibling of `updating-coverage` / `updating-security` / `updating-lockstep` under the `updating` umbrella; the source of the numbers the AI cost estimator computes against.
4+
user-invocable: true
5+
allowed-tools: Skill, Read, Edit, WebFetch, Bash(node:*), Bash(git:*)
6+
model: claude-haiku-4-5
7+
context: fork
8+
---
9+
10+
# updating-pricing
11+
12+
Re-sources the per-model token prices the fleet routes spend on, so the figure `scripts/fleet/estimate-ai-cost.mts` reports stays honest. Invoked directly via `/update-pricing` or as a phase of the `updating` umbrella. The snapshot date is restamped on every refresh, which is what keeps the freshness anchored to the weekly cadence rather than to a guessed timer.
13+
14+
## When to use
15+
16+
- As a phase of the weekly `updating` umbrella — this is the cadence the pricing refresh rides, not a bespoke timer.
17+
- On demand when prices are known to have moved (a new model tier, a vendor price change) — `/update-pricing`.
18+
- When `check --all` warns the pricing snapshot is stale (the `pricing-data-is-current` gate points here).
19+
20+
## What it does NOT do
21+
22+
- **Invent prices.** The numbers come off the vendor pricing page, read this run. If the page can't be reached, the skill reports that and exits without writing — a stale-but-real snapshot beats a guessed one.
23+
- **Re-derive the JSON shape in shell.** The write is owned by `scripts/fleet/update-model-pricing.mts` (the same owner pattern as `make-coverage-badge.mts`): the skill hands it sourced prices, the script stamps the date and writes canonically. The skill never hand-edits the JSON.
24+
- **Change the multipliers or the model set.** A routine refresh touches per-model rates only. Adding a model or changing a discount multiplier (batch / cache) is a deliberate edit to the data file, not a price refresh.
25+
- **Touch the cost model.** `estimate-ai-cost.mts`'s math is fixed; this skill only refreshes its input data.
26+
27+
## Phases
28+
29+
| # | Phase | Outcome |
30+
| --- | --------- | ---------------------------------------------------------------------------------------------------- |
31+
| 1 | Read current | `node scripts/fleet/update-model-pricing.mts --check` — print the on-disk snapshot + the priced models. |
32+
| 2 | Source | WebFetch the vendor pricing page; read off per-model input/output USD-per-MTok for the fleet's models. |
33+
| 3 | Write | `node scripts/fleet/update-model-pricing.mts --prices '<json>'` — restamps the snapshot + the doc marker. |
34+
| 4 | Commit | `chore(pricing): refresh model-pricing snapshot to <date>`. Direct-push per fleet norm. |
35+
36+
The snapshot/date/shape logic is owned by `scripts/fleet/update-model-pricing.mts` and reads the current data via `loadPricing()` from `scripts/fleet/estimate-ai-cost.mts` — the same loader the estimator and the `pricing-data-is-current` gate share. This skill is orchestration over that script; the judgment it keeps is reading the vendor page correctly and surfacing a fetch failure rather than writing a guess.
37+
38+
## Phase 1: read current
39+
40+
```sh
41+
node scripts/fleet/update-model-pricing.mts --check
42+
```
43+
44+
Prints the current `snapshot` date, `source` URL, and the list of priced model ids. No write. Use this to see the before-state and confirm which models need a price read.
45+
46+
## Phase 2: source
47+
48+
WebFetch the `source` URL the `--check` run printed (the vendor pricing page). Read off, for each model id already in the data, the input and output price in USD per million tokens (MTok). The fleet's models are Claude tiers (haiku / sonnet / opus / fable / mythos); price only the ids that exist in the data — a new tier is a deliberate add, not part of a refresh.
49+
50+
If the page can't be fetched (network blocked, page moved), STOP: report the failure and the last-known snapshot, and do not write. A stale real snapshot is safer than a hallucinated price.
51+
52+
## Phase 3: write
53+
54+
```sh
55+
node scripts/fleet/update-model-pricing.mts --prices '{"claude-haiku-4-5":{"inputPerMtok":1.0,"outputPerMtok":5.0},"claude-sonnet-4-6":{"inputPerMtok":3.0,"outputPerMtok":15.0}}'
56+
```
57+
58+
Pass the prices read in Phase 2 as a JSON object keyed by model id. The script stamps the `snapshot` to today, writes `scripts/fleet/constants/model-pricing.json` canonically, and restamps the `MODEL-PRICING-SNAPSHOT` marker in `docs/agents.md/fleet/skill-model-routing.md` to match. Models you omit keep their current rates (a partial refresh never drops a model). Override the recorded source with `--source <url>` if the vendor URL changed.
59+
60+
## Phase 4: commit
61+
62+
```sh
63+
git add scripts/fleet/constants/model-pricing.json docs/agents.md/fleet/skill-model-routing.md
64+
git commit -m "chore(pricing): refresh model-pricing snapshot to <date>"
65+
git push origin <default-branch>
66+
```
67+
68+
Direct-push per the fleet's `Commits & PRs → Push policy` rule; fall back to PR if the remote rejects. In the wheelhouse, edit `template/` and cascade — the live `scripts/fleet/` + `docs/` copies are cascade-derived.
69+
70+
## Output
71+
72+
When called via `/update-pricing`, emit a one-line summary: the snapshot date before → after and which models were re-priced. When the page can't be fetched or no price moved, say so and exit without committing.
73+
74+
## Related
75+
76+
- `.claude/skills/updating/SKILL.md`: umbrella that calls this skill as its pricing phase.
77+
- `.claude/skills/researching-recency/SKILL.md`: the broader recency-research skill; use it when a refresh needs more than the vendor page (subscription limits, competitor rates, the cost-ladder report).
78+
- `scripts/fleet/estimate-ai-cost.mts`: consumes `model-pricing.json` to compute run costs.
79+
- `scripts/fleet/check/pricing-data-is-current.mts`: the staleness gate that points here.

.agents/skills/fleet-updating/SKILL.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Umbrella update skill. Runs `pnpm run update` for npm deps, then adapts to whate
2525
- **Workflow SHA pins**: `_local-not-for-reuse-*.yml` SHAs against the remote's default branch (per CLAUDE.md _Default branch fallback_); run `/updating-workflows` when stale.
2626
- **Security advisories**: open GitHub Dependabot alerts via `/update-security`. Direct deps bumped via `pnpm update`; transitives pinned via `pnpm.overrides`; unfixable advisories dismissed with documented reasons. Honors the 7-day soak gate.
2727
- **Coverage badge**: when a coverage script exists (`cover` / `coverage` / `test:cover`), `/update-coverage` runs the script and rewrites the README badge to match. Repos without a coverage script skip silently.
28+
- **Model pricing**: `/update-pricing` re-sources per-model token prices from the vendor pricing page and restamps `scripts/fleet/constants/model-pricing.json` + the routing-doc snapshot. This is what anchors pricing freshness to the weekly cadence — the snapshot is "as fresh as the last weekly run", not a guessed timer. Repos without the pricing data skip silently.
2829
- **GitHub settings drift**: `scripts/fleet/lint-github-settings.mts --force --json` audits repo + Actions settings against the fleet baseline (custom properties, feature flags, merge policy, branch protection, required apps like `cursor` / `claude` / `socket-security`). Read-only by default; fixes are surfaced as URLs the operator clicks through (`--fix` is gated on `repo:admin`, not auto-applied in the umbrella). Skipped under `CI=true` (the underlying script's local-only design).
2930

3031
This umbrella reads repo state first to discover what applies. Sub-skills are only invoked when relevant.
@@ -56,9 +57,10 @@ Why reference, not duplicate: the cascade procedure is fleet-canonical knowledge
5657
| 5 | Security advisories | If `gh api .../dependabot/alerts?state=open` returns any rows, invoke `/update-security` (the `updating-security` sub-skill). Atomic commit per alert. |
5758
| 6 | Workflow SHA pins | Compare pinned SHAs against `origin/$BASE`; report stale → `/updating-workflows`. |
5859
| 7 | Coverage badge | If the repo declares a coverage script (`cover` / `coverage` / `test:cover`), invoke `/update-coverage` to refresh the README badge. Atomic commit if the percentage moved. |
59-
| 8 | GH settings drift | Skipped under `CI=true`. Otherwise: `node scripts/fleet/lint-github-settings.mts --force --json` and surface findings (repo-settings drift, missing apps (cursor/claude/socket-security/etc), custom-property/visibility mismatches). Read-only; operator follows the fixUrl in each finding. |
60-
| 9 | Final validation | Interactive only: `pnpm run check --all && pnpm test && pnpm run build`. CI skips (validated separately). |
61-
| 10 | Report | Per-category summary: npm / lockstep / submodules / security / SHA pins / coverage / settings drift / validation / next steps. |
60+
| 8 | Model pricing | If the repo carries `scripts/fleet/constants/model-pricing.json`, invoke `/update-pricing` to re-source per-model prices + restamp the snapshot. Atomic commit if a price moved. This is the refresh that keeps pricing freshness anchored to the weekly cadence. |
61+
| 9 | GH settings drift | Skipped under `CI=true`. Otherwise: `node scripts/fleet/lint-github-settings.mts --force --json` and surface findings (repo-settings drift, missing apps (cursor/claude/socket-security/etc), custom-property/visibility mismatches). Read-only; operator follows the fixUrl in each finding. |
62+
| 10 | Final validation | Interactive only: `pnpm run check --all && pnpm test && pnpm run build`. CI skips (validated separately). |
63+
| 11 | Report | Per-category summary: npm / lockstep / submodules / security / SHA pins / coverage / pricing / settings drift / validation / next steps. |
6264

6365
### What runs inline vs. in the `Workflow`
6466

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
description: Refresh the fleet's model-pricing data from the vendor page via the updating-pricing skill.
3+
---
4+
5+
Read current per-model token prices off the vendor pricing page, rewrite `scripts/fleet/constants/model-pricing.json`, and restamp the `MODEL-PRICING-SNAPSHOT` marker in the routing doc — both with today's date. The snapshot restamp is what keeps pricing freshness anchored to the weekly cadence rather than a guessed timer.
6+
7+
Use as a phase of the weekly `updating` umbrella, on demand when prices move, or when `check --all` warns the pricing snapshot is stale. Exits without writing if the vendor page can't be fetched (a stale real snapshot beats a guessed price). In the wheelhouse, edit `template/` and cascade — the live copies are cascade-derived.
8+
9+
Invokes the `updating-pricing` skill.

0 commit comments

Comments
 (0)