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
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Added

- MinerU-backed DOM parsing API for scanned Japanese newspaper PDFs
- Synthetic newspaper fixture generation and structural equivalence checks
- Protected-branch CI, security gates, release provenance workflow, and Git Flow documentation
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ Development setup, fixture handling rules, and local-only baseline maintenance a

Version tags trigger a GitHub-native release workflow that builds distribution artifacts, checksums, and provenance attestations.

Project history is tracked in `CHANGELOG.md`.

Repository branch workflow is documented in `docs/workflow/git-flow.md`.

## Repository layout
Expand Down
36 changes: 36 additions & 0 deletions docs/adr/0001-openssf-best-practices-badge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# ADR-0001: OpenSSF Best Practices Badge Enrollment

## Status

Accepted

## Context

The repository already has branch protection, CI checks, CodeQL, OpenSSF Scorecard, Dependabot, a security policy, locked workflow dependencies, and a planned release pipeline. Scorecard still reports a best-practices gap because the OpenSSF Best Practices badge program has not been started.

The current repository also has only one organization member and one repository collaborator, so external reviewer capacity is not yet in place. The first tagged release is not available yet because the current PR stack still needs external review before it can merge into protected branches.

## Decision

We will **defer** OpenSSF Best Practices badge enrollment until after:

1. the current protected-branch PR stack is merged,
2. the first tagged release has been produced with release provenance, and
3. at least one external reviewer is available for normal protected-branch review flow.

## Consequences

### Positive

- Keeps focus on finishing concrete repository hardening already underway.
- Avoids starting a badge questionnaire before the release and review processes are stable.
- Preserves a clear, auditable decision in the repository.

### Negative

- Scorecard will continue to report the best-practices gap until enrollment is revisited.

## Follow-up

- Revisit enrollment after issue #8 and issue #10 are resolved.
- If the repository still intends to pursue the badge at that time, assign an owner and complete the OpenSSF questionnaire.
5 changes: 5 additions & 0 deletions docs/adr/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Architecture Decision Records

| ADR | Title | Status |
| --- | ----- | ------ |
| [0001](0001-openssf-best-practices-badge.md) | OpenSSF Best Practices Badge Enrollment | Accepted |
12 changes: 12 additions & 0 deletions tests/test_adr_docs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from pathlib import Path


def test_best_practices_decision_adr_exists_and_documents_deferral():
path = Path("docs/adr/0001-openssf-best-practices-badge.md")
assert path.exists()
text = path.read_text(encoding="utf-8")
assert "Status" in text
assert "Accepted" in text
assert "defer" in text.lower()
assert "first tagged release" in text.lower()
assert "external reviewer" in text.lower()
9 changes: 9 additions & 0 deletions tests/test_changelog.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from pathlib import Path


def test_changelog_exists_and_uses_keep_a_changelog_format():
text = Path("CHANGELOG.md").read_text(encoding="utf-8")
assert text.startswith("# Changelog")
assert "Keep a Changelog" in text
assert "## [Unreleased]" in text
assert "Semantic Versioning" in text
Loading