[Editorial Quality Gates]

Editorial Quality Gates

These checks protect the editorial and information-architecture decisions established by EI-1 through EI-4.

Automated checks

scripts/editorial_quality_gate.py runs on every push to main and every pull request.

It fails when it detects:

  • duplicate or malformed explicit post permalinks;
  • invalid canonical content_type or subject values when those fields are present;
  • a PTIR item whose series: PTIR metadata is not paired with content_type: briefing;
  • restoration of the retired categories: PTIR discovery model;
  • removal or retargeting of the protected /blog//writing/ compatibility route;
  • removal or retargeting of the protected /links//contact/ compatibility route;
  • reintroduction of jekyll-paginate, paginate:, or paginate_path: in _config.yml.

The controlled vocabulary check applies to normalized posts and pages.

Canonical controlled vocabulary

Content types

  • writing
  • briefing
  • collection
  • portfolio

Subjects

  • Technology
  • Teaching
  • Computing History
  • Journalism & Media

There is deliberately no miscellaneous Personal subject. Personal voice is a characteristic of the site, not a browsing taxonomy.

PTIR is a series, not a subject:

content_type: briefing
series: PTIR

The Loudmouth is a collection, not a subject. Featured and Archive are editorial/discovery states rather than subjects.

Privacy boundary

The automated gate deliberately does not encode names or titles from EI-1 privacy/DELETE material. Privacy enforcement remains governed by the EI-1 inventory and media manifest rather than placing sensitive identifiers into public production validation code.

No automated rule should create redirects, placeholder pages, media references, or discovery records for privacy/DELETE content.

Running locally

python scripts/editorial_quality_gate.py

A successful run exits with status 0. Any governance violation is printed and exits with status 1.

PACO.ORG BBS v1.2.0 (ANSI ON)
paco.org>