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
Closed
Conversation
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>
Contributor
Author
|
Superseded by #19. |
5 tasks
This was referenced Apr 25, 2026
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>
Merged
12 tasks
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps @typescript-eslint/eslint-plugin from 7.18.0 to 8.32.1.
Release notes
Sourced from
@typescript-eslint/eslint-plugin's releases.... (truncated)
Changelog
Sourced from
@typescript-eslint/eslint-plugin's changelog.... (truncated)
Commits
af077a0chore(release): publish 8.32.1f8db925fix(eslint-plugin): [consistent-indexed-object-style] check for indirect circ...98c5c4cfix(eslint-plugin): [consistent-indexed-object-style] adjust auto-fixer to ge...b2be3dcchore: simplifytsconfigsetup usingconfigDir(#11136)523b3eafix(eslint-plugin): [no-deprecated] support computed member access (#10867)0d822bddocs: useT[]instead of[T, ...T[]]in rule options (#11129)aeb7402chore(ast-spec): finish migrating tovitest(#11126)a89d5e3fix(eslint-plugin): [no-unnecessary-type-conversion] shouldn't have fixable p...7598496chore: remove now-stub@types/markedpackage0cee7cachore(deps): update dependency ignore to v7 (#11163)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 rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot mergewill merge this PR after your CI passes on it@dependabot squash and mergewill squash and merge this PR after your CI passes on it@dependabot cancel mergewill cancel a previously requested merge and block automerging@dependabot reopenwill reopen this PR if it is closed@dependabot closewill close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill 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 versionwill 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 dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)