Files
Andrew Yim 4f48ba3c59 feat(seo-schema-validator): back the upgraded SKILL.md with a working 5-layer pipeline
The "Upgrade Schema Validator" commit added SKILL.md referencing files that did
not exist. Implement them so the skill actually runs:

- scripts/validate_schema.py — 5-layer offline validator (L0 coverage, L1 syntax,
  L2 vocabulary/value-format, L3 rich-result, L4 consistency) with xlsx/csv/jsonl/
  json/dir/live-URL adapters. Gate = zero P0; exits 1 on failure.
- scripts/schema_rules.json — curated hotel-focused, offline rule set (edit-only
  extension point).
- scripts/make_sample.py + fixtures/sample_schema.csv — deliberately flawed fixture
  seeding ≥1 defect per layer; used to self-test.
- references/ — validation-methodology, defect-taxonomy (25 codes), hotel-type-map.
- templates/ — client-qa-report, decision-log.
- code/CLAUDE.md — redirect legacy single-URL tool to the new pipeline.

Noise control: MISSING_RECOMMENDED aggregated one-line-per-node; unexpected-property
checks opt-in via --strict. Generalized client-specific shilla-type-map → hotel-type-map.
Self-tested: default P0=5/P1=4/P2=14 FAIL, --strict --no-recommended P2=0, adapters verified.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 23:48:51 +09:00

1.7 KiB

P1 Decision Log — {{프로젝트명}}

P0 is non-negotiable: every P0 is fixed before launch (the gate enforces it). P1 is where judgement lives — some P1s get fixed, some get consciously accepted. This log records which, by whom, and why, so an accepted P1 is a decision on the record, not a silently ignored defect. It is the G3 (테스트) deliverable.

How to use

  1. Open defect_log.csv, filter to severity = P1.
  2. For each P1 (or each group of identical P1s), add a row below.
  3. Decision is one of: Fix (will correct before launch) / Accept (ship as-is, with rationale) / Defer (post-launch backlog).
  4. An Accept/Defer needs a named approver. Fix needs an owner + target date.
  5. Re-run the validator after the fixes; confirm the fixed P1s are gone.

Log

# Code Entry / scope Summary Decision Owner / Approver Target / Date Rationale
1 {{CODE}} {{entry_id or (dataset)}} {{one line}} Fix / Accept / Defer {{name}} {{YYYY-MM-DD}} {{why}}
2
3

Standing decisions (apply to all entries unless overridden)

Record cross-cutting calls once here instead of per row — e.g. "MISSING_RECOMMENDED for starRating is accepted group-wide: not contractually rated." Reduces log noise.

Code Standing decision Approver Date
{{CODE}} Accept group-wide — {{reason}} {{name}} {{YYYY-MM-DD}}

Sign-off

Stage gate Condition Confirmed by Date
G3 테스트 All P1 triaged (Fix/Accept/Defer), decisions logged above {{name}} {{date}}
G4 안정화 P0 = 0, all "Fix" P1 closed, online validator green on sample {{name}} {{date}}