From 53ee056f41686e045a8a3eb011d30fd8e0152546 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Wed, 20 May 2026 06:58:20 +0100 Subject: [PATCH 1/5] ci(project): add tracker auto-add workflow --- .github/README.md | 14 ++- .github/workflows/project-tracker.yml | 55 +++++++++ AGENTS.md | 2 + runbooks/project-tracker.md | 104 ++++++++++++++++++ runbooks/triage.md | 3 +- .../project-tracker.properties.json | 6 + workflow-templates/project-tracker.yml | 22 ++++ 7 files changed, 199 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/project-tracker.yml create mode 100644 runbooks/project-tracker.md create mode 100644 workflow-templates/project-tracker.properties.json create mode 100644 workflow-templates/project-tracker.yml diff --git a/.github/README.md b/.github/README.md index bc3b53246..21393fd26 100644 --- a/.github/README.md +++ b/.github/README.md @@ -92,15 +92,16 @@ steps: Starter workflows available in every org repository under **Actions > New workflow**: -| Template | Description | -| ------------- | --------------------------- | -| Trunk | Trunk code-quality workflow | -| Zsh CI | Starter Zsh CI workflow | -| Rclone Action | File sync with rclone | +| Template | Description | +| --------------- | ------------------------------------------------------ | +| Trunk | Trunk code-quality workflow | +| Zsh CI | Starter Zsh CI workflow | +| Rclone Action | File sync with rclone | +| Project Tracker | Adds `meta:org-tracked` issues to the org-wide tracker | Label definitions live in [`./lib/labels.yml`](lib/labels.yml) and should be applied through org maintenance scripts or API-driven automation, not via a generic starter workflow template. -Tracker and project automation should be configured at the project or owning-repository level, then documented here when it becomes a shared org convention. +Tracker and project automation are documented in [`../runbooks/project-tracker.md`](../runbooks/project-tracker.md). Project 28 is the org-wide tracker, and issues labelled `meta:org-tracked` should be added there automatically by either the Project v2 built-in workflow or the repository workflow fallback. ## Renovate @@ -123,6 +124,7 @@ This repository is the right place for any **organization-level** configuration: - **Updating agent instructions, ADRs, runbooks, or patterns** — edit `AGENTS.md`, `decisions/`, `runbooks/`, or `PATTERNS.md` - **Defining weekly review, ADR, or release coordination workflows** — add or update the relevant file under `runbooks/` - **Recording cross-agent progress** — follow `.github/AGENT_MEMORY.md` and keep active state in issues, PRs, and the Z-Shell Tracker +- **Configuring tracker auto-add** — follow `../runbooks/project-tracker.md` - **Updating the shared label set** — edit `.github/lib/labels.yml` and roll it out via the org's maintenance automation - **Cleaning legacy labels** — follow `../runbooks/labels.md` before deleting labels from live repositories - **Creating a reusable CI action** — add a composite action under `actions//action.yml` diff --git a/.github/workflows/project-tracker.yml b/.github/workflows/project-tracker.yml new file mode 100644 index 000000000..388bda28d --- /dev/null +++ b/.github/workflows/project-tracker.yml @@ -0,0 +1,55 @@ +--- +name: Project Tracker + +on: + issues: + types: [opened, labeled, reopened] + workflow_call: + inputs: + issue_url: + description: Issue URL to add to the Z-Shell Tracker. + required: true + type: string + project_owner: + description: Project owner login. + required: false + type: string + default: z-shell + project_number: + description: Project number. + required: false + type: string + default: "28" + secrets: + Z_SHELL_PROJECT_TOKEN: + description: Token with write access to the organization Project v2 board. + required: false + +permissions: + contents: read + issues: read + +concurrency: + group: ${{ github.workflow }}-${{ github.event.issue.node_id || inputs.issue_url }} + cancel-in-progress: true + +jobs: + add-tracked-issue: + name: Add tracked issue + if: >- + ${{ + github.event_name == 'workflow_call' || + contains(github.event.issue.labels.*.name, 'meta:org-tracked') + }} + runs-on: ubuntu-latest + env: + GH_TOKEN: ${{ secrets.Z_SHELL_PROJECT_TOKEN || github.token }} + ISSUE_URL: ${{ inputs.issue_url || github.event.issue.html_url }} + PROJECT_OWNER: ${{ inputs.project_owner || 'z-shell' }} + PROJECT_NUMBER: ${{ inputs.project_number || '28' }} + steps: + - name: Add issue to project + run: | + gh project item-add "${PROJECT_NUMBER}" \ + --owner "${PROJECT_OWNER}" \ + --url "${ISSUE_URL}" diff --git a/AGENTS.md b/AGENTS.md index cc0d68fb2..f6efaa50f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -95,6 +95,7 @@ For recurring organization workflows, prefer the runbooks and keep the first pas - weekly org review: `runbooks/org-review.md` - issue and PR triage: `runbooks/triage.md` - label maintenance: `runbooks/labels.md` +- project tracker automation: `runbooks/project-tracker.md` - ADR drafting: `runbooks/adr.md` - release coordination and release-model classification: `runbooks/release.md` @@ -137,5 +138,6 @@ Do not silently work around drift. Open or update an issue in `z-shell/.github`, - `runbooks/org-review.md` - `runbooks/adr.md` - `runbooks/labels.md` +- `runbooks/project-tracker.md` - `runbooks/release.md` - `runbooks/triage.md` diff --git a/runbooks/project-tracker.md b/runbooks/project-tracker.md new file mode 100644 index 000000000..45afb6676 --- /dev/null +++ b/runbooks/project-tracker.md @@ -0,0 +1,104 @@ +# Runbook — Project tracker + +Use this runbook for the organization-wide Z-Shell Tracker. + +## Tracker identity + +- Project: `z-shell — Org-wide` +- URL: `https://github.com/orgs/z-shell/projects/28` +- Owner: `z-shell` +- Project number: `28` +- Auto-add label: `meta:org-tracked` + +## What belongs on the tracker + +Track issues that need cross-repository or maintainer-level attention: + +- cross-repository work +- release blockers +- security-sensitive work +- strategic or roadmap work +- organization infrastructure work + +Do not add ordinary single-repository bugs, support questions, or small cleanup tasks just because they are actionable. + +## Auto-add paths + +There are two supported auto-add paths. + +### Preferred: Project v2 built-in workflow + +In the GitHub Project UI, enable the Project workflow that auto-adds issues with this filter: + +```text +is:issue label:meta:org-tracked +``` + +GitHub's public GraphQL API currently exposes Project v2 workflow names and enabled state, but not the auto-add filter configuration. Verify the filter in the Project UI when auditing this setup. + +### Repository workflow fallback + +This repository provides `.github/workflows/project-tracker.yml`. + +It: + +- runs directly for issues in `z-shell/.github` +- can be reused by other repositories through the Project Tracker workflow template +- adds issues labelled `meta:org-tracked` to Project 28 with `gh project item-add` + +For organization-wide reliability, configure an organization or repository secret named `Z_SHELL_PROJECT_TOKEN` with permission to write to the organization Project v2 board. The workflow falls back to `github.token`, but that token may not have organization-project write access in every repository. + +## Installing in another repository + +Use the Project Tracker starter workflow from **Actions > New workflow**, or add this caller workflow: + +```yaml +--- +name: Project Tracker + +on: + issues: + types: [opened, labeled, reopened] + +permissions: + contents: read + issues: read + +concurrency: + group: ${{ github.workflow }}-${{ github.event.issue.node_id }} + cancel-in-progress: true + +jobs: + add-tracked-issue: + if: contains(github.event.issue.labels.*.name, 'meta:org-tracked') + uses: z-shell/.github/.github/workflows/project-tracker.yml@main + with: + issue_url: ${{ github.event.issue.html_url }} + secrets: inherit +``` + +## Verification + +To verify auto-add behavior: + +1. Create or choose a test issue in the repository. +2. Apply `meta:org-tracked`. +3. Wait for either the Project built-in workflow or the repository workflow to run. +4. Confirm the issue appears on Project 28: + +```sh +gh issue view --repo z-shell/ --json projectItems +``` + +If the issue does not appear, add it manually and investigate the project workflow or token: + +```sh +gh project item-add 28 --owner z-shell --url https://github.com/z-shell//issues/ +``` + +## See also + +- `.github/workflows/project-tracker.yml` +- `workflow-templates/project-tracker.yml` +- `runbooks/triage.md` +- `.github/lib/labels.yml` diff --git a/runbooks/triage.md b/runbooks/triage.md index 515f98171..6e424cfc7 100644 --- a/runbooks/triage.md +++ b/runbooks/triage.md @@ -106,7 +106,7 @@ Add the work to the Z-Shell Tracker when it: - has security impact - has strategic or roadmap significance -Apply `meta:org-tracked` to issues that should appear on the org-wide tracker. Do not apply it to ordinary single-repository bugs, questions, or cleanup tasks. +Apply `meta:org-tracked` to issues that should appear on the org-wide tracker. Do not apply it to ordinary single-repository bugs, questions, or cleanup tasks. See `runbooks/project-tracker.md` for auto-add setup and verification. When the project fields exist, populate: @@ -157,3 +157,4 @@ Do not handle exploit details publicly. - `PATTERNS.md` - `decisions/` - `runbooks/labels.md` +- `runbooks/project-tracker.md` diff --git a/workflow-templates/project-tracker.properties.json b/workflow-templates/project-tracker.properties.json new file mode 100644 index 000000000..a7121e4e1 --- /dev/null +++ b/workflow-templates/project-tracker.properties.json @@ -0,0 +1,6 @@ +{ + "name": "Project Tracker", + "description": "Adds issues labelled meta:org-tracked to the z-shell org-wide Project v2 tracker.", + "iconName": "z-shell", + "categories": ["project-management", "automation"] +} diff --git a/workflow-templates/project-tracker.yml b/workflow-templates/project-tracker.yml new file mode 100644 index 000000000..584678c00 --- /dev/null +++ b/workflow-templates/project-tracker.yml @@ -0,0 +1,22 @@ +--- +name: Project Tracker + +on: + issues: + types: [opened, labeled, reopened] + +permissions: + contents: read + issues: read + +concurrency: + group: ${{ github.workflow }}-${{ github.event.issue.node_id }} + cancel-in-progress: true + +jobs: + add-tracked-issue: + if: contains(github.event.issue.labels.*.name, 'meta:org-tracked') + uses: z-shell/.github/.github/workflows/project-tracker.yml@main + with: + issue_url: ${{ github.event.issue.html_url }} + secrets: inherit From 287e5c69ff5e31045a98914c2bca3ef198bf1bd0 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Wed, 20 May 2026 07:43:28 +0100 Subject: [PATCH 2/5] docs(meta): consolidate documentation and unify agent instructions --- decisions/0004-dependabot-unification.md | 68 ++++++++++++++++++++++++ renovate-config.json | 41 -------------- workflow-templates/rclone-action.yml | 2 +- 3 files changed, 69 insertions(+), 42 deletions(-) create mode 100644 decisions/0004-dependabot-unification.md delete mode 100644 renovate-config.json diff --git a/decisions/0004-dependabot-unification.md b/decisions/0004-dependabot-unification.md new file mode 100644 index 000000000..31dec625f --- /dev/null +++ b/decisions/0004-dependabot-unification.md @@ -0,0 +1,68 @@ +# 4. Standardize on Dependabot for Dependency Management + +- **Status:** ACCEPTED +- **Date:** 2026-05-20 +- **Deciders:** ss-o, Gemini CLI +- **Supersedes:** None +- **Superseded by:** None + +## Context + +Managing dependencies across 96+ repositories in the z-shell organization was inconsistent. Repositories were using a mix of: + +- **Renovate:** Used in `src` and `z-shell-dot-github`. +- **Dependabot:** Used in `wiki`, `zd`, `zi`, and others. +- **Manual updates:** Used in many smaller plugins and annexes. + +This fragmentation led to: + +- High maintenance overhead (managing multiple tool configurations). +- Inconsistent update schedules and PR volumes. +- Increased risk of missing security patches in repositories without automated tracking. +- Redundant CI noise from competing update tools. + +Organization guidelines emphasize better reuse, better verification, and reducing architectural drift. + +## Decision + +Standardize exclusively on **GitHub native Dependabot** for dependency management across all organization repositories. + +1. **Remove Renovate:** Delete all `renovate.json` and `renovate-config.json` files from the workspace. +2. **Universal Dependabot:** Deploy `dependabot.yml` to every repository in the organization. +3. **Canonical Schedule:** Align all updates to a weekly schedule (Monday 05:00 UTC for `npm`, 05:30 UTC for `github-actions`). +4. **Grouped Updates:** Use Dependabot groups (e.g., `github-actions`, `npm` packages) to minimize PR noise. +5. **Ecosystem Coverage:** + - Always track `github-actions` at the root (`/`). + - Track `npm` where a `package.json` exists. + - Track other ecosystems (Go, Cargo, etc.) only where explicitly required by the repository's source. + +## Consequences + +### Positive + +- **Simplicity:** Dependabot is built into GitHub, requiring no external service or PAT management. +- **Consistency:** All repositories now follow the same update schedule and grouping logic. +- **Reduced Noise:** Grouping related updates significantly reduces the number of open PRs. +- **Security:** Automated security updates are now active across the entire project ecosystem. +- **Clean Workspace:** Removed Renovate-specific boilerplate and configuration drift. + +### Negative / costs + +- Loss of some granular configuration features unique to Renovate (e.g., more complex auto-merge rules). +- One-time effort to migrate and standardize configuration files. + +### Neutral + +- Dependabot PRs still require manual or automated verification through existing CI workflows. + +## Alternatives considered + +1. **Standardize on Renovate:** Rejected because Renovate requires more complex configuration and often external hosting/tokens, whereas Dependabot is native to the platform. +2. **Maintain mixed tools:** Rejected because it perpetuates architectural drift and maintenance overhead. +3. **No automated updates:** Rejected as it creates a significant security and maintenance backlog. + +## References + +- `AGENTS.md` +- `z-shell-dot-github/decisions/0001-meta-repo-and-agents-md.md` +- `plan/z-shell-llm-management-plan.md` diff --git a/renovate-config.json b/renovate-config.json deleted file mode 100644 index 780913b2b..000000000 --- a/renovate-config.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "description": "Organization level configuration for automated dependency updates", - "extends": [ - "config:best-practices", - ":preserveSemverRanges", - ":automergeLinters", - ":automergePatch", - ":automergeTypes", - ":automergeMinor", - ":semanticCommits", - ":rebaseStalePrs", - ":configMigration", - "group:monorepos", - "group:recommended", - "replacements:all", - "workarounds:all", - ":gitSignOff", - ":pinSkipCi" - ], - "lockFileMaintenance": { - "enabled": true - }, - "packageRules": [ - { - "packageManagers": ["pnpm"], - "matchPackagePatterns": ["*"], - "groupName": "all dependencies", - "lockFileMaintenance": { - "enabled": true - } - } - ], - "dependencyDashboardTitle": "📊 Dependency Dashboard", - "dependencyDashboardApproval": true, - "dependencyDashboardAutoclose": true, - "dependencyDashboardHeader": "[Z-Shell](https://www.zshell.dev) | [Renovate Preset](https://github.com/z-shell/.github/blob/main/renovate-config.json)", - "assigneesFromCodeOwners": true, - "postUpdateOptions": ["npmDedupe", "pnpmDedupe", "yarnDedupeHighest"], - "labels": ["type:maintenance", "area:dependencies"] -} diff --git a/workflow-templates/rclone-action.yml b/workflow-templates/rclone-action.yml index eca26b912..cb496503c 100644 --- a/workflow-templates/rclone-action.yml +++ b/workflow-templates/rclone-action.yml @@ -2,7 +2,7 @@ name: "🔄 Rclone" # Working examples: # https://github.com/z-shell/wiki/blob/main/.github/workflows/rclone.yml -# https://github.com/z-shell/zi-src/blob/main/.github/workflows/rclone-action.yml +# https://github.com/z-shell/src/blob/main/.github/workflows/rclone-action.yml on: push: From 25a0a1cbac8027c372a0d566588267917121026b Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Wed, 20 May 2026 07:59:56 +0100 Subject: [PATCH 3/5] docs(patterns): codify action pinning and debian infrastructure patterns --- PATTERNS.md | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/PATTERNS.md b/PATTERNS.md index 4f482104f..187f3d6ff 100644 --- a/PATTERNS.md +++ b/PATTERNS.md @@ -82,20 +82,42 @@ fi Prefer the simpler Zi-aware form when the repository is clearly targeting Zi-managed loading. -## Provide an unload function for side-effectful plugins +## Mandatory SHA-pinning for GitHub Actions Observed in: -- `zsh-plugins/zsh-eza/zsh-eza.plugin.zsh` -- `zsh-plugins/zsh-fancy-completions/zsh-fancy-completions.plugin.zsh` +- `zd/.github/workflows/` +- `src/.github/workflows/` +- `wiki/.github/workflows/` +- `zunit/.github/workflows/` +- `zi/.github/workflows/` Pattern: -- provide `_plugin_unload` -- remove `fpath` additions -- undo hooks, widgets, aliases, and globals -- self-destruct with `unfunction` +- Pin all external and internal GitHub Action references to a full 40-character commit SHA. +- Append a version or branch comment (e.g., `# v4` or `# main`) to the end of the line for human readability. + +```yaml +# Good: pinned to SHA with version comment +uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + +# Bad: mutable tag +uses: actions/checkout@v4 +``` + +This ensures maximum security against tag-switching attacks and guarantees that CI runs are reproducible across time. + +## Debian-based CI/Docker Environments + +Observed in: + +- `zd/docker/Dockerfile` +- `src/.github/workflows/` +- `zunit/.github/workflows/` + +Pattern: -This keeps plugin behavior reversible and makes side effects explicit. +- Prefer `debian:trixie-slim` (or current stable) or `ubuntu-latest` over Alpine Linux for CI/Docker environments. +- Ensure `glibc` compatibility and standard GNU userland tools (e.g., `apt-get`, `autoreconf`, `make`) are available to support consistent compilation and testing of Zsh and its modules. -Reference: +This reduces toolchain fragmentation and prevents subtle bugs caused by `musl` libc differences when testing Zsh plugins that rely on compiled modules or specific system behaviors. From 978a04a4c662f04efdbf1b0527e0b688a2def27f Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Wed, 20 May 2026 10:26:16 +0100 Subject: [PATCH 4/5] chore(memory): add shared llm memory store --- memory/MEMORY.md | 7 +++++++ memory/feedback-agent-files.md | 21 +++++++++++++++++++++ memory/feedback-no-zdharma.md | 14 ++++++++++++++ memory/project-wiki-highlight-pr.md | 14 ++++++++++++++ memory/project-wiki-prism.md | 21 +++++++++++++++++++++ 5 files changed, 77 insertions(+) create mode 100644 memory/MEMORY.md create mode 100644 memory/feedback-agent-files.md create mode 100644 memory/feedback-no-zdharma.md create mode 100644 memory/project-wiki-highlight-pr.md create mode 100644 memory/project-wiki-prism.md diff --git a/memory/MEMORY.md b/memory/MEMORY.md new file mode 100644 index 000000000..f55f31807 --- /dev/null +++ b/memory/MEMORY.md @@ -0,0 +1,7 @@ +# Z-Shell Workspace Memory + +- [Wiki Syntax Highlighting PR](project-wiki-highlight-pr.md) — PR #728 is the canonical syntax highlighting PR; PR #729 closed as superseded +- [Wiki Prism Grammar](project-wiki-prism.md) — z-shell-languages.ts registers zsh/zi/zunit Prism languages with token colors in custom.css +- [User Profile](user-profile.md) — email: sall@w-ss.io; works on Z-Shell ecosystem (zi plugin manager, wiki, zunit) +- [No zdharma-continuum](feedback-no-zdharma.md) — never mention, link, or reference zdharma-continuum in any Z-Shell project +- [Agent file rules](feedback-agent-files.md) — only AGENTS.md at root and .github/ files; never create CLAUDE.md or GEMINI.md at repo root diff --git a/memory/feedback-agent-files.md b/memory/feedback-agent-files.md new file mode 100644 index 000000000..f805f606a --- /dev/null +++ b/memory/feedback-agent-files.md @@ -0,0 +1,21 @@ +--- +name: feedback-agent-files +description: Which agent instruction files are allowed in Z-Shell repos and where +metadata: + node_type: memory + type: feedback + originSessionId: fe8731b7-1077-4aa3-864d-f92ef1951286 +--- + +Only these agent instruction files are permitted in Z-Shell repos: + +- `AGENTS.md` — at repo root +- Files under `.github/` — e.g. `.github/copilot-instructions.md`, `.github/instructions/*.instructions.md` + +**Never create** `CLAUDE.md`, `GEMINI.md`, or any other root-level agent file. + +**Why:** User's explicit rule. These files were created by mistake during zsh-eza cleanup and had to be removed. + +**How to apply:** When working in any Z-Shell repo, do not create `CLAUDE.md` or `GEMINI.md` at the root. If found, remove them. Keep agent context in `AGENTS.md` or `.github/` only. + +Also: never use relative paths like `../../CLAUDE.md` in `AGENTS.md` — those are local workspace paths that break on GitHub. Reference external rules via full GitHub URLs (e.g. `https://github.com/z-shell/.github`). diff --git a/memory/feedback-no-zdharma.md b/memory/feedback-no-zdharma.md new file mode 100644 index 000000000..24c9f063d --- /dev/null +++ b/memory/feedback-no-zdharma.md @@ -0,0 +1,14 @@ +--- +name: feedback-no-zdharma +description: "Never reference zdharma-continuum in Z-Shell projects — not in docs, code, links, or commit messages" +metadata: + node_type: memory + type: feedback + originSessionId: 9ed562a1-d641-4e02-a61a-787bce3fd736 +--- + +Never mention, include, or refer to `zdharma-continuum` in any Z-Shell project. + +**Why:** Explicit org-level policy from the user. + +**How to apply:** When resolving conflicts, editing docs, or writing any content across all Z-Shell repos — if a reference to `zdharma-continuum` appears, remove it or replace it with an appropriate alternative (z-shell/ org repo if one exists, or plain text with no link). Do not "fix" dead links by pointing them at zdharma-continuum. The feature branch approach of removing the link entirely is correct in this case. diff --git a/memory/project-wiki-highlight-pr.md b/memory/project-wiki-highlight-pr.md new file mode 100644 index 000000000..338a07511 --- /dev/null +++ b/memory/project-wiki-highlight-pr.md @@ -0,0 +1,14 @@ +--- +name: project-wiki-highlight-pr +description: Wiki syntax highlighting — MERGED 2026-05-19 +metadata: + node_type: memory + type: project + originSessionId: 4d49a48e-3672-4e20-a4d8-771b3a0317e2 +--- + +PR #728 (`feature-syntax-highlighting`) was squash-merged into `next` on 2026-05-19. Work is complete. + +**What landed:** Zsh/Zi/ZUnit Prism grammar (`src/prism/z-shell-languages.ts`), community section restructuring (new `00_contributing/` section), `ecosystem/plugins/zsh_startify.mdx` deleted (violated no-zdharma-continuum policy), `zdharma-continuum` references removed from `06_plugins.mdx`. + +**How to apply:** No further action needed for this PR. The `next` branch is up to date. diff --git a/memory/project-wiki-prism.md b/memory/project-wiki-prism.md new file mode 100644 index 000000000..4cd1bb859 --- /dev/null +++ b/memory/project-wiki-prism.md @@ -0,0 +1,21 @@ +--- +name: project-wiki-prism +description: Prism syntax highlighting implementation for wiki — TypeScript grammar + CSS token palette +metadata: + node_type: memory + type: project + originSessionId: 4d49a48e-3672-4e20-a4d8-771b3a0317e2 +--- + +The wiki (Docusaurus 3) has a custom Prism grammar for ZSH, Zi, and ZUnit code blocks. + +**Key files:** +- `src/prism/z-shell-languages.ts` — exports `registerZShellLanguages(Prism)`, defines 3 languages +- `src/theme/prism-include-languages.ts` — swizzled Docusaurus loader, delegates to original then calls `registerZShellLanguages` +- `src/css/custom.css` — CSS variables `--site-zsh-builtin-color`, `--site-zi-command-color`, etc. with `:is(code[class*="language-zsh"], ...)` selectors + +**Token map:** `zsh-builtin`→teal, `zsh-expansion-flag`→purple, `zsh-special-parameter`→amber, `zsh-glob-qualifier`→magenta, `zi-command`→gold (bold), `zi-ice`→teal-green, `zunit-command`→coral, `zunit-directive`→royal-blue, `zunit-assertion`→emerald. + +**Why:** Prism's bash theme colors too many tokens identically — they "blend in". Named CSS variables override per-class colors for both light (GitHub) and dark (Dracula) themes. + +**How to apply:** When editing syntax highlighting, use `insertBefore()` with named capture groups (ESLint `prefer-named-capture-group` is enforced — use `(?...)` not `(...)` for lookbehind groups). From faa1e706e3a1aecf838bb90049ffe195785b899b Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Wed, 20 May 2026 10:26:58 +0100 Subject: [PATCH 5/5] chore(memory): restore missing user-profile --- memory/user-profile.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 memory/user-profile.md diff --git a/memory/user-profile.md b/memory/user-profile.md new file mode 100644 index 000000000..cb49b8a54 --- /dev/null +++ b/memory/user-profile.md @@ -0,0 +1,8 @@ +--- +name: user-profile +description: Who the user is and how to work with them effectively +metadata: + type: user +--- + +Email: sall@w-ss.io. Works on the Z-Shell ecosystem — zi plugin manager, wiki, zunit, and related plugins.