원클릭으로
scripts-workflow
Use when adding/editing scripts under scripts/. Covers layout conventions, shell rules, output contracts, validation.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Use when adding/editing scripts under scripts/. Covers layout conventions, shell rules, output contracts, validation.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use for ast-grep lint rules when general-purpose linters cannot express patterns. Covers config, rules, testing, CI integration.
Use for TypeScript/ECMAScript compatibility changes. Defines decision order for semantic compatibility, WASI lowering, Node fallback.
Use when adding/editing docs under docs/. Enforces state separation between final-state docs, current-state, issues, and historical state.
Use when adding/editing/moving/renaming fixtures under fixtures/. Covers naming rules, content rules, inventory, reference updates.
Use when acting as gatekeeper/reviewer for PRs or agent outputs. Covers sources of truth, required commands, reject conditions, domain checklists.
Use when resolving git merge conflicts, especially after git pull --rebase or git merge origin/master
| name | scripts-workflow |
| description | Use when adding/editing scripts under scripts/. Covers layout conventions, shell rules, output contracts, validation. |
Discovery: the repo entry is mise and root mise.toml (list: mise tasks); avoid making people read every scripts/*.sh to find usage. When you add a script, register the task in mise.toml and keep the underlying dispatcher mapping in sync. Layout (first tier): scripts/check/ (static, non-destructive), scripts/gate/ (pass/fail), scripts/gen/ (refresh tracked generated artifacts), scripts/run/ (execute/measure), scripts/report/ (human-facing formatting), scripts/perf/ (benchmarks), scripts/dev/ (local setup), scripts/lib/ (sourced helpers only; not executed). Deprecated top-level names may remain as compatibility wrappers during migration. Harness baseline: mise run gate-all inventories toolchain + P0 checks and runs the rest of the project gates; Rust warnings are errors via RUSTFLAGS=-D warnings; clippy runs as cargo clippy --all-targets -- -D warnings.
Automatically execute the following after making script changes. Use mise as the primary repo entry. mise run <task> is optional sugar for the same tasks.
mise run check scripts (plus mise run fmt if the script is invoked from tests or the diff touches Rust)mise run check after touching issues paths or task dispatchscripts docs (e.g. mise run reference-coverage with a small limit when that script supports it)mise tasks to confirm your new mise run <task> appears after you add it to mise.tomlmise is the canonical executable entrypoint.
Do not document or recommend direct dispatcher invocation in Markdown.
Required rules:
mise.tomlmise run check issuespython scripts/check/issue-health.pymise run check scriptsmise run checkmise.toml task, run:
mise tasksScript migrations must remove stale command references in the same change.
Before finishing any script rename, .sh to .py migration, or manager command rename, run:
rg 'scripts/check_.*\.sh|update_issue_index|issue-queue\.py|update-issue-index\.sh|fixture-differential\.sh|check_fast_gate\.sh|check_manifest_imports\.sh' .
If any hit remains, classify it explicitly:
Do not leave stale references in:
.agents/skills/**.agents/prompts/**.github/workflows/**.githooks/**README.mdAGENTS.mdissues/open/**issues/index.mdIssue queue scripts are infrastructure-critical. Do not let checker and generator drift.
Required rules:
scripts/lib/.scripts/check/issue-health.py and scripts/gen/update-issue-index.py must use the same parser and table renderer.mise run update-issue-index -- --check must fail if generated table content differs, not only if IDs are missing.mise run check issues must verify:
reference/** paths are external corpus references, not normal repo-owned paths. Do not fail issue health solely because reference/** is not cloned.Allowed issue frontmatter shape:
---
id: 026
title: "Migrate backend module to backend-wasm crate"
type: refactor
area: backend
class: implementation-ready
priority: P1
depends_on: [024, 025]
---
Unsupported unless explicitly implemented:
depends_on:
- 024
- 025
Repo-root mistakes are high-risk.
Required rules:
scripts/check/, scripts/gate/, scripts/gen/, scripts/run/, scripts/report/, scripts/perf/, scripts/dev/ must not assume they are one level below repo root.scripts/<tier>/foo.sh, use:repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
cd "$repo_root"
scripts/foo.sh, use:repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$repo_root"
Path(__file__).resolve().parents[N] and verify the expected root contains README.md or .git.scripts/lib/ files are helpers. They are imported or sourced, not executed directly.Use this skill only for scripts/ changes.
This skill owns shell script behavior, reliability, CLI contract, and machine-readable output stability. It does not own fixture content, fixture naming, fixture migration, or fixture path taxonomy.
In scope:
mise.toml maintenanceOut of scope:
Use fixtures-workflow together with this skill when a script change requires fixture path migration or fixture reference synchronization.
set -e or stricter existing options intact.#!/usr/bin/env bash plus set -euo pipefail for scripts that use bash arrays, mapfile, [[ ]], associative arrays, or process substitution.repo_root from the script location, then cd "$repo_root" before project-relative access.command -v before first use when missing tools would produce confusing failures.Scripts may consume fixtures. Scripts must not become the source of truth for fixture taxonomy.
Allowed:
fixtures/** for smoke or differential runsRestricted:
m1, m2, stream-gWhen fixture paths are touched or fixture references are changed, run the fixture reference update pass from fixtures-workflow in the same change:
Recommended searches before finalizing a script that references fixtures:
fixtures/fixtures/<changed-dir>"<changed-dir>/"TestRecordsuitecaseLC_ALL=C sort.--limit, --sample, and --jobs.fixtures/**reference/**artifacts/**Machine-readable output is a compatibility contract.
For JSONL TestRecord output:
suite, case, target, statusreason and tracking for unsupported, blocked, and skip-with-reasonunsupported, blocked, and fail into one bucketFor markdown coverage tables:
<!-- coverage-table:start -->For human reports:
mktemp -d for temporary work directories.artifacts/ or a user-provided output path, not under fixtures/./tmp layout except through mktemp or ${TMPDIR:-/tmp}.Regression gates must fail on real regressions and avoid hiding coverage debt.
Required behavior for gates:
unsupported, blocked, or skip-with-reason as passBefore editing, classify the script change:
Use the strictest relevant validation group below.
Always run the smallest valid set, but never stop at syntax-only checks.
For any script change:
mise run check scripts
bash -n <touched-shell-script> # only when a shell script changed
mise run check
For manager, issue, or generated-index scripts:
mise run update-issue-index -- --check
mise run check issues
mise run check
For CI workflow changes:
mise run check
mise run gate-fast
For coverage/reference/test262 scripts:
mise run update-coverage-matrix -- --check
mise run check coverage -- <base-doc> <current-doc>
mise run test262 -- --sample 1 --jobs 1
For scripts that produce JSONL/TestRecord:
mise run check records -- <file.jsonl>
For scripts that consume fixtures:
mise run check fixtures
mise run gate-fast
For Rust-impacting script changes:
mise run fmt
cargo nextest run
#!/bin/bash is used when repo convention expects #!/usr/bin/env bashlocal is used outside a functiongrep -P is introduced without portability considerationfind output is not sortedmise.toml task exists but the underlying dispatcher mapping is missingmise but only direct implementation entrypoints were tested.sh script is migrated to .py but workflow path filters still watch the old .shreference/** is treated as required repo-owned contentrepo_root is computed as scripts/ instead of repository rootsource scripts/lib/common.sh is relative to the wrong tier directoryreplace_generated_block() drops final newline and causes endless stale-index diffsnonenonenone