Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/guide/concepts.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ To summarize:
That `runs/*.json` is where a fact's value lives matters. merge rebuilds
`candidates.csv` from it every time, so hand-edits to `candidates.csv` are
overwritten and lost on the next `/factlog sync`. That is why correcting a value
goes through [`factlog amend`](../reference/review.en.md#reviewing-facts-factlog-review--accept--reject),
goes through [`factlog amend`](../reference/review.en.md),
which updates both sides together.

## candidate vs accepted — the trust boundary
Expand Down
2 changes: 1 addition & 1 deletion docs/guide/concepts.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ Windows `C:\Users\<이름>`), `--target <경로>` 로 원하는 위치를 고를
`runs/*.json` 이 “사실의 원본”이라는 점이 중요합니다. merge가 매번 그로부터
`candidates.csv` 를 다시 만들기 때문에, `candidates.csv` 를 손으로 고치면 다음
`/factlog sync` 에 덮여 사라집니다. 그래서 값 교정은 양쪽을 함께 갱신하는
[`factlog amend`](../reference/review.md#사실-검토-factlog-review--accept--reject) 를
[`factlog amend`](../reference/review.md) 를
씁니다.

## candidate vs accepted — 신뢰 경계
Expand Down
2 changes: 1 addition & 1 deletion docs/guide/use-cases.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,4 @@ walks the whole flow through once without your own data.
- `/factlog sync` to produce candidate facts
- `factlog review` to review the candidates
- retire badly extracted candidates with `factlog reject`; for candidates that only need their wording tidied, fix the value with `factlog amend` and then approve with `factlog accept` (or `factlog amend --accept`)
- For details, see [Reviewing facts](../reference/review.en.md#reviewing-facts-factlog-review--accept--reject)
- For details, see [Reviewing facts](../reference/review.en.md)
2 changes: 1 addition & 1 deletion docs/guide/use-cases.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,4 @@
- `/factlog sync` 로 후보 사실을 만든다
- `factlog review` 로 후보를 검토한다
- 잘못 추출된 후보는 `factlog reject` 로 폐기하고, 표현만 다듬을 후보는 `factlog amend` 로 값을 고친 뒤 `factlog accept`(또는 `factlog amend --accept`)로 승인한다
- 자세한 사용법은 [사실 검토](../reference/review.md#사실-검토-factlog-review--accept--reject) 참고
- 자세한 사용법은 [사실 검토](../reference/review.md) 참고
4 changes: 1 addition & 3 deletions docs/reference/review.en.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
# Reviewing facts
# Reviewing facts (`factlog review` / `accept` / `reject`)

> 🌐 **English** | [한국어](review.md)

## Reviewing facts (`factlog review` / `accept` / `reject`)

Extraction marks facts `candidate` or `needs_review`; only `confirmed`/`accepted`
facts become engine input. Promote or retire them without hand-editing
`facts/candidates.csv`:
Expand Down
4 changes: 1 addition & 3 deletions docs/reference/review.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
# 사실 검토
# 사실 검토 (`factlog review` / `accept` / `reject`)

> 🌐 [English](review.en.md) | **한국어**

## 사실 검토 (`factlog review` / `accept` / `reject`)

추출은 사실을 `candidate` 또는 `needs_review` 로 표시하며, `confirmed`/`accepted`
사실만 엔진 입력이 됩니다. `facts/candidates.csv` 를 직접 손대지 않고 승격하거나
폐기할 수 있습니다.
Expand Down
49 changes: 49 additions & 0 deletions tests/unit/test_review_doc_links.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# SPDX-License-Identifier: Apache-2.0
"""Regression checks for the review-reference title and its inbound links (#283)."""
from __future__ import annotations

import re
from pathlib import Path

import pytest


ROOT = Path(__file__).resolve().parents[2]


def github_heading_slug(title: str) -> str:
"""Model GitHub's anchor rule: removed punctuation leaves its spaces intact."""
return re.sub(r"\s", "-", re.sub(r"[^\w\s-]", "", title.strip().lower())).strip("-")


@pytest.mark.parametrize(
("review_path", "title", "legacy_anchor", "inbound_paths"),
[
(
"docs/reference/review.md",
"사실 검토 (`factlog review` / `accept` / `reject`)",
"사실-검토-factlog-review--accept--reject",
("docs/guide/concepts.md", "docs/guide/use-cases.md"),
),
(
"docs/reference/review.en.md",
"Reviewing facts (`factlog review` / `accept` / `reject`)",
"reviewing-facts-factlog-review--accept--reject",
("docs/guide/concepts.en.md", "docs/guide/use-cases.en.md"),
),
],
)
def test_review_title_has_no_duplicate_heading_and_preserves_old_anchor(
review_path: str, title: str, legacy_anchor: str, inbound_paths: tuple[str, str]
):
review = ROOT / review_path
text = review.read_text(encoding="utf-8")

assert text.startswith(f"# {title}\n")
assert text.count(title) == 1
assert github_heading_slug(title) == legacy_anchor

relative_review = "../reference/" + review.name
for inbound_path in inbound_paths:
inbound = (ROOT / inbound_path).read_text(encoding="utf-8")
assert f"]({relative_review})" in inbound