Files
our-claude-skills/custom-skills/16-seo-schema-validator/templates/decision-log.md
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

40 lines
1.7 KiB
Markdown

# 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}} |