@@ -82,6 +82,38 @@ SHA-256 digest is
8282Every manifest row is still ` preserve ` with ` review_state=proposed_preserve ` ; the comparison did
8383not automatically approve parity, a redirect, or a retirement.
8484
85+ ## Django parity gate
86+
87+ Issue #35 adds a separate approved-target contract rather than changing this observation evidence.
88+ ` approved-expectation.schema.json ` describes reviewed preserve, redirect, and retirement records
89+ bound to the exact manifest, difference-ledger, and public-contract digests. A preserve requires
90+ ` approved_parity ` ; a redirect or retirement requires ` approved_exception ` plus an owner, reason,
91+ and focused test. Target observations and reports use ` target-observation.schema.json ` and
92+ ` seo-parity-report.schema.json ` .
93+
94+ The generic gate captures anonymous GET responses through Django without network access, retains
95+ the exact input path/query spelling, compares server-rendered metadata/content/links/assets and
96+ sitemap state, and emits only stable value-free findings. Its runtime registry exposes only
97+ approved one-hop 301/308 and direct 410 decisions; an unknown path remains a normal 404. Local
98+ captures suppress runtime monitoring through an internal context marker that an HTTP client cannot
99+ set. Runtime events use known contract IDs or low-cardinality unknown/external groups and never
100+ record raw queries, fragments, unknown paths, referrers, user IDs, or response bodies.
101+
102+ The checked real inputs intentionally have no approved expectation sidecar yet. This must remain a
103+ nonzero ` BLOCKED ` result until adapter issues produce independently reviewed expectations:
104+
105+ ``` console
106+ make check-links
107+ make check-seo
108+ make compatibility-real-gate-blocked-check
109+ ```
110+
111+ The last target succeeds only when the management command exits nonzero and its report says
112+ ` BLOCKED ` with zero approved expectations. A fixture ` PASS ` is never whole-site or cutover approval.
113+ WSGI routes on decoded ` PATH_INFO ` ; ` raw_network_reference ` preserves collector evidence, while any
114+ contract that depends on encoded separators still requires a deployed edge test. External URLs are
115+ compared byte-for-byte but are not contacted by this activation gate.
116+
85117CI parses both checked artifacts strictly, validates their schemas, re-encodes the manifest,
86118recomputes the comparison, verifies exact URL sets and digests, and checks source metadata
87119invariants. The same verification is available offline:
0 commit comments