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

## 0.4.0 - 2026-07-05

### Added

- Added the `briefprint` installable skill bundle under `skills/briefprint`.
- Added cache explanation output for document cache and rendered-output cache behavior.
- Added the incident lifecycle example and README benchmark shape.
- Added `--sensitive` as a safe default alias for ephemeral cache, no output cache, PII redaction, and delete-on-exit behavior.
- Added secret redaction support for cache and summarizer boundaries.
- Added Korean README coverage in `README.ko.md`.

### Changed

- Rebranded the agent-facing skill surface to Briefprint while retaining the Python package name `document-briefing-cache`.
- Kept installable agent skill files separate from repository runtime, tests, docs, examples, and packaging files.
- Tightened skill metadata, routing boundaries, and bundle validation.
- Bumped runtime and skill metadata to `0.4.0`; cache keys include the skill version, so prior `0.3.x` document-summary cache entries are treated as misses after upgrade.

### Security

- Documented that HMAC signing is tamper detection only and does not encrypt plaintext cache files.
- Documented sensitive-document defaults and redaction limitations.
2 changes: 1 addition & 1 deletion agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version: "0.3.1"
version: "0.4.0"

interface:
display_name: "Briefprint"
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "document-briefing-cache"
version = "0.3.1"
version = "0.4.0"
description = "Reusable document briefing skill with document-level caching and template rendering."
requires-python = ">=3.10"
dependencies = [
Expand Down
2 changes: 1 addition & 1 deletion scripts/validate_skill.py
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ def validate_openai_yaml(path: Path) -> list[str]:
text = path.read_text(encoding="utf-8")
errors = []
required_fragments = [
'version: "0.3.1"',
'version: "0.4.0"',
"interface:",
'display_name: "Briefprint"',
'short_description: "Rerender cached document briefings without re-summarizing unchanged supplied documents."',
Expand Down
2 changes: 1 addition & 1 deletion skills/briefprint/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: briefprint
description: Use to summarize, brief, digest, recap, or rerender docs/notes/tickets/logs/reports/transcripts, JSON/XML/API, or cached briefing state. Not for live research, source-code review/debugging, general writing, translation-only, simple Q&A, or non-cacheable input.
description: Use to summarize, brief, digest, recap, or rerender supplied documents, notes, tickets, logs, reports, transcripts, JSON/XML/API payloads, or cached briefing state. Do not use for live research, source-code review/debugging, general writing, translation-only edits, simple Q&A, or non-cacheable input.
---

# Briefprint
Expand Down
2 changes: 1 addition & 1 deletion skills/briefprint/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version: "0.3.1"
version: "0.4.0"

interface:
display_name: "Briefprint"
Expand Down
2 changes: 1 addition & 1 deletion src/document_briefing_cache/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@
"BriefingPipeline",
]

__version__ = "0.3.1"
__version__ = "0.4.0"
2 changes: 1 addition & 1 deletion src/document_briefing_cache/pipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
from .render import TEMPLATE_VERSION, render_briefing
from .summarizers import BaseSummarizer, RuleBasedExtractiveSummarizer

SKILL_VERSION = "0.3.1"
SKILL_VERSION = "0.4.0"


class BriefingPipeline:
Expand Down
2 changes: 1 addition & 1 deletion tests/test_installable_skill_bundle.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def test_installable_skill_bundle_frontmatter_and_references_are_portable():
assert re.fullmatch(r"[a-z0-9-]{1,64}", name)
assert description
assert len(description) <= 1024
assert len(description) <= 260
assert len(description) <= 320

root_only_fragments = [
"src/",
Expand Down
14 changes: 7 additions & 7 deletions tests/test_skill_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@
)


def test_versions_are_synchronized_to_0_3_1():
def test_versions_are_synchronized_to_0_4_0():
pyproject = (ROOT / "pyproject.toml").read_text(encoding="utf-8")
openai_yaml = (ROOT / "agents" / "openai.yaml").read_text(encoding="utf-8")

assert 'version = "0.3.1"' in pyproject
assert __version__ == "0.3.1"
assert SKILL_VERSION == "0.3.1"
assert 'version: "0.3.1"' in openai_yaml
assert 'version = "0.4.0"' in pyproject
assert __version__ == "0.4.0"
assert SKILL_VERSION == "0.4.0"
assert 'version: "0.4.0"' in openai_yaml


def test_openai_yaml_uses_interface_metadata():
Expand Down Expand Up @@ -47,11 +47,11 @@ def test_skill_description_matches_supported_modes_and_boundary():
description = next(
line.split(":", 1)[1].strip().strip('"') for line in frontmatter.splitlines() if line.startswith("description:")
)
assert len(description) <= 260
assert len(description) <= 320
description_lower = description.lower()
for term in ["summarize", "brief", "digest", "recap", "rerender", "cached briefing state"]:
assert term in description_lower
for input_kind in ["docs", "notes", "tickets", "logs", "reports", "transcripts", "json/xml/api"]:
for input_kind in ["documents", "notes", "tickets", "logs", "reports", "transcripts", "json/xml/api payloads"]:
assert input_kind in description_lower
for boundary in [
"live research",
Expand Down
Loading