{"owner":"subframe7536","repo":"maple-font","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md"],"skills":{"AGENTS.md":"# AGENTS.md\n\n## Purpose\n\nMaple Mono is an open-source monospace font project. Keep changes small, deterministic, and scoped to the requested build, feature, CJK, or landing-page behavior.\n\n## Working Rules\n\n- Write code, comments, documentation, and commit messages in English. Reply to the repository owner in Chinese unless asked otherwise.\n- Preserve unrelated user changes. Run `git status --short` before broad edits and inspect the final diff before finishing.\n- Do not add dependencies or change package managers without a clear need. Use `uv` for Python and Bun for `maple-font-page/`.\n- Do not manually edit font binaries, UFO sources, or generated outputs when the repository provides a generator.\n- Avoid changing font names, versioning, release packaging, or output layout unless the request explicitly requires it.\n- When adding or changing a `build.py` CLI flag, update the complete translated `build.py --help` section in every root README (`README.md`, `README_CN.md`, `README_TC.md`, `README_JP.md`, and `README_KR.md`) in the same change.\n\n## Repository Map\n\n- `build.py`: Public font-build CLI.\n- `task.py`: Public task-runner CLI.\n- `scripts/`: Python implementation package. Use `scripts.*` imports for cross-module imports.\n  - `scripts/config/`: Build configuration, CLI parsing, and output paths.\n  - `scripts/pipeline/`: Public build entrypoint, `BuildPlan`, stage orchestration,\n    and output/cache lifecycle.\n  - `scripts/config/resolver.py`: Build configuration and runtime resolution.\n  - `scripts/cjk/cache.py`: CJK variable cache identity and manifest validation.\n  - `scripts/utils/`: Filesystem, process, archive, download, errors, and version helpers.\n  - `scripts/font_ops/`: Shared font and glyph operations, transforms, and protocols.\n  - `scripts/cjk/`: CJK models, configuration, outline conversion,\n    variable-font operations, presets, and builder.\n  - `scripts/feature/`: Typed feature catalog, compiler, freeze logic, and feature application.\n  - `scripts/task/`: Task-runner commands.\n  - `scripts/tests/`: Python unit tests.\n- `scripts/pipeline/README.md`: Orchestrator data flow, stage dependencies, cache transitions, and executor lifecycle.\n- `scripts/README.md`: Global build-system architecture and ownership map.\n- `scripts/maintenance.md`: Maintainer workflow for source updates, CJK bases, validation, and releases.\n- `scripts/cjk/README.md`: CJK source, configuration, generation, and cache guide.\n- `scripts/feature/README.md`: OpenType feature AST and generation guide.\n- `source/`: Font sources, CJK assets, schema, and generated `.fea` output in `source/features/`.\n- `config.json`: Default build configuration, validated by `source/schema.json`.\n- `fonts/`: Generated build artifacts; never edit manually.\n- `maple-font-page/`: Astro 5, Solid 1.x, TypeScript, and UnoCSS landing-page submodule.\n\n## Setup and Commands\n\nUse the smallest command that validates the change.\n\n```sh\nuv sync\nuv run ruff format --check .\nuv run ruff check .\nuv run pyrefly check\nuv run python -m unittest discover -s scripts/tests\n```\n\nUseful build commands:\n\n```sh\nuv run build.py --dry\nuv run build.py --ttf-only --debug\nuv run build.py --ttf-only --cn --debug\nuv run task.py fea\nuv run task.py page\n```\n\nFor landing-page work:\n\n```sh\ncd maple-font-page\nbun install\nbun run format\nbun run build\n```\n\n`maple-font-page/` and the downloaded `FontPatcher/` tool are intentionally excluded from root Python Ruff and Pyrefly checks. Validate landing-page code with its Bun commands instead; never lint, format, or type-check FontPatcher as project code.\n\n## Validation by Change Type\n\n- **Python changes:** Run Ruff format check, Ruff lint, Pyrefly, and the unit suite. Apply formatting with `uv run ruff format <paths>` when needed; do not hand-format generated files.\n- **FontTools type-adaptation changes:** Run `uv run pyrefly check`; keep table-field types in `scripts/font_ops/fonttools.py` precise enough to expose invalid field names and values.\n- **Feature changes under `scripts/feature/`:** Run `uv run task.py fea`, then inspect all generated changes before keeping them.\n- **Build configuration or pipeline changes:** Start with `uv run build.py --dry`. Use `--debug`, `--ttf-only`, and `--least-styles` before attempting a full build.\n- **CJK changes:** Avoid full CJK builds unless required; they may download large source archives and take a long time.\n- **Landing-page changes:** Run Bun formatting and build from `maple-font-page/`. Do not rely on root Python checks for this submodule.\n\n## Safe Auto-fix Workflow\n\nAfter a validation command reports fixable Python issues, use this order:\n\n```sh\nuv run ruff check . --fix\nuv run ruff format .\nuv run ruff format --check .\nuv run ruff check .\nuv run pyrefly check\n```\n\nRuff auto-fixes are limited to its default safe fixes. Pyrefly reports type diagnostics; do not apply automated type fixes or add diagnostic suppressions without reviewing the resulting diff and running the relevant unit tests or build validation.\n\n## Generated Outputs\n\n`uv run task.py fea` can update `source/features/`, `source/schema.json`, `config.json`, the localized READMEs, and `scripts/in_browser.py`. Keep these outputs synchronized when the feature source changes.\n\n`uv run task.py page` writes generated data in `maple-font-page/`, including feature metadata, configuration, and the minified browser script. Run it only when those generated page artifacts are intended to change.\n\nTreat `fonts/` as disposable build output. Do not commit generated churn unless it is necessary for the requested source change.\n\n## Code Conventions\n\n- Keep APIs focused and names explicit. Reuse nearby helpers such as `scripts/utils.py` instead of adding one-off wrappers.\n- Keep import paths rooted at `scripts.*`; do not reintroduce the previous package namespace or filesystem paths.\n- Keep output ordering stable to minimize generated diffs.\n- Use structured parsing for JSON and font data. Add comments only for non-obvious font or build behavior.\n- Pyrefly checks FontTools table fields through `scripts/font_ops/fonttools.py`. Add only verified fields and use narrow `Protocol` casts at the table boundary instead of suppressing diagnostics or casting to `Any`.\n\n## Dependencies, Network, and Release Safety\n\n- Python runtime dependencies belong in `pyproject.toml` and `requirements.txt`; Python development tools belong in the uv development dependency group.\n- CN source downloads, Nerd Font assets, FontForge tooling, page package installation, and release actions may require network access. Do not trigger them unless the task needs them.\n- Never run release, publish, push, or destructive cleanup commands unless explicitly requested.\n\n## Before Finishing\n\n- Verify the changed files with `git diff --check`, `git diff --stat`, or `git status --short`.\n- Run the smallest relevant validation commands and report anything skipped.\n- Call out generated files and submodule changes explicitly.\n"},"files":{"AGENTS.md":"# AGENTS.md\n\n## Purpose\n\nMaple Mono is an open-source monospace font project. Keep changes small, deterministic, and scoped to the requested build, feature, CJK, or landing-page behavior.\n\n## Working Rules\n\n- Write code, comments, documentation, and commit messages in English. Reply to the repository owner in Chinese unless asked otherwise.\n- Preserve unrelated user changes. Run `git status --short` before broad edits and inspect the final diff before finishing.\n- Do not add dependencies or change package managers without a clear need. Use `uv` for Python and Bun for `maple-font-page/`.\n- Do not manually edit font binaries, UFO sources, or generated outputs when the repository provides a generator.\n- Avoid changing font names, versioning, release packaging, or output layout unless the request explicitly requires it.\n- When adding or changing a `build.py` CLI flag, update the complete translated `build.py --help` section in every root README (`README.md`, `README_CN.md`, `README_TC.md`, `README_JP.md`, and `README_KR.md`) in the same change.\n\n## Repository Map\n\n- `build.py`: Public font-build CLI.\n- `task.py`: Public task-runner CLI.\n- `scripts/`: Python implementation package. Use `scripts.*` imports for cross-module imports.\n  - `scripts/config/`: Build configuration, CLI parsing, and output paths.\n  - `scripts/pipeline/`: Public build entrypoint, `BuildPlan`, stage orchestration,\n    and output/cache lifecycle.\n  - `scripts/config/resolver.py`: Build configuration and runtime resolution.\n  - `scripts/cjk/cache.py`: CJK variable cache identity and manifest validation.\n  - `scripts/utils/`: Filesystem, process, archive, download, errors, and version helpers.\n  - `scripts/font_ops/`: Shared font and glyph operations, transforms, and protocols.\n  - `scripts/cjk/`: CJK models, configuration, outline conversion,\n    variable-font operations, presets, and builder.\n  - `scripts/feature/`: Typed feature catalog, compiler, freeze logic, and feature application.\n  - `scripts/task/`: Task-runner commands.\n  - `scripts/tests/`: Python unit tests.\n- `scripts/pipeline/README.md`: Orchestrator data flow, stage dependencies, cache transitions, and executor lifecycle.\n- `scripts/README.md`: Global build-system architecture and ownership map.\n- `scripts/maintenance.md`: Maintainer workflow for source updates, CJK bases, validation, and releases.\n- `scripts/cjk/README.md`: CJK source, configuration, generation, and cache guide.\n- `scripts/feature/README.md`: OpenType feature AST and generation guide.\n- `source/`: Font sources, CJK assets, schema, and generated `.fea` output in `source/features/`.\n- `config.json`: Default build configuration, validated by `source/schema.json`.\n- `fonts/`: Generated build artifacts; never edit manually.\n- `maple-font-page/`: Astro 5, Solid 1.x, TypeScript, and UnoCSS landing-page submodule.\n\n## Setup and Commands\n\nUse the smallest command that validates the change.\n\n```sh\nuv sync\nuv run ruff format --check .\nuv run ruff check .\nuv run pyrefly check\nuv run python -m unittest discover -s scripts/tests\n```\n\nUseful build commands:\n\n```sh\nuv run build.py --dry\nuv run build.py --ttf-only --debug\nuv run build.py --ttf-only --cn --debug\nuv run task.py fea\nuv run task.py page\n```\n\nFor landing-page work:\n\n```sh\ncd maple-font-page\nbun install\nbun run format\nbun run build\n```\n\n`maple-font-page/` and the downloaded `FontPatcher/` tool are intentionally excluded from root Python Ruff and Pyrefly checks. Validate landing-page code with its Bun commands instead; never lint, format, or type-check FontPatcher as project code.\n\n## Validation by Change Type\n\n- **Python changes:** Run Ruff format check, Ruff lint, Pyrefly, and the unit suite. Apply formatting with `uv run ruff format <paths>` when needed; do not hand-format generated files.\n- **FontTools type-adaptation changes:** Run `uv run pyrefly check`; keep table-field types in `scripts/font_ops/fonttools.py` precise enough to expose invalid field names and values.\n- **Feature changes under `scripts/feature/`:** Run `uv run task.py fea`, then inspect all generated changes before keeping them.\n- **Build configuration or pipeline changes:** Start with `uv run build.py --dry`. Use `--debug`, `--ttf-only`, and `--least-styles` before attempting a full build.\n- **CJK changes:** Avoid full CJK builds unless required; they may download large source archives and take a long time.\n- **Landing-page changes:** Run Bun formatting and build from `maple-font-page/`. Do not rely on root Python checks for this submodule.\n\n## Safe Auto-fix Workflow\n\nAfter a validation command reports fixable Python issues, use this order:\n\n```sh\nuv run ruff check . --fix\nuv run ruff format .\nuv run ruff format --check .\nuv run ruff check .\nuv run pyrefly check\n```\n\nRuff auto-fixes are limited to its default safe fixes. Pyrefly reports type diagnostics; do not apply automated type fixes or add diagnostic suppressions without reviewing the resulting diff and running the relevant unit tests or build validation.\n\n## Generated Outputs\n\n`uv run task.py fea` can update `source/features/`, `source/schema.json`, `config.json`, the localized READMEs, and `scripts/in_browser.py`. Keep these outputs synchronized when the feature source changes.\n\n`uv run task.py page` writes generated data in `maple-font-page/`, including feature metadata, configuration, and the minified browser script. Run it only when those generated page artifacts are intended to change.\n\nTreat `fonts/` as disposable build output. Do not commit generated churn unless it is necessary for the requested source change.\n\n## Code Conventions\n\n- Keep APIs focused and names explicit. Reuse nearby helpers such as `scripts/utils.py` instead of adding one-off wrappers.\n- Keep import paths rooted at `scripts.*`; do not reintroduce the previous package namespace or filesystem paths.\n- Keep output ordering stable to minimize generated diffs.\n- Use structured parsing for JSON and font data. Add comments only for non-obvious font or build behavior.\n- Pyrefly checks FontTools table fields through `scripts/font_ops/fonttools.py`. Add only verified fields and use narrow `Protocol` casts at the table boundary instead of suppressing diagnostics or casting to `Any`.\n\n## Dependencies, Network, and Release Safety\n\n- Python runtime dependencies belong in `pyproject.toml` and `requirements.txt`; Python development tools belong in the uv development dependency group.\n- CN source downloads, Nerd Font assets, FontForge tooling, page package installation, and release actions may require network access. Do not trigger them unless the task needs them.\n- Never run release, publish, push, or destructive cleanup commands unless explicitly requested.\n\n## Before Finishing\n\n- Verify the changed files with `git diff --check`, `git diff --stat`, or `git status --short`.\n- Run the smallest relevant validation commands and report anything skipped.\n- Call out generated files and submodule changes explicitly.\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","title":"AGENTS.md","content":"# AGENTS.md\n\n## Purpose\n\nMaple Mono is an open-source monospace font project. Keep changes small, deterministic, and scoped to the requested build, feature, CJK, or landing-page behavior.\n\n## Working Rules\n\n- Write code, comments, documentation, and commit messages in English. Reply to the repository owner in Chinese unless asked otherwise.\n- Preserve unrelated user changes. Run `git status --short` before broad edits and inspect the final diff before finishing.\n- Do not add dependencies or change package managers without a clear need. Use `uv` for Python and Bun for `maple-font-page/`.\n- Do not manually edit font binaries, UFO sources, or generated outputs when the repository provides a generator.\n- Avoid changing font names, versioning, release packaging, or output layout unless the request explicitly requires it.\n- When adding or changing a `build.py` CLI flag, update the complete translated `build.py --help` section in every root README (`README.md`, `README_CN.md`, `README_TC.md`, `README_JP.md`, and `README_KR.md`) in the same change.\n\n## Repository Map\n\n- `build.py`: Public font-build CLI.\n- `task.py`: Public task-runner CLI.\n- `scripts/`: Python implementation package. Use `scripts.*` imports for cross-module imports.\n  - `scripts/config/`: Build configuration, CLI parsing, and output paths.\n  - `scripts/pipeline/`: Public build entrypoint, `BuildPlan`, stage orchestration,\n    and output/cache lifecycle.\n  - `scripts/config/resolver.py`: Build configuration and runtime resolution.\n  - `scripts/cjk/cache.py`: CJK variable cache identity and manifest validation.\n  - `scripts/utils/`: Filesystem, process, archive, download, errors, and version helpers.\n  - `scripts/font_ops/`: Shared font and glyph operations, transforms, and protocols.\n  - `scripts/cjk/`: CJK models, configuration, outline conversion,\n    variable-font operations, presets, and builder.\n  - `scripts/feature/`: Typed feature catalog, compiler, freeze logic, and feature application.\n  - `scripts/task/`: Task-runner commands.\n  - `scripts/tests/`: Python unit tests.\n- `scripts/pipeline/README.md`: Orchestrator data flow, stage dependencies, cache transitions, and executor lifecycle.\n- `scripts/README.md`: Global build-system architecture and ownership map.\n- `scripts/maintenance.md`: Maintainer workflow for source updates, CJK bases, validation, and releases.\n- `scripts/cjk/README.md`: CJK source, configuration, generation, and cache guide.\n- `scripts/feature/README.md`: OpenType feature AST and generation guide.\n- `source/`: Font sources, CJK assets, schema, and generated `.fea` output in `source/features/`.\n- `config.json`: Default build configuration, validated by `source/schema.json`.\n- `fonts/`: Generated build artifacts; never edit manually.\n- `maple-font-page/`: Astro 5, Solid 1.x, TypeScript, and UnoCSS landing-page submodule.\n\n## Setup and Commands\n\nUse the smallest command that validates the change.\n\n```sh\nuv sync\nuv run ruff format --check .\nuv run ruff check .\nuv run pyrefly check\nuv run python -m unittest discover -s scripts/tests\n```\n\nUseful build commands:\n\n```sh\nuv run build.py --dry\nuv run build.py --ttf-only --debug\nuv run build.py --ttf-only --cn --debug\nuv run task.py fea\nuv run task.py page\n```\n\nFor landing-page work:\n\n```sh\ncd maple-font-page\nbun install\nbun run format\nbun run build\n```\n\n`maple-font-page/` and the downloaded `FontPatcher/` tool are intentionally excluded from root Python Ruff and Pyrefly checks. Validate landing-page code with its Bun commands instead; never lint, format, or type-check FontPatcher as project code.\n\n## Validation by Change Type\n\n- **Python changes:** Run Ruff format check, Ruff lint, Pyrefly, and the unit suite. Apply formatting with `uv run ruff format <paths>` when needed; do not hand-format generated files.\n- **FontTools type-adaptation changes:** Run `uv run pyrefly check`; keep table-field types in `scripts/font_ops/fonttools.py` precise enough to expose invalid field names and values.\n- **Feature changes under `scripts/feature/`:** Run `uv run task.py fea`, then inspect all generated changes before keeping them.\n- **Build configuration or pipeline changes:** Start with `uv run build.py --dry`. Use `--debug`, `--ttf-only`, and `--least-styles` before attempting a full build.\n- **CJK changes:** Avoid full CJK builds unless required; they may download large source archives and take a long time.\n- **Landing-page changes:** Run Bun formatting and build from `maple-font-page/`. Do not rely on root Python checks for this submodule.\n\n## Safe Auto-fix Workflow\n\nAfter a validation command reports fixable Python issues, use this order:\n\n```sh\nuv run ruff check . --fix\nuv run ruff format .\nuv run ruff format --check .\nuv run ruff check .\nuv run pyrefly check\n```\n\nRuff auto-fixes are limited to its default safe fixes. Pyrefly reports type diagnostics; do not apply automated type fixes or add diagnostic suppressions without reviewing the resulting diff and running the relevant unit tests or build validation.\n\n## Generated Outputs\n\n`uv run task.py fea` can update `source/features/`, `source/schema.json`, `config.json`, the localized READMEs, and `scripts/in_browser.py`. Keep these outputs synchronized when the feature source changes.\n\n`uv run task.py page` writes generated data in `maple-font-page/`, including feature metadata, configuration, and the minified browser script. Run it only when those generated page artifacts are intended to change.\n\nTreat `fonts/` as disposable build output. Do not commit generated churn unless it is necessary for the requested source change.\n\n## Code Conventions\n\n- Keep APIs focused and names explicit. Reuse nearby helpers such as `scripts/utils.py` instead of adding one-off wrappers.\n- Keep import paths rooted at `scripts.*`; do not reintroduce the previous package namespace or filesystem paths.\n- Keep output ordering stable to minimize generated diffs.\n- Use structured parsing for JSON and font data. Add comments only for non-obvious font or build behavior.\n- Pyrefly checks FontTools table fields through `scripts/font_ops/fonttools.py`. Add only verified fields and use narrow `Protocol` casts at the table boundary instead of suppressing diagnostics or casting to `Any`.\n\n## Dependencies, Network, and Release Safety\n\n- Python runtime dependencies belong in `pyproject.toml` and `requirements.txt`; Python development tools belong in the uv development dependency group.\n- CN source downloads, Nerd Font assets, FontForge tooling, page package installation, and release actions may require network access. Do not trigger them unless the task needs them.\n- Never run release, publish, push, or destructive cleanup commands unless explicitly requested.\n\n## Before Finishing\n\n- Verify the changed files with `git diff --check`, `git diff --stat`, or `git status --short`.\n- Run the smallest relevant validation commands and report anything skipped.\n- Call out generated files and submodule changes explicitly.\n","category":"root","tokens":1743}]}