12 KiB
Korean Experience-Prose Contract Design
Goal
ClariDoc must apply one enforceable Korean prose contract when it writes or
reviews a Korean technical blog or Korean README. The contract must preserve
facts and document structure while making the reader follow the author's
experience in consistent 합니다/했습니다 prose.
The change closes the gap between a skill file that describes the desired
style and a harness that currently neither passes that style to providers nor
checks it before returning PASS.
Scope
The contract applies automatically to:
- a Korean
technical_blogusingauto,woowahan_tech_blog_ko, orkorean_problem_solving_blog; - every Korean
readme.
It does not force first-person retrospective prose onto tutorials, how-to guides, references, troubleshooting guides, explanations, or design documents. Those document types keep their existing style behavior.
The current repository README.md is part of the migration. Its factual
content, commands, links, tables, and overall information order remain intact,
but its reader-facing Korean prose is revised to the same experience-oriented
합니다/했습니다 style.
Considered Approaches
Prompt-only guidance
Copy the skill text into the drafting prompt. This has the smallest code change, but it leaves no objective proof that the writer or reviser kept the rules. It would preserve the current failure mode in which one correction causes another part of the document to regress.
Opt-in style profile only
Require README authors to select a special style_profile. This avoids adding
a document type, but a missing configuration value silently disables the
contract. It also makes README structure masquerade as another document type.
Shared contract with a first-class README type
Add readme to the document model and define one shared prose contract used by
prompts, lint, reviews, revisions, reports, and tests. This is the selected
approach because it makes activation explicit and lets deterministic and model
judgment checks cover different parts of the same contract.
Architecture
First-class README document type
DocumentType.README is added to the model and JSON schemas. Its deterministic
outline contains these intents in order:
problem_value: the concrete problem and why the project exists;principles: the project behavior and boundaries readers must understand;workflow: the end-to-end operating flow;installation: prerequisites and installation;quickstart: the smallest useful execution path and expected result;configuration: the main configuration choices and their effects;verification: how to verify success and diagnose common failure;limits_next: evidence limits, unsupported claims, and the next relevant action.
The planner may refine titles and evidence allocation, but it must preserve these intents and their order just as it does for existing document types.
Shared prose contract
A focused claridoc.style_contracts module owns activation and provider-facing
guidance. It exposes:
def korean_experience_contract_applies(brief: Brief) -> bool: ...
def style_guidance(brief: Brief) -> str: ...
The returned guidance includes the same rules in every provider stage:
- open the document and major transitions from a concrete code, screen, request, or problem the author encountered;
- show the initial expectation, then the observed difference;
- explain an unfamiliar term where it first becomes necessary;
- show what the author checked, selected, or changed;
- close the thread with the result, accepted cost, or remaining problem;
- use
저는or제가where it establishes the experience, without repeating it mechanically in every sentence; - use
했습니다for observed or performed work and합니다for current behavior and technical explanation; - never invent an emotion, conversation, failure, duration, result, or technical rationale that the evidence does not support;
- preserve code, commands, identifiers, numbers, links, tables, diagrams, claims, evidence status, and outline order.
The guidance describes the canonical paragraph pattern as form, not as facts to copy:
concrete starting point
→ initial expectation
→ observed difference
→ immediate term explanation
→ author action or decision
→ result, cost, or remaining limit
drafting_prompt, review_prompt, and revision_prompt all call this shared
module. No stage keeps a separate abbreviated version.
Deterministic checks
Deterministic lint checks only properties that can be recognized without guessing the author's intent.
STYLE002 reports a blocker when reader-facing prose mixes plain declarative
endings such as 한다., 있다., 아니다., or ~했다. into a document whose
contract requires 합니다/했습니다. Fenced code, headings, Markdown tables,
block quotations, image alt text, command output, and quoted spans are excluded.
The report consolidates matches and records their count and first locations.
STYLE003 reports a blocker when the opening has no explicit 저는 or 제가
marker, or when fewer than half of substantive H2 sections contain an explicit
first-person experience marker. A substantive section is an H2 section with at
least one reader-facing prose paragraph; code-only and table-only sections do
not count.
The lint report adds:
style_contract:korean_first_person_experience_v1ornone;plain_form_ending_count;first_person_marker_count;experience_section_count;experience_section_coverage.
Because both style issues are blockers, configured error tolerances cannot turn them into a passing result.
Deterministic lint does not try to decide whether a paragraph contains a genuine discovery, whether a term is unfamiliar, or whether the prose sounds natural. Those require model judgment.
Independent review and revision
Every reviewer role receives mandatory prose checks when the contract applies:
- the opening and major transitions follow an experience rather than listing settled facts;
- the paragraph presents an actual expectation or observation rather than
inserting
저는as decoration; - unfamiliar terms are explained at first need;
- contrasts name the actual component and behavior that differ;
- the document does not manufacture personal history or project rationale;
합니다/했습니다remains consistent outside exempt Markdown regions.
The revision prompt requires a whole-document contract audit after resolving individual findings. This prevents a local rewrite from regressing another section. Each revision round already runs lint and independent reviews again, so the shared contract is re-evaluated before the quality gate can pass.
Skill entry point
The dangling .agents/skills/technical-document-author/SKILL.md reference is
replaced with a real authoring skill. It preserves the repository sequence:
Brief
→ SourcePack
→ deterministic outline
→ draft
→ lint and independent reviews
→ revision
→ quality gate
→ reader document and provenance artifacts
For Korean technical blogs and Korean READMEs, the authoring skill requires the
Korean prose contract and its sentence-pattern reference. It may not claim
completion without lint, review, and quality-gate artifacts. The existing
revising-korean-technical-prose skill remains the focused in-place revision
skill.
Data Flow
Brief(document_type, language, style_profile)
→ style-contract activation
→ planner keeps deterministic document structure
→ writer receives shared prose guidance
→ deterministic lint checks endings and first-person coverage
→ every reviewer checks experience quality and factual boundaries
→ reviser receives the same guidance plus all findings
→ lint and reviews run again
→ blockers prevent PASS
→ report records style metrics and findings
README Migration
The repository README.md is revised in place with the
revising-korean-technical-prose skill:
- existing facts, code blocks, commands, paths, links, tables, and diagrams are preserved;
- Korean reader-facing prose uses
합니다/했습니다; - the opening and major transitions explain how the harness's failure modes were encountered and how the implemented workflow addresses them;
- no unverified personal event, advice, measurement, or project rationale is added;
- a section documents the activation scope, lint codes, review behavior, and
readmebrief usage.
The migration is checked separately from generated documents because the repository README is not itself a pipeline output artifact.
Error Handling
- Invalid
document_type: readmehandling disappears once the enum and schemas are updated; other unknown types remain validation errors. - Style lint returns actionable locations and correction guidance rather than rewriting content.
- Empty or structure-only documents still fail existing structure and length checks; style metrics do not mask those failures.
- Quoted evidence and code are excluded from deterministic ending checks so original material is not altered to satisfy prose style.
- A model review cannot override a deterministic style blocker.
Testing
Tests are added before production changes.
Model and structure tests
readmeis accepted byBriefand outline schemas;readmereceives eight unique required intents in the specified order;- all existing document types retain their current outlines.
Prompt tests
- Korean technical-blog and README draft, review, and revision prompts contain the same contract identifier and required rules;
- English and unrelated Korean document types do not receive the contract;
- the revision prompt requires a whole-document recheck.
Lint tests
- mixed
한다/합니다prose is a blocker; - fenced code, headings, tables, block quotations, image alt text, and quoted examples do not cause false positives;
- missing opening first person is a blocker;
- insufficient substantive-section coverage is a blocker;
- a representative experience-oriented technical blog passes;
- a representative Korean README passes;
- unrelated document types retain existing lint behavior.
Pipeline tests
- a style blocker prevents the quality gate from passing even when configured error tolerance is nonzero;
- revision rounds receive the blocker and rerun the contract checks;
- final artifacts record the style contract and findings.
Repository validation
- targeted unit tests are run after each TDD cycle;
PYTHONPATH=src python3 -m unittest discover -s tests -vis run;bash scripts/verify.shis run if it can preserve the user's unrelated working-tree changes; otherwise its destructive build steps are inspected and an equivalent non-destructive validation set is reported explicitly;- the revised
README.mdis scanned outside code and quoted regions for plain declarative endings and reviewed against the experience-flow checklist.
Success Criteria
The implementation is complete only when:
- Korean technical blogs and Korean READMEs receive the contract in every model stage;
- omitting
합니다/했습니다consistency or first-person experience coverage creates a deterministic blocker; - qualitative experience flow is a mandatory independent-review concern;
- a revision cannot pass without rerunning the checks;
readmeis a supported contract-first document type;- the missing technical-author skill entry point exists and requires validation artifacts;
- the repository README follows and documents the same contract;
- all targeted and full regression tests pass.