Agent skill

Migration Skill Authoring

by wanteddev in wanteddev/montage-web

This skill should be used when the user asks to create a new Montage migration skill for the montage-web-migration plugin (e.g.

MITAuto-check passedAgent Workflows

Install Migration Skill Authoring

skills CLI
$ npx skills add wanteddev/montage-web --skill migration-skill-authoring -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install wanteddev/montage-web migration-skill-authoring --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/wanteddev/montage-web.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/migration-skill-authoring .claude/skills/migration-skill-authoring && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
migration-skill-authoring
GitHub stars
117
Token cost
~3.7k tokens
SKILL.md length
1,815 words
Files
4 (incl. scripts, references)
Skills in repo
4
Repo updated
First seen
Licence
MIT

At a glance

This skill should be used when the user asks to create a new Montage migration skill for the montage-web-migration plugin (e.g.

  • Works in 5 steps: Analyze the codemods → Derive the design from the analysis → Author the deliverable → …
  • Asks to create a new Montage migration skill for the montage-web-migration plugin (e.g
  • SKILL.md covers Core principles, Mode A — Create a new version…, Mode B — Update an existing… and Additional resources
  • Runs JavaScript scripts from its folder; calls git, node and claude

What it does

Migration Skill Authoring is an agent skill from wanteddev/montage-web. This skill should be used when the user asks to create a new Montage migration skill for the montage-web-migration plugin (e.g. a future v4-to-v5), add or update content in an existing one (e.g. montage-v3-to-v4) after new breaking changes or codemods land, validate a migration skill, or says "마이그레이션 스킬 만들어줘", "마이그레이션 스킬 업데이트해줘", "v3-to-v4 스킬에 내용 추가해줘", "마이그레이션 스킬 검증해줘", "create/update/validate the migration skill". The pipeline (codemod analysis, ordering/idempotency derivation, authoring conventions…

Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including scripts and reference files (for example `references/authoring-conventions.md`, `scripts/analyze-codemods.js` and `scripts/validate-migration-skill.js`).

It sits in Agent Workflows, covering Code migrations and Skill authoring. The repository describes itself as: 🎨 Wanted Web Design System - Montage. The licence is MIT.

When your agent uses it

  • Asks to create a new Montage migration skill for the montage-web-migration plugin (e.g
  • Tasks that involve Code migrations
  • Tasks that involve Skill authoring

Example prompts

  • “v3-to-v4 스킬에 내용 추가해줘”
  • “create/update/validate the migration skill”
  • “/migration-skill-authoring”

Requirements

  • Node.js

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Analyze the codemods
  2. Derive the design from the analysis
  3. Author the deliverable
  4. Validate until clean
  5. Ship

What it can do on your machine

Read from SKILL.md and the folder at commit 58f924f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 2 files in scripts/ (JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • git
    • node
    • claude

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Migration Skill Authoring loads about 3.7k tokens when it runs, and up to ~6.5k if it reads all its reference files. Until then it costs about 146 tokens; SKILL.md has 1,815 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~146
When it runs · the whole SKILL.md, loaded when a task matches
~3.7k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~6.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from wanteddev/montage-web at commit 58f924f, republished under its MIT licence (© wanteddev). 1,815 words, ~3,712 tokens.

Download SKILL.mdSave it as .claude/skills/migration-skill-authoring/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
migration-skill-authoring
description
This skill should be used when the user asks to create a new Montage migration skill for the montage-web-migration plugin (e.g. a future v4-to-v5), add or update content in an existing one (e.g. montage-v3-to-v4) after new breaking changes or codemods land, validate a migration skill, or says "마이그레이션 스킬 만들어줘", "마이그레이션 스킬 업데이트해줘", "v3-to-v4 스킬에 내용 추가해줘", "마이그레이션 스킬 검증해줘", "create/update/validate the migration skill". The pipeline (codemod analysis, ordering/idempotency derivation, authoring conventions, adversarial validation) is Workflow-orchestrated.

migration-skill-authoring

Author or update consumer-facing migration skills in .claude-plugin/montage-migration/skills/. The pipeline: analyze the codemods with a Workflow (never trust MIGRATION.md prose alone) → derive ordering and run-once constraints from source facts → author the four-file deliverable per convention → validate with a Workflow, fix, and re-run until clean.

skills/montage-v3-to-v4/ is the reference implementation; all conventions live in references/authoring-conventions.md.

Core principles

  1. Idempotency and ordering come from transform SOURCE, not docs. The one migration fact that matters most — "does re-running corrupt code?" — is a rename-chain property of the transform (a rename VALUE appearing as another rename KEY). It must be traced in code, with file:line evidence.
  2. Codemods run strictly in sequence, each exactly once per tree. Every skill encodes this with a state file, per-step verification, and defense-in-depth warnings for any non-idempotent transform.
  3. Every factual claim ships validated. Grep patterns are empirically executed (macOS BSD grep included), rename tables are diffed against the transform maps, and consistency surfaces are cross-checked — by adversarial agents, before the skill ships.

Mode A — Create a new version skill

Prerequisites
  • The MIGRATION.md section for the target version is written.
  • The codemods exist in packages/codemod/src/transforms/<vN>/ and are registered in MIGRATION_TRANSFORMS in packages/codemod/src/constants.ts.

If either is missing, stop and surface it — the skill is authored FROM these, never ahead of them.

Step 1 — Analyze the codemods

Enumerate the version's transforms from constants.ts, then run the analysis Workflow:

js
Workflow({
  scriptPath: "<this skill's base directory>/scripts/analyze-codemods.js",
  args: {
    repoRoot: "<absolute repo root>",
    migrationSection: "## <N>.0.0",
    transforms: [
      { key: "<transform-name>",
        files: "<absolute transform path(s), plus any *-map.ts files it imports>",
        extra: "<transform-specific questions>" },
      ...
    ]
  }
})

Resolve <this skill's base directory> from the "Base directory for this skill" line announced when this skill loaded. If the result's missing array is non-empty (or docs is null when the docs agent was not skipped), re-run the analysis for those transforms before Step 2 — never derive ordering or idempotency from partial analysis.

Write a pointed extra per transform: rename-chain suspects (any A→B where B is also renamed), map-file interactions with other transforms' outputs, whether it touches attribute names vs values, string literals vs identifiers.

Step 2 — Derive the design from the analysis
  • Canonical order: MIGRATION.md section order, adjusted only by hard constraints the analysis surfaced. Record every constraint WITH its reason.
  • Run-once machinery: flag every non-idempotent transform (and every hand-migration-collision hazard) for defense-in-depth treatment — see the consistency surfaces table in references/authoring-conventions.md.
  • Manual steps (M-sections): everything the codemods cannot reach, each with scan patterns and an unambiguous owner (exactly one phase fixes it; safety-net scans say so).
Step 3 — Author the deliverable

Follow references/authoring-conventions.md exactly: the four files (SKILL.md, references/codemod-steps.md, references/manual-migrations.md, scripts/migration-workflow.js), the state-file spec, the workflow script conventions, the writing conventions, and the grep pattern rules. Copy the montage-v3-to-v4 structure and adapt content — do not invent a new shape.

Step 4 — Validate until clean
js
Workflow({
  scriptPath:
    "<this skill's base directory>/scripts/validate-migration-skill.js",
  args: {
    repoRoot: '<absolute repo root>',
    skillDir: '<absolute path of the authored skill>',
    migrationSection: '## <N>.0.0',
    transformsDir: '<absolute path of packages/codemod/src/transforms/vN>',
    scope: 'full', // Mode A authors a whole skill, so everything is in scope. Mode B passes
    //                'delta' (the default) — see "Scoping the review" below.
    // optional — defaults derived from skillDir:
    // pluginRoot: '<absolute plugin root>',
    // knownIssuesFile: '<absolute path>/known-issues.md',
  },
});

repoRoot must be the checkout you are editing. When the work happens in a git worktree, that is the worktree path — the parent checkout holds an older copy of the same files at the same relative path, and a reviewer that reads it produces confident, entirely false findings (one run yielded three false criticals that way). The script pins the reviewers to absolute paths and makes each finding carry the wc -l of every file it cites; the verify phase re-runs wc -l and refutes on mismatch. That guard only works if the paths you pass are the ones you edited.

The run returns verified findings, not raw reviewer output: four reviewers fan out, then per-file verifiers dedup across reviewers, re-rate severity, and REFUTE anything they cannot reproduce. Read the result accordingly:

  • findings — CONFIRMED only, already deduped and re-rated. This is the worklist.
  • refuted — dropped claims with the reason (stale-file-read, accepted-trade-off, or the observation that killed it). Skim it: a wrongly refuted finding is possible, and the reasons tell you whether a reviewer was reading the wrong tree.
  • rawCount vs findings.length — the gap is how much noise the verify phase absorbed. A large gap with many stale-file-read reasons means repoRoot was wrong.
  • unassessedGroups — nonzero means a verifier died and its findings were never judged; re-run before trusting a clean result.
  • preExisting — CONFIRMED critical findings the change neither introduced nor invalidated (empty under scope: 'full', where everything is in findings). They do NOT block convergence, but they are corruption paths: fix them or add a known-issues.md entry deliberately, and tell the user which you chose.
  • clean — no CONFIRMED in-scope critical/major, all four reviewers returned, nothing unassessed. preExisting is excluded by design; a pre-existing corruption path would otherwise make every future change review unconvergeable.
  • scope / diffBase / changedFiles — the scope the run ACTUALLY used, which can differ from what was requested: an empty diff falls back to scope: 'full' (with diffBase and changedFiles returning null). Check these before reading a delta run as clean — a 'full' here when you passed 'delta' means the diff base was wrong, not that the change reviewed clean.
Scoping the review

scope: 'delta' (the default) validates the change, not the whole package. A Scope phase runs git diff --unified=0 <diffBase> (default HEAD; pass the base branch when the change is already committed) and hands the reviewers the changed line ranges. They still READ every file — consistency checking is impossible otherwise — but may only report a finding that is anchored in a changed region, is unchanged text the change made wrong (blast-radius: a now-stale cross-reference, count, or duplicated statement — the highest-value category in update mode), or is critical. The verify phase re-checks the scope itself and refutes out-of-scope non-criticals with reason out-of-scope. The structure reviewer is exempt: its checks are mechanical and actionable wherever they fail.

Use scope: 'full' for Mode A, and for a deliberate periodic audit of an existing skill. Do NOT use it for a routine Mode B update: a full audit re-surfaces the entire pre-existing backlog every round, which buries the change's own defects and prevents convergence (one M-section addition produced 21 confirmed findings across two rounds, none of them in the new section). When the diff comes back empty the run logs it and falls back to a full audit — check the diffBase you passed rather than trusting that result as a clean change review.

Record deliberate trade-offs (a version bump the user deferred, a length budget knowingly exceeded) in <skillDir>/known-issues.md, one short entry each. Reviewers and verifiers read it and stop re-reporting them, which is what keeps successive runs comparable.

Fix every critical/major finding, then RE-RUN the validation Workflow — a real fix can introduce a new real defect, so critical/major always warrants another pass.

Stop re-running once a round returns no critical/major and its minor findings are only heuristic refinement. The validation reviewers are adversarial and will almost always surface something; clean: true is the ideal, not a required terminal state. Each round is expensive (four large sub-agents), so converge deliberately:

  • Fix minor findings that are genuine defects (a wrong rename-table entry, a broken grep that silently finds nothing, a state-schema contradiction, a claim that contradicts the transform source) — these are cheap and worth another pass with the critical/major fixes.
  • Do NOT loop for minor findings that just make an already-hedged heuristic incrementally tighter — "this scan pattern also misses 'wds-' + kind", "widen this regex to also match props.theme", etc. The scan patterns are declared line-based heuristics ("a clean scan is 'nothing obvious', not proof of absence"); chasing every regex edge case with more regex contradicts that framing and never terminates. Apply the ones you judge worthwhile in a single final edit and do not re-validate solely to confirm them.
  • A minor you are deliberately not acting on (e.g. a version bump the user deferred) belongs in known-issues.md plus a one-line note in your report, not another round.

Practically: expect ONE re-run after the first substantive fix pass, occasionally two if that pass surfaced new critical/major. If a round yields only heuristic-refinement minors, you are done — stop and report. The structure reviewer already runs the mechanical checks (workflow-script syntax wrap + node --check, prettier); run them manually (procedure in the conventions doc) after your final edits instead of triggering a whole validation round just to confirm formatting.

Show full SKILL.md (500 more words)Show less
Step 5 — Ship

Update the plugin README.md/README.ko.md skill listing, bump .claude-plugin/montage-migration/.claude-plugin/plugin.json (minor) and .claude-plugin/marketplace.json. Suggest a trigger test: claude --plugin-dir .claude-plugin/montage-migration.

Mode B — Update an existing migration skill

For new breaking changes, a new codemod, or corrections landing in a version that already has a skill:

  1. Impact analysis first. Read the consistency surfaces table in references/authoring-conventions.md — a new step or M-section touches EVERY listed surface (SKILL.md, both references, the workflow script's CODEMOD_STEPS / MANUAL_SCAN_SECTIONS / STATE_FILE_TEMPLATE, both READMEs). Partial updates are how the files start contradicting each other.
  2. Analyze only what changed — run scripts/analyze-codemods.js with just the new or modified transforms (skipDocsAgent: true if the CLI is untouched). A changed transform's idempotency must be re-traced from source, not assumed stable. For a step inserted anywhere but last, the extra MUST also ask: "does this transform behave correctly on code already migrated by the steps that canonically follow it?" — consumers who completed later steps will run it on a post-migration tree.
  3. Respect state-schema stability. Consumers may be mid-migration with a live state file: never rename existing step keys or M-numbers (renamed transforms are the one exception — see the conventions doc); add new steps at the position the constraint analysis dictates with value pending. Then encode the semantics INTO the consumer deliverable, not just here: the consumer SKILL.md's Step 0 resume item and the workflow step-agent prompt must both state that a step key missing from an older state file is pending (so resuming consumers pick up the new step), and if the new step lands before steps consumers may have completed, the resume item must say the new step still runs and what to verify first. Add the new step's post-step verification grep to the consumer skill's "already migrated" preflight path and final verification, so consumers who FINISHED the migration get flagged when they invoke the skill again.
  4. Run the validation Workflow with scope: 'delta' (Step 4 above, and its "Scoping the review" subsection). Delta scope constrains what reviewers may REPORT, never what they READ — they still load the whole package, because the consistency reviewer exists precisely for update-mode drift (renumbering a step leaves stale cross-references that reading the diff alone would never reveal). That drift is the blast-radius category and it survives scoping by design; what scoping drops is the pre-existing backlog that has nothing to do with your change. Apply Step 4's convergence rule: re-run after each critical/major fix pass, but stop once a round returns only heuristic-refinement minors — do not loop toward clean: true. Reach for scope: 'full' only when you deliberately want a whole-package audit, and expect it not to converge on the change: budget it as separate work.
  5. Bump versions (plugin.json minor for new content, patch for corrections) and update READMEs if behavior changed.

Additional resources

  • references/authoring-conventions.md — the deliverable structure, consistency surfaces, sequencing/run-once design, workflow-script and writing conventions, verified CLI facts, grep pattern rules, mechanical validation.
  • scripts/analyze-codemods.js — analysis Workflow (per-transform facts + CLI/docs).
  • scripts/validate-migration-skill.js — validation Workflow (fact-check, consistency, quality, structure); re-run until clean: true.

© wanteddev, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (scripts, references) in .claude/skills/migration-skill-authoring of wanteddev/montage-web.

  • SKILL.md
  • references/authoring-conventions.md
  • scripts/analyze-codemods.js
  • scripts/validate-migration-skill.js

Open the folder on GitHubat commit 58f924f

Compare with similar skills

Migration Skill Authoring next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Migration Skill Authoring compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Migration Skill Authoring this skillwanteddev/montage-web117—~3.7kAutomated safety check: PassMIT
Claude Code Plugin Structureanthropics/claude-plugins-official38k10 repos~3.4kAutomated safety check: PassApache-2.0
SkillAnything Skill GeneratorAgentSkillOS/SkillAnything471—~1.9kAutomated safety check: PassMIT
LubanLearnPrompt/luban-skill958—~3.1kAutomated safety check: PassMIT
Crush Builtin Skillscharmbracelet/crush29k—~466Automated safety check: PassCustom licence
Build Cs Skillcodestable/CodeStable1.1k—~3kAutomated safety check: PassNone

Similar skills

  • Claude Code Plugin Structure

    anthropics/claude-plugins-official

    Official

    Explains the directory layout, plugin.json manifest and component organization of a Claude Code plugin, including auto-discovery and portable paths.

    38k GitHub starsUsed in 10 repos~3.4k tokens
    Agent WorkflowsAuto-check passed
  • SkillAnything Skill Generator

    AgentSkillOS/SkillAnything

    Generates a complete agent skill for a target tool, API, library or workflow through a seven-phase pipeline that ends with testing, tuning and packaging for several platforms.

    471 GitHub stars~1.9k tokensUpdated 6 mo ago
    Agent WorkflowsAuto-check passed
  • Luban

    LearnPrompt/luban-skill

    鲁班(Luban)——Skill打磨工坊。把一个"能用的Skill"打磨成"能被理解、能被安装、能被传播、能被验证、能持续进化"的公共Skill资产。

    958 GitHub stars~3.1k tokensUpdated 2 mo ago
    Agent WorkflowsAuto-check passed
  • Crush Builtin Skills

    charmbracelet/crush

    Explains how the Crush coding agent embeds builtin skills in its binary and how to add or edit one, including the discovery test and build commands.

    29k GitHub stars~466 tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Build Cs Skill

    codestable/CodeStable

    CodeStable skill authoring and evolution protocol. An agent skill from codestable/CodeStable.

    1.1k GitHub stars~3k tokensUpdated 1 mo ago
    Agent WorkflowsAuto-check passed
  • ShellLM Skill Author

    laude-institute/headlong

    Scaffolds new ShellLM skills with the right frontmatter, directory layout and agent-facing writing style, so an agent can extend its own capabilities.

    1.2k GitHub stars~1.3k tokensUpdated yesterday
    Agent WorkflowsAuto-check passed

More from wanteddev/montage-web

  • Montage React

    wanteddev/montage-web

    Guide for building UI with Montage (Wanted Design System) in React/Next.js projects.

    117 GitHub stars~3.4k tokensUpdated today
    Auto-check passed
  • Sync Icons

    wanteddev/montage-web

    Sync icons from the Figma file into icon and open a PR by dispatching the figma-icon-sync-code-connect.yml GitHub Actions workflow.

    117 GitHub stars~1.9k tokensUpdated today
    Auto-check passed
  • Create PR

    wanteddev/montage-web

    Create a GitHub pull request from the current branch. An agent skill from wanteddev/montage-web.

    117 GitHub stars~6.8k tokensUpdated today
    Auto-check: notes

Questions about Migration Skill Authoring

What does Migration Skill Authoring do?

This skill should be used when the user asks to create a new Montage migration skill for the montage-web-migration plugin (e.g. Migration Skill Authoring is an agent skill from wanteddev/montage-web.g.

When should I use Migration Skill Authoring?

Migration Skill Authoring fits situations like: asks to create a new Montage migration skill for the montage-web-migration plugin (e.g; tasks that involve Code migrations; tasks that involve Skill authoring.

How do I install Migration Skill Authoring in Claude Code?

Run `npx skills add wanteddev/montage-web --skill migration-skill-authoring -a claude-code`. Or copy the skill folder (.claude/skills/migration-skill-authoring in wanteddev/montage-web) into .claude/skills/migration-skill-authoring in your project. Claude Code loads it when a task matches its description.

How do I install Migration Skill Authoring in Codex?

Run `npx skills add wanteddev/montage-web --skill migration-skill-authoring -a codex`. Or copy the skill folder (.claude/skills/migration-skill-authoring in wanteddev/montage-web) into .agents/skills/migration-skill-authoring in your project. Codex loads it when a task matches its description.

Can I use Migration Skill Authoring in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add wanteddev/montage-web --skill migration-skill-authoring -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/migration-skill-authoring, .gemini/skills/migration-skill-authoring, .github/skills/migration-skill-authoring and .opencode/skills/migration-skill-authoring in your project.

What does Migration Skill Authoring need to run?

Going by SKILL.md and its folder, Migration Skill Authoring needs JavaScript for the scripts in its folder and the command-line tools its instructions call (git, node and claude). Our summary lists: Node.js.

Does Migration Skill Authoring access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Migration Skill Authoring safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Migration Skill Authoring use?

Migration Skill Authoring is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Migration Skill Authoring use?

About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.8k tokens, read only when the agent opens those files.

What are the alternatives to Migration Skill Authoring?

Skills that share tags, products or a category with Migration Skill Authoring: Claude Code Plugin Structure (anthropics/claude-plugins-official, 38k stars), SkillAnything Skill Generator (AgentSkillOS/SkillAnything, 471 stars), Luban (LearnPrompt/luban-skill, 958 stars) and Crush Builtin Skills (charmbracelet/crush, 29k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Migration Skill Authoring?

wanteddev (a GitHub organization) maintains it in wanteddev/montage-web, which has 117 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 8, 2026.

Source: wanteddev/montage-web on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.