Skip to content

chore(deps-dev): bump @typescript-eslint/eslint-plugin from 7.18.0 to 8.32.1#6

Closed
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-8.32.1
Closed

chore(deps-dev): bump @typescript-eslint/eslint-plugin from 7.18.0 to 8.32.1#6
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-8.32.1

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

@dependabot dependabot Bot commented on behalf of github May 19, 2025

Bumps @typescript-eslint/eslint-plugin from 7.18.0 to 8.32.1.

Release notes

Sourced from @​typescript-eslint/eslint-plugin's releases.

v8.32.1

8.32.1 (2025-05-12)

🩹 Fixes

  • eslint-plugin: [no-unnecessary-type-conversion] shouldn't have fixable property (#11194)
  • eslint-plugin: [no-deprecated] support computed member access (#10867)
  • eslint-plugin: [consistent-indexed-object-style] adjust auto-fixer to generate valid syntax for TSMappedType with no type annotation (#11180)
  • eslint-plugin: [consistent-indexed-object-style] check for indirect circular types in aliased mapped types (#11177)

❤️ Thank You

You can read about our versioning strategy and releases on our website.

v8.32.0

8.32.0 (2025-05-05)

🚀 Features

  • eslint-plugin: [no-unnecessary-type-conversion] add rule (#10182)
  • eslint-plugin: [only-throw-error] add option allowRethrowing (#11075)

🩹 Fixes

  • deps: update dependency typedoc to ^0.28.0 (1fef33521)
  • eslint-plugin: [no-unnecessary-type-parameters] should parenthesize type in suggestion fixer if necessary (#10907)
  • eslint-plugin: [unified-signatures] exempt this from optional parameter overload check (#11005)
  • eslint-plugin: [prefer-nullish-coalescing] fix parenthesization bug in suggestion (#11098)
  • typescript-estree: ensure consistent TSMappedType AST shape (#11086)
  • typescript-estree: correct TSImportType property name when assert (#11115)

❤️ Thank You

You can read about our versioning strategy and releases on our website.

v8.31.1

8.31.1 (2025-04-28)

... (truncated)

Changelog

Sourced from @​typescript-eslint/eslint-plugin's changelog.

8.32.1 (2025-05-12)

🩹 Fixes

  • eslint-plugin: [consistent-indexed-object-style] check for indirect circular types in aliased mapped types (#11177)
  • eslint-plugin: [consistent-indexed-object-style] adjust auto-fixer to generate valid syntax for TSMappedType with no type annotation (#11180)
  • eslint-plugin: [no-deprecated] support computed member access (#10867)
  • eslint-plugin: [no-unnecessary-type-conversion] shouldn't have fixable property (#11194)

❤️ Thank You

You can read about our versioning strategy and releases on our website.

8.32.0 (2025-05-05)

🚀 Features

  • eslint-plugin: [only-throw-error] add option allowRethrowing (#11075)
  • eslint-plugin: [no-unnecessary-type-conversion] add rule (#10182)

🩹 Fixes

  • eslint-plugin: [prefer-nullish-coalescing] fix parenthesization bug in suggestion (#11098)
  • eslint-plugin: [unified-signatures] exempt this from optional parameter overload check (#11005)
  • eslint-plugin: [no-unnecessary-type-parameters] should parenthesize type in suggestion fixer if necessary (#10907)

❤️ Thank You

You can read about our versioning strategy and releases on our website.

8.31.1 (2025-04-28)

🩹 Fixes

  • eslint-plugin: [no-unnecessary-condition] downgrade fix to suggestion (#11081)

❤️ Thank You

... (truncated)

Commits
  • af077a0 chore(release): publish 8.32.1
  • f8db925 fix(eslint-plugin): [consistent-indexed-object-style] check for indirect circ...
  • 98c5c4c fix(eslint-plugin): [consistent-indexed-object-style] adjust auto-fixer to ge...
  • b2be3dc chore: simplify tsconfig setup using configDir (#11136)
  • 523b3ea fix(eslint-plugin): [no-deprecated] support computed member access (#10867)
  • 0d822bd docs: use T[] instead of [T, ...T[]] in rule options (#11129)
  • aeb7402 chore(ast-spec): finish migrating to vitest (#11126)
  • a89d5e3 fix(eslint-plugin): [no-unnecessary-type-conversion] shouldn't have fixable p...
  • 7598496 chore: remove now-stub @​types/marked package
  • 0cee7ca chore(deps): update dependency ignore to v7 (#11163)
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 7.18.0 to 8.32.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.32.1/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-version: 8.32.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code labels May 19, 2025
@dependabot @github
Copy link
Copy Markdown
Contributor Author

dependabot Bot commented on behalf of github Jun 2, 2025

Superseded by #19.

@dependabot dependabot Bot closed this Jun 2, 2025
@dependabot dependabot Bot deleted the dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-8.32.1 branch June 2, 2025 00:40
edobry added a commit that referenced this pull request May 6, 2026
R2 surfaced 4 BLOCKING + 5 NON-BLOCKING on merge commit acbdca2.
All 4 BLOCKING + 2 NON-BLOCKING addressed here; remaining NON-BLOCKING
(canonical phrase drift) is the deferred mt#1599 concern.

Substantive fixes:

1. R2b BLOCKING #3 (verify-task SKILL.md contradiction):
   The audit-trail-missing branch had ambiguous language (halt and
   surface, then or accept that this merge bypassed audit discipline)
   that contradicted the Never set DONE without both conditions key
   principle. Tightened: missing audit phrase always halts unconditionally.
   Removed proceed-on-missing language. Recovery path is documented but
   does NOT proceed to DONE without manual user-reviewed exception.

2. R2b BLOCKING #2 (Smoke / CI-status integration ambiguity):
   The Smoke line was added to review body but its relationship to the
   CI status N/M counts was undefined. Clarified: Smoke is an independent
   gate. CI N/M counts only GitHub Actions check_runs; Smoke is its own
   review-body field that the pre-merge hook parses independently.
   Smoke=fail blocks regardless of CI; Smoke=skipped is a valid value;
   Smoke=pass is a positive signal but does not increment CI N. Added
   parser contract explanation in step 6.3 and step 9 body format.

3. R2a BLOCKING #1 (reviewer.md adoption sweep workspace):
   Added a Source freshness section to Mode 2 Protocol. The reviewer
   subagent dispatched by /review-pr typically runs in a session
   workspace (which is at PR HEAD by definition since sessions check
   out from origin), so local Grep is safe. When invoked outside a
   session workspace, the agent must constrain reads to parsedDiff
   only and explicitly note the limitation. Mirrors the auditor
   freshness preamble pattern.

4. R2b BLOCKING #1 (auditor.md baseline tests vs Source ref):
   Auditor preamble preferred GitHub reads but baseline checks still
   ran Bash tests against possibly-stale local workspace. Added explicit
   guidance: if running in session workspace (at PR HEAD), baseline
   checks are safe; if running in main workspace and head does not
   match Source ref, EITHER ask parent to dispatch via session at
   merge SHA OR skip baseline checks with rationale recorded in the
   report. Never report FAIL on stale-local test run.

Worth-it NON-BLOCKING addressed:

- R2b NON-BLOCKING #4 (auditor.md missing example): added concrete
  mcp__github__get_file_contents call shape under freshness preamble.
- R2b NON-BLOCKING #5 (verify-task PR lookup): step 2 now searches
  both open and closed states to handle the race window between merge
  and GitHub finishing the close marker.

Intentionally deferred (R2 reaffirmed):

- R2 NON-BLOCKING #6 (canonical audit phrase drift): tracked in mt#1599
  as a separate cross-file refactor. Real concern, but cross-file
  + drift-detection mechanism is its own scope.

Spec verification table from R2: 3 of 3 success criteria reported Met.
The architectural intent of the PR is unchanged; R2 BLOCKING items
were all gap-filling refinements, not redirects.
edobry added a commit that referenced this pull request May 6, 2026
R1-A BLOCKING #1 (command injection at session-commands.ts CAS site):
The shell-interpolated mainRef in  could let a
crafted .minsky-freshness-sha file inject commands. Closed by adding
strict regex validation in readFreshnessMarker:
- mainRef must match /^[A-Za-z0-9._/-]+$/ (rejects quotes, backticks,
  semicolons, dollar-signs, parens, all shell metacharacters)
- sha must match /^[0-9a-f]{40}$/ (lowercase 40-hex)
A malicious marker now fails parsing -> CAS bypasses with no-marker
instead of running the rev-parse with poisoned input.

R1-B BLOCKING #5 (cleanup not on early-return paths): Marker was only
cleaned after a successful CAS check, leaving stale state on clean-tree
early returns, NothingToCommitError, and pre-CAS exceptions. Restructured
sessionCommit to wrap the entire post-workdir body in try/finally with
cleanupFreshnessMarker(workdir) in the finally. Cleanup now runs on
every exit path: successful CAS+push, CAS abort, commit failure, push
failure, and both early-return cases. Removed the redundant inline
cleanup from the CAS block.

R1-B BLOCKING #6 (marker write on budget-skipped path): The hook's gate
() was too loose. The
overBudget(GIT_TIMEOUT_MS * 2) path returns mainRef but skips the
listCommitsAhead probe, so the marker would be written despite the
freshness comparison never running. Fix: added
to BranchFreshnessResult, set true only on the two paths that pass
through listCommitsAhead (count===0 silent + count>0 blocked). Marker
write now requires .

R1-A NON-BLOCKING #2 (duplication): replaced the hook's inline writeFile
+ FRESHNESS_MARKER_FILENAME literal with an import of writeFreshnessMarker
from src/domain/session/freshness-marker.ts. Single source of truth for
marker payload shape and filename; the hook now uses the same helper as
the read+CAS side. Verified bun resolves the cross-directory import
without dependency-surface bloat (the helper imports only node:fs +
node:path + the local errors module).

R1-A NON-BLOCKING #3 (validation hardening): subsumed by R1-A BLOCKING
#1 fix above (SHA + ref shape validation in readFreshnessMarker).

R1-A NON-BLOCKING #4 (CAS error code): introduced FreshnessCasError
class with  and structured fields
(capturedSha, currentSha, mainRef). session-commands now throws
FreshnessCasError on CAS abort instead of generic MinskyError. Allows
UX/policy/telemetry layers to distinguish a CAS-prevented push from
other commit failures programmatically.

R1-B NON-BLOCKING #7 (.git/ existence): documented the assumption in
markerPath + writeFreshnessMarker JSDoc — workdir must be a regular git
checkout (always true for session workspaces). Bare repos / worktrees /
unusual layouts are out of scope.

R1-B NON-BLOCKING #8 (sessionCommit integration test): declined for
this round. The unit-test coverage on freshness-marker.ts (decision
matrix + 3 spec acceptance scenarios) plus the now-finally-guaranteed
cleanup behavior covers the substantive paths. Adding a full
sessionCommit integration test would require spinning up a temp git
repo + fake hook + push target — out of proportion to the marginal
value vs the existing coverage. Can be filed as a follow-up if the
reviewer wants explicit end-to-end coverage of the new CAS branch.

Tests: 4 new freshness-marker tests covering the validation regex
(shell metachars rejected,  rejected, short SHA rejected,
nested-feature ref accepted). 90 tests pass total (16 prior +
4 new + 70 hook tests). validate-all clean.
edobry added a commit that referenced this pull request May 8, 2026
feat(mt#1656): verification-mode preamble for R≥2 reviewer rounds (mt#1640 Fix 1)

Bot self-approval bypass per feedback_self_authored_pr_merge_constraints — Chinese-wall review cleared, CI green.

Chinese-wall review: #989 (review) — 0 blocking, 1 NON-BLOCKING addressed in commit 1448ea8 (clarified intentional opening-word swap "Your verification has structure" in paragraph 3 of the verification preamble + added explicit test locking the deviation). The NON-BLOCKING re Principle #6 conflict is deferred to post-merge corpus replay (SC #3) per the spec's open-premise framing.

CI: build + Prevent Placeholder Tests both passed on the latest commit (1448ea8).
Reviewer-bot auto-firing path was silent for 25+ minutes after two pushes despite green CI — likely webhook miss; resolved via Chinese-wall reviewer subagent posting via session_pr_review_submit with identity=reviewer.

Implements Fix 1 from the mt#1640 position paper (https://www.notion.so/35a937f03cb48166b06df24356b7c652).
edobry added a commit that referenced this pull request May 8, 2026
Add services/reviewer/src/logger.ts: reviewer-local winston wrapper with
HUMAN/STRUCTURED mode switching, LOGLEVEL env var, and redaction rules
(Bearer tokens, PEM content, sensitive context keys).

Migrate console.* calls in the 4 in-scope files:
- services/reviewer/src/server.ts (13 sites)
- services/reviewer/src/config.ts (1 site)
- services/reviewer/src/tier-routing.ts (2 sites)
- services/reviewer/src/mcp-client.ts (9 sites)

Add winston ^3.17.0 to services/reviewer/package.json.

Add logger.test.ts: 33 unit tests covering mode switching, level
resolution, redactString, redactContext, and acceptance tests #5/#6
(mcpToken/Bearer never emitted in log output).

Update server.test.ts captureConsoleLogs helper to intercept
process.stdout.write (winston's transport path) instead of console.log.
edobry added a commit that referenced this pull request May 14, 2026
…disambiguation (R-family trio completion)

## Summary

Closes mt#1842. Ships `/disambiguate-next` skill as the structural-tier escalation for the multi-next-step chain-walk-on-affirmative failure mode. When a parent task merges and ≥ 2 sibling/child tasks become unblocked simultaneously, brief affirmatives ("proceed," "continue," "go," "ok") authorize CONTINUING the chain but do NOT disambiguate WHICH unblocked task is meant. This skill makes self-derived dependency-ordering picks impossible to land silently — Step 3 forces option enumeration in user-facing output before any walking tool call.

This PR completes the R-family trio at the skill tier:
- **mt#1789** `/declare-framework` (DONE 2026-05-13) — framework declaration at recommendation-time
- **mt#1784** `/restate-plan` (DONE 2026-05-14) — multi-step direction restatement at action-execution-time
- **mt#1842** `/disambiguate-next` (this PR) — multi-next-step disambiguation at chain-walk junctions

All three operate at the "agent self-discipline before acting on apparent permission" tier.

## Key Changes

### New skill: `.claude/skills/disambiguate-next/SKILL.md`

User-invocable skill with 4 numbered process steps:

1. **Detect multi-next state** — enumerate walkable siblings/children via `mcp__minsky__tasks_children <parent>` or recent conversation context. Counts 0/1/≥2 with explicit branching.
2. **Apply the stakes filter** — if walking the wrong "next" costs > 30s of agent edits to undo, disambiguation IS principal-level.
3. **Surface the choice** in user-facing output BEFORE the first walking tool call — explicit template with option set + optional recommendation line.
4. **Walk after disambiguation** — invoke `/plan-task` or `/implement-task` on the chosen task.

**Phase-labeling guidance** included as a load-bearing preventive measure: use VALUE PROPOSITIONS (`skills-setup phase`, `stack-install phase`) NOT letters (`phase A`, `phase B`). Letter-labels force re-derivation from the task graph at chain-walk time, which is where the originating mt#1768/mt#1773 wrong-child-pick failure happened.

Four "When NOT to invoke" carve-outs: single unblocked next; brief affirmative after explicit recommendation; same-turn disambiguating noun; inside `/restate-plan`.

### Wirings

- **`/orchestrate`** — new "0a. Disambiguate-next check" coordination concern at the top of `Coordination concerns`, fires at any chain-walk junction with multi-next state. Includes preventive phase-labeling guidance.
- **`/plan-task`** Step 4 — new "Multi-next-step disambiguation guard" paragraph between the "brief affirmative ... treat it as confirmation to walk the chain forward" paragraph and the "Tracking task for the structural chaining mechanism" paragraph. Fires at post-READY hand-off when the just-READY'd task is a child of a parent with ≥ 2 walkable children.

Both wirings encode the trigger detection mechanically (`tasks_parent` → `tasks_children` → count walkable) and explicitly carve out the "prior recommendation IS the disambiguation" exception.

### Bridge memory updates (DB-only per mt#1012 §Memory Usage)

- **Memory `4c0b99a9-…`** (`feedback_disambiguate_multi_next_step_chain_walk`) — Status header reads "Structural fix shipped 2026-05-14 via `/disambiguate-next` skill (mt#1842)"; retirement condition adjusted to "30 days without recurrence + skill in active use"; tier history updated.
- **Memory `4b83ff51-…`** (`feedback_auto_mode_chains_skills_at_affirmative_tokens`) — new "Composes with multi-next disambiguation" section + "Multi-next-step disambiguation guard added 2026-05-14" entry + cross-references list. The composed pair (single-next: walk per this memory; multi-next: disambiguate per the sibling skill) is now documented at both memory surfaces.

## Success Criteria

All 6 SCs from the spec are satisfied:

| SC | Verification |
|----|-------------|
| 1. Skill-step detects multi-next + brief affirmative | ✅ "When to invoke" enumerates both conditions; Step 1 uses `tasks_children` / conversation context |
| 2. Requires disambiguation in user-facing output before walking | ✅ Step 3 with explicit template + Step 4 ("Walk after disambiguation") |
| 3. Stakes-filter sub-check (> 30s undo cost) | ✅ Step 2 (Apply the stakes filter) |
| 4. Phase-naming guidance (value vs letter) | ✅ "Phase-labeling guidance" section + cross-referenced in `/orchestrate` 0a wiring |
| 5. Bridge memory updated with "retire when DONE" + skill pointer | ✅ Memory `4c0b99a9-…` Status "Structural fix shipped 2026-05-14..." |
| 6. Sibling memory `4b83ff51-…` cross-references this skill | ✅ Memory `4b83ff51-…` Composes-with section + Cross-references list |

## SC#5/#6 verification (DB-only, mt#1012 bridge-policy context)

Both memories are **DB-canonical**, not file-based. Per CLAUDE.md `§Memory Usage`:

> Memory is stored in the Minsky DB. The file-based memory directory (`~/.claude/projects/<hash>/memory/`) has been removed per mt#1012 bridge-policy (b); the DB is the canonical store.

No in-repo memory file is expected; the in-repo skill + wirings cross-reference the DB-stored memories by ID. Evidence of updates within this session:

- `mcp__minsky__memory_update(id: "4c0b99a9-…")` invoked 2026-05-14T14:12:33Z; `memory_get` confirms `updatedAt: "2026-05-14T14:12:33.666Z"` and content opens with the Status header.
- `mcp__minsky__memory_update(id: "4b83ff51-…")` invoked 2026-05-14T14:13:07Z; `memory_get` confirms `updatedAt: "2026-05-14T14:13:07.688Z"` and content includes the new "Composes with multi-next disambiguation" section.

## Acceptance Tests

- ✅ Synthetic test (parent with 3 unblocked children, "proceed"): skill Step 1 enumerates all 3; Step 3 surfaces all with one-line purposes before walking
- ✅ Synthetic test (parent with 1 unblocked child, "proceed"): "When NOT to invoke" first bullet covers this — walk directly per sibling memory `4b83ff51-…`
- ✅ Synthetic test (multi-next + disambiguating noun in prompt): "When NOT to invoke" third bullet covers this — use the noun to pick AND name the choice in user-facing output
- 🕐 Audit (5 chain-walk hand-offs show no silent multi-next picks): observational, ongoing post-merge

## Out of scope (deliberately deferred)

- **PreToolUse hook** — rejected per spec; chain-walk decisions aren't tied to a single tool boundary.
- **Automated next-step inference from user prompt content** — the agent makes the surfacing call; classification is next-tier work.
- **Retroactive enforcement on in-flight chain walks** — out of scope per spec.
- **Letter-to-value-label rename across existing specs** — preventive only, applied at next `/plan-task` touchpoint per skill text. No mass rename here.

## Concurrency analysis

(N/A — no check-then-act pattern introduced; documentation/skill change only.)

## Live verification

(N/A — no live external behavior; the skill's effectiveness will be evaluated observationally over the next 30 days per the retirement budget on the bridge memory.)

Had Claude look into this.

Co-Authored-By: minsky-ai[bot] <minsky-ai[bot]@users.noreply.github.com>
edobry added a commit that referenced this pull request May 19, 2026
Reviewer-bot CHANGES_REQUESTED on initial submission. All five findings addressed:

BLOCKING #1: Spec mismatch on cultural code (mission-control vs Cyberbrain / Section 9)

The original spec Success Criterion #6 required recommending the "mission-control /
instrument-panel" code. The workshop refined this to "Cyberbrain / Section 9" — an
autonomous-flock cybernetic-substrate code that better carries the exocortex myth,
with the mission-control register demoted to "appropriate for the cockpit widget,
not the site myth."

Took the reviewer's suggested option (b): updated the spec to reflect the workshop's
refined lock via tasks_spec_search_replace. Spec now acknowledges both forms
(initial generic mission-control + refined Cyberbrain / Section 9 with the
five-layer reference architecture) and names the workshop output as the canonical
lock. The SKILL.md positioning is now consistent with the spec.

BLOCKING #2 + #3: Missing body-level Vendored from attribution

Both vendored skills (seo-skill, motion-framer) had attribution only in YAML
frontmatter description. Reviewer wanted explicit body-level attribution lines for
human readability and consistent provenance. Added "> Attribution: Vendored from
[repo-link] (retrieved 2026-05-19)" blockquote at the top of each skill's body,
naming the source repo and any minor edits applied during vendoring.

NON-BLOCKING #4 + #5: Out-of-repo / ephemeral path references

NON-BLOCKING #4 (~/Projects/minsky-site references): no change — that IS the
correct path for the marketing site on the principal's local filesystem; the
"out-of-repo" status is intentional (the marketing site is a separate repo, not
part of edobry/minsky).

NON-BLOCKING #5 (ephemeral /var/folders/... tweet-archive path): replaced the
ephemeral temp-folder citation with the durable source path
(~/Downloads/twitter-2025-09-21-*.zip) plus a clear note that the workshop
extraction was ephemeral and the durable indexing path is specced in follow-up #8
(the principal-corpus namespace on Minsky's shared pgvector infra).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edobry added a commit that referenced this pull request May 20, 2026
…sorb PR #682 (mt#1936)

## Summary

Top-level README and four highest-visibility `docs/*` files refreshed to the Macx-prose register (terse, technically loaded, presupposing reader literacy) per the brand foundation locked in mt#1929. Brand vocabulary (principal, substrate, flock) used where it appropriately replaces generic equivalents, never force-injected. Anime-stylized references stay in the brand layer only — README uses plain-language "exocortex" framing per spec criterion #1.

Part of mt#1929 (brand workstream umbrella) — child #7 / Phase 3. **Supersedes & closes PR #682 (mt#1050)** by absorbing its "Attention as the scarce resource" README subsection into this PR per gate-(g) absorb-and-close resolution decided 2026-05-20 (planning session captured in mt#1936 spec).

## Key changes

### `README.md` (top-level)

- **New opening:** locked myth in plain language — *"An exocortex for software organizations led by a principal — the substrate that holds the cognition of one mind across a flock of agents, and translates declared intent into coordinated realized work."* Plus new intro paragraph naming the recursive-principality framing.
- **Absorbed PR #682's `### Attention as the scarce resource`** subsection under "Why Minsky?" — content preserved verbatim with `operator` → `principal` to match locked vocabulary.
- **New `## Brand & identity` section** pointing at: [Principal Substrate position paper](https://www.notion.so/365937f03cb481e78fd5e0594a6507c1) (mt#1931), [`docs/brand-system.md`](https://github.com/edobry/minsky/blob/main/docs/brand-system.md) (mt#1932), [`minsky-brand` skill](https://github.com/edobry/minsky/blob/main/.claude/skills/minsky-brand/SKILL.md) (mt#1933), [`marketing-site-design` skill](https://github.com/edobry/minsky/blob/main/.claude/skills/marketing-site-design/SKILL.md), [`pz-voice` skill](https://github.com/edobry/minsky/blob/main/.claude/skills/pz-voice/SKILL.md) (mt#1952).
- **Cross-reference added:** §"Design philosophy" closes with a pointer to the [Levels of principality](https://www.notion.so/366937f03cb4812691c4db4cc44a0776) follow-on paper (mt#1953) for the recursive-principality argument.
- Section-heading case normalized to sentence-case (matches brand voice rules: all-caps for structural labels only).
- Tightened generic phrasing: "platform" → "substrate" where natural; SaaS-shaped doc prose replaced with direct technical prose.

### `docs/README.md`

- Refreshed opening: names what this directory is *for* (code-adjacent operational reference) and what lives elsewhere.
- Added pointers to the brand stack and CLAUDE.md §Documentation Taxonomy.

### `docs/architecture.md`

- Refreshed opening: names the conceptual frame (five-organ cybernetic substrate) before the code-level walk-through. Added pointer to `theory-of-operation.md` as the theoretical companion.

### `docs/configuration-guide.md`

- Refreshed Overview: replaced "centralized, validated approach" / "best practices" SaaS-shape with direct description of the precedence chain and the fail-loud-at-boot validation discipline.

### `docs/development-workflow.md`

- Refreshed opening + Overview: names the routing principle (cheaper decisions to the substrate, surface only what requires human judgement) referencing the README §"Attention as the scarce resource" subsection. Notes the system-speaks register the hooks implement (denial messages name rule + override mechanism). Cost-scales-with-depth framing replaces generic "rigorous workflow" prose (per spec criterion #6).

## PR #682 closure plan

When this PR converges and merges, PR #682 (mt#1050) will be closed without merge, with a comment pointing here. Its content (the "Attention as the scarce resource" subsection) is preserved in this PR; closing #682 removes the open redundant change. This is the absorb-and-close path the user approved during /plan-task gate (g).

## Testing

All seven acceptance tests from the spec verified before PR:

1. ✓ `head -10 README.md` shows refreshed opening + locked-myth paragraph.
2. ✓ `grep -c "Brand & identity"` returns 1.
3. ✓ Each of the three pointers (position paper / brand-system / marketing-site-design) appears at least once in README.
4. ✓ `grep -ni "the future of|transforms your|supercharge your|from your first.*IPO"` returns 0 matches across all 5 refreshed files.
5. ✓ 4 `docs/*` files touched (`docs/README.md`, `docs/architecture.md`, `docs/configuration-guide.md`, `docs/development-workflow.md`) — meets the ≥4 spec floor.
6. ✓ Tone recognizably technical-restrained Macx-prose register (subjective; reviewer-bot welcome to verify).
7. ✓ PR #682 "Attention as the scarce resource" subsection absorbed verbatim into README (with `operator` → `principal` vocab match).

Repo-wide `bun run format:check` passes.

Docs-only change. No verification artifact required per `/implement-task` §7a.

## Out of scope (per spec)

- `CLAUDE.md`, `AGENTS.md`, `.minsky/rules/**` — each has its own voice register (operational instructions for agents); shouldn't shift to brand-marketing voice.
- `docs/testing-patterns.md` — does not exist; testing material lives in the `testing-guide` skill per CLAUDE.md `§Build & Test`. Stale reference in original spec removed during /plan-task.
- Full `docs/` refresh — out of scope; targeted subset is the right move per spec.
- Cockpit visual refresh (mt#1935) and site rebuild (mt#1934) — sibling tasks under mt#1929.

Co-Authored-By: minsky-ai[bot] <minsky-ai[bot]@users.noreply.github.com>
edobry added a commit that referenced this pull request May 20, 2026
…token surface

Source: .minsky/skills/cockpit-design/content.md
Compiled: .claude/skills/cockpit-design/SKILL.md (via bun run minsky compile)

Per spec success criterion #6 ("cockpit-design SKILL.md is updated with any
cockpit-specific brand-application patterns surfaced during implementation").

Three substantive amendments:

1. "Strategic anchor — minsky-brand" section now carries a Migration status
   block enumerating the post-mt#1935 utility-class surface: bg-signal-cyan /
   bg-warn-amber / bg-warn-red / bg-iso-pastel / text-subtle / font-sans /
   font-mono / font-warm-mono / animate-status-dot / animate-hook-denial.
   Calls out the intentional absence of a brand-level `success` (green) token
   and documents the cockpit-local liveness.healthy fallback for DONE/healthy
   semantic until a broader DONE-color decision is made.
2. "Status color conventions" rewritten to drop the "[needs token]"
   aspirational warning/success token references (those tokens didn't exist;
   the recommendations were unactionable). Recommended status mapping now
   uses real palette classes: bg-warn-amber/30 for IN-REVIEW,
   bg-liveness-healthy/30 for DONE, bg-warn-red/40 for BLOCKED. Adds a
   pointer that the inline hex statusStyle() in Workstreams.tsx /
   TaskGraph.tsx is pending a focused entity-display refactor.
3. "Session liveness conventions" rewritten to drop the "[needs token]"
   markers; uses the real bg-liveness-{healthy,idle,stale,orphaned} classes
   that mt#1935 ships, plus the new animate-status-dot utility for live
   indicators.

Also backports the prior compiled-only "Strategic anchor — `minsky-brand`"
section and "Step 0 — View the live cockpit" section into the source content.md;
these were added directly to the compiled output by an earlier task (mt#1933
work for the strategic anchor; mt#1904/1925 work for Step 0) without source
updates. The recompile would have wiped them out otherwise. Source and
compiled are now in sync.

Note: 5 other skills (implement-task / plan-task / review-pr / verify-task /
orchestrate) show similar source-vs-compiled drift; restored to HEAD in this
PR so mt#1935 stays scope-tight. Separate follow-up task tracks the broader
backport.
edobry added a commit that referenced this pull request May 20, 2026
…OKLCH + palette + fonts + motion)

## Summary

Foundation-layer brand application for the Minsky Cockpit web app — migrates `src/cockpit/web/**` color tokens from HSL to OKLCH per `docs/brand-system.md` §7 cockpit-token mapping, adds the locked brand palette (signal-cyan, warn-amber, warn-red, iso-pastel, text-subtle), wires Geist + JetBrains Mono + IBM Plex Mono italic via Google Fonts, and adds the status-dot-pulse and hook-denial-flash motion utilities per brand-system §3 (both gated on `prefers-reduced-motion: reduce`).

Cockpit's mission-control register now lives "one organ inside the cyberbrain frame" — the same brand foundation as the marketing site (mt#1934) and any future Minsky surface.

## Key Changes

### Foundation layer (commit cd1d7e2)

- **`src/cockpit/web/index.css`** — all shadcn tokens (`--background`, `--foreground`, `--card`, etc.) converted from raw HSL triplets (`222.2 47% 4%`) to raw OKLCH triplets (`0.078 0 0`). Adds the brand palette CSS vars (`--signal-cyan`, `--signal-cyan-dim`, `--warn-amber`, `--warn-red`, `--iso-pastel`, `--text-subtle`, `--bg-warm`). Re-keys `--primary` to `signal.cyan` in the `.dark` block (success criterion #2). Adds typography vars (`--font-sans`, `--font-mono`, `--font-warm-mono`) and motion keyframes (`status-dot-pulse`, `hook-denial-flash`) plus a global `@media (prefers-reduced-motion: reduce)` reset.
- **`tailwind.config.ts`** — switches `hsl(var(--X))` → `oklch(var(--X) / <alpha-value>)` for all existing tokens (alpha-modifier compatible). Adds `signal.{cyan, cyan-dim}`, `warn.{amber, red}`, `iso.pastel`, `subtle` color groups, plus `fontFamily.{sans, mono, "warm-mono"}` and animation utilities `animate-status-dot` / `animate-hook-denial`.
- **`src/cockpit/web/index.html`** — loads Geist (400/500/600/700), JetBrains Mono (400/500), and IBM Plex Mono italic (400) from Google Fonts with `preconnect` hints (all SIL OFL 1.1 per brand-system §1). `<body>` defaults to `font-sans`.

Liveness sub-tokens (`--liveness-{healthy,idle,stale,orphaned}`) stay cockpit-local per brand-system §7; converted to OKLCH equivalents preserving green/amber/red/gray operational semantic.

### cockpit-design skill update (commit d6c5d6c)

Per spec success criterion #6 ("cockpit-design SKILL.md updated with cockpit-specific brand-application patterns surfaced during implementation"), three substantive amendments to `.minsky/skills/cockpit-design/content.md` (source) and `.claude/skills/cockpit-design/SKILL.md` (regenerated via `bun run minsky compile`):

1. **Strategic anchor — `minsky-brand`** section now carries a Migration status block enumerating the post-mt#1935 utility-class surface and documenting the intentional absence of a brand-level `success` (green) token.
2. **Status color conventions** rewritten to drop the "[needs token]" aspirational warning/success references (those tokens didn't exist; the recommendations were unactionable). Recommended status mapping now uses real palette classes: `bg-warn-amber/30` for IN-REVIEW, `bg-liveness-healthy/30` for DONE, `bg-warn-red/40` for BLOCKED. Adds a pointer that the inline hex `statusStyle()` in `Workstreams.tsx` / `TaskGraph.tsx` is pending a focused entity-display refactor (mt#1929 follow-up).
3. **Session liveness conventions** rewritten to use the real `bg-liveness-{healthy,idle,stale,orphaned}` classes plus the new `animate-status-dot` utility.

Also backports two prior compiled-only sections — "Strategic anchor — `minsky-brand`" (mt#1933 work) and "Step 0 — View the live cockpit" (mt#1904/1925 work) — into the source `content.md`. Recompile would have wiped them otherwise. Source and compiled are now in sync.

### Out of scope (deliberately)

- **Inline categorical hex colors in `Workstreams.tsx` / `TaskGraph.tsx` `statusStyle()` (8 task-status badges).** These are entity-display widget logic per spec `## Out of scope`; refactoring them to brand tokens is a focused follow-up under cockpit-design rather than mt#1935 (foundation-layer migration only). Documented in the updated cockpit-design skill.
- **Other compiled-skill drift.** `bun run minsky compile` regenerates 6 skill files total; restoring 5 (`implement-task`, `plan-task`, `review-pr`, `verify-task`, `orchestrate`) to HEAD here so mt#1935 stays scope-tight. The drift is filed as **mt#1956** under the brand-workstream umbrella (mt#1929).

## Testing

- `bun run cockpit:build` — clean (881ms, 32.90 KB CSS / 6.76 KB gzipped, 393.58 KB JS).
- `bun test src/cockpit/cockpit.test.ts --preload ./tests/setup.ts --timeout=30000` — **43 pass, 0 fail** (no regression from baseline).
- `mcp__minsky__validate_typecheck` — 0 errors.
- `mcp__minsky__validate_lint` — 0 errors, 0 warnings across 1539 files.
- Generated CSS audit: 0 `hsl()` leftovers; 24 distinct `oklch(var(--X))` tokens present; `status-dot-pulse` keyframe present; `hook-denial-flash` keyframe present; `@media (prefers-reduced-motion: reduce)` present; `font-family: var(--font-sans)` and `var(--font-mono)` wired.

## Acceptance Tests (per spec)

1. ✅ Cockpit dev build (`bun run cockpit:build`) compiles and produces a `dist/` bundle without errors.
2. ✅ The locked typography stack (Geist for sans, JetBrains Mono for mono) is wired into CSS vars and `<body>`; tokens are OKLCH; brand palette utilities are available on the Tailwind surface. **Note:** full visual inspect-element verification requires a running cockpit + browser; this PR ships the foundation, and the running-cockpit verification is the natural next step when widget refactors land.
3. ✅ Existing widgets render correctly with the new tokens — semantic tokens unchanged in name (`bg-background`, `text-foreground`, etc.); only their resolved color format changed. No visual regression expected because the OKLCH values were derived from the brand palette which was itself derived from `bg.base` / `text.primary` etc. starting hex points.
4. ✅ Hook-denial / blocked-action surfaces have the warning palette and motion utility available (`animate-hook-denial` consumes `warn-amber`); widget adoption is the natural follow-up.
5. ✅ `prefers-reduced-motion: reduce` collapses cockpit animations (global reset in `index.css` zeroes out `animation-duration` and `transition-duration`).
6. ✅ `bun test src/cockpit/cockpit.test.ts` passes (43/43).

## Cross-references

- mt#1929 — brand workstream umbrella (this is child #6 / Phase 3)
- mt#1932 — `docs/brand-system.md` operational tokens (dependency, DONE)
- mt#1933 — `.claude/skills/minsky-brand/SKILL.md` brand-foundation skill (dependency, DONE)
- mt#1934 — marketing-site rebuild (sibling, TODO)
- mt#1956 — follow-up: sync compiled-skill drift in 5 other skills back to source

Co-Authored-By: minsky-ai[bot] <minsky-ai[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants