Skip to content

fix(skills): two hardcoded Airflow values slip past check-placeholders.sh #1139

Description

@dpol1

What

Two skill docs hardcode Apache Airflow values in operative (non-example) positions:

where literal should come from
skills/pr-management-stats/fetch.md:213 repository(owner:"apache",name:"airflow") in the GraphQL batch-fetch recipe the configured <upstream> slug (upstream_repo in <project-config>/project.md), split into owner/name
skills/release-announce-draft/SKILL.md:363 closer.lua?path=airflow/<version>/... in the site-bump constraint the project_dist_name key in <project-config>/release-management-config.md — the skill already reads that file (cf. its product_name derivation at line 237)

tools/dev/check-placeholders.sh passes on both: its FORBIDDEN_PATTERNS list is four fixed strings (apache/airflow, airflow-s/airflow-s, Apache Airflow, apache.org/airflow) and neither lowercase form matches.

Why it matters

AGENTS.md calls this out directly: "Writing a literal project value directly into a skill is a refactor bug — skills must stay project-agnostic so swapping projects is a config change, not a code change." An agent following the fetch.md recipe against any other adopter queries the wrong repository; an adopter's announce draft points its download links at Airflow's dist tree. And because the linter's pattern list doesn't cover the lowercase forms, this class of residue can keep slipping in — #1132 just cleaned the same class out of projects/_template/, but these two sit in skill docs, outside both its scope and the linter's allowlist.

No new placeholder is needed for either fix — both values are already derivable from existing configuration, which is the point of the placeholder table's "thread a needed value in via the project manifest" rule.

Suggested fix

  • fetch.md:213 — derive owner / name from <upstream>, the way the surrounding steps already treat it.
  • release-announce-draft/SKILL.md:363 — render the closer.lua path from project_dist_name.
  • check-placeholders.sh — add name:"airflow" and path=airflow to FORBIDDEN_PATTERNS so the lowercase class is caught at commit time.

For scope: a grep -rn 'airflow' skills/ sweep shows the remaining hits are marked examples (candidate-rules.md's "the shape for an Airflow-like project", the issue-triage JIRA-key example, the slop-detection fixtures) — this issue is only the two operative literals plus the linter patterns.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions