STD-VERIFY-001: DrupalWorks Verification Harvest & Runtime Contracts¶
Status: Approved Governing Standard
Authority: Thomas P. Scola Jr. — Verification Doctrine
Date: 2026-09-23
Bead: bc-9vir / bc-gajo
1. Verification Sequence Law¶
When establishing reusable validation capability, execution MUST strictly follow this 7-step sequence:
1. BUILD THE 5 REUSABLE VALIDATION CHECKS (Atomic Primitives)
2. MIGRATE THE END-TO-END FUNCTIONAL TEST
3. REWIRE mol-drupal-release-verify TO ORCHESTRATE THEM
4. ADD RECIPE VALIDATION CONTRACTS
5. PROVE ON THE CURRENT RIG (ContextControl)
6. PROVE ON A SECOND DRUPAL RIG (bluefly.io / amcs)
7. ONLY THEN DELETE SUPERSEDED scratch/ FILES
Rationale: Migrating the large runtime test first creates monolithic untestable scripts. The 5 checks are atomic reusable primitives that the E2E test and release formulas compose.
2. The Five Atomic Verification Checks¶
Located in DrupalWorks/checks/:
- Ghost Module / Stale Schema Integrity (
ghost-schema.php): Modules removed from codebase but active in schema or core.extension. - Views Handler Integrity (
views-handler-integrity.php): Views referencing broken/uninstalled filter/field/sort plugins. - Search API Backend / Tracker Integrity (
search-api-integrity.php): Indexes referencing dead server backends or trackers. - JSON:API Prefix / Routing Integrity (
jsonapi-config-integrity.php): Prefix collisions, broken route derivers. - Content Moderation / Workflow Filter Integrity (
moderation-filter-integrity.php): Moderation states pointing to deleted workflow transitions.
3. Ownership Boundaries¶
DrupalWorks ──► Owns Drupal verification checks & test suites.
Gas City ──► Orchestrates durable execution & agent lifecycles.
BluCity-Packs ──► Configures operational packs (NOT Drupal-specific PHP code).
ContextControl ──► Discovery site & customer control surface.
Recipes ──► Own their own post-apply validation contracts.
4. Verification Coverage Invariants¶
EXPECTED_SCOPE > 0 AND CHECKED_SCOPE = 0 => PASS_FORBIDDEN
PARTIAL_COVERAGE != PASS
CONFIG_PRESENT != RUNTIME_BEHAVIOR_CORRECT