Sync postgresai skill from the GitLab monolith

What does this MR do and why?

The postgresai skill moves to the GitLab monolith as its source of truth, and this repo becomes the destination. Changes will arrive through the sync job instead of direct edits here. The reasoning is in the origin discussion linked below.

Testing

bin/ci-checks passes locally. A reviewer dry run of the sync with the corrected path showed no drift against the monolith MR's copy.

Performance Analysis

  • This merge request does not introduce any performance regression. There is no runtime code in this change.
Agent context: manifest and doc changes, path reasoning, sync behavior, follow-ups
  • Manifest: synced-skills.yml gets postgresai with source_project: gitlab-org/gitlab, source_path: .claude/skills/postgresai, source_ref: master, mode: mr.
  • Source SHA: gitlab-org/gitlab!260040 (merged) was at 4c879399de2bbc0ae1b34e88be530d6a636604a7 (branch dgruzd/postgresai-skill-ssot) when I wrote this.
  • Why .claude/skills: in gitlab-org/gitlab, .agents/skills is a symlink to ../.claude/skills, and the repository tree API returns 404 for paths through it. The sync would fail on every run with the .agents path.
  • Docs: doc/synced-skills.md lists the skill and uses the new path. CONTEXT.md and AGENTS.md/CLAUDE.md (kept byte-identical) now say syncs come from the scheduled job or a manual run of sync-skills, because no pipeline schedule exists today. The revoked sync bot token id in doc/synced-skills.md is replaced with the active one, confirmed through the API.
  • No changes to skills/postgresai/. The first sync brings in the updated Contributing section and the 1.0.2 version bump from the monolith MR.
  • Sync behavior: it mirrors the whole skill directory, scripts/ and tests/ included, so test_joe.sh arrives with the skill. It deletes local files missing upstream. The Claude Code plugin.json and the catalog entry live outside skills/postgresai/ and aren't touched. Once synced, the edit guard blocks direct changes to skills/postgresai/.
  • Validation: bin/ci-checks. I didn't run scripts/sync_external_skills.py --check myself, since the upstream path didn't exist yet.
  • Follow-ups:
    • The guard exemption is an OR (bot login or sync/* branch), but the doc says both are required.
    • Files the sync creates get mode 0644, so a new upstream script would lose its executable bit.
    • No pipeline has run here because of [skip ci]. We should run one before merging.
Edited by Dmitry Gruzd

Merge request reports

Loading
Loading