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
62 changes: 59 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,64 @@ for tagged releases.

### Added

- Initial Knowledge Agent and Digital TeamMate framework.
- Allowlist-only publication boundary and repeatable installer.
- Sanitized automation definitions and empty-vault example.
- Marp slide-deck support, with a canonical Markdown deck template, a SecondBrain theme, deck-aware validation, and managed PDF, PowerPoint, and speaker-note exports.
- Separate voice-pack profiles for public writing and internal documents, with shared protected anti-AI style rules and a rollback copy for each generated profile.

### Changed

- Document and slide-deck workflows now keep Markdown as the canonical source throughout drafting, approval, and delivery; exported files remain generated deliverables.
- DOCX generation now supports standard Markdown image links and preserves a more natural document structure in exported Word files.
- Daily Note rollover now replaces earlier previous-note pointers cleanly, keeping a single current link to the preceding note.

## [2026-07-27]

### Added

- `resolve-document-items` skill for closing open questions, unowned actions, assumptions, and pending decisions in documents through a calm one-question-at-a-time workflow.
- DOCX deliverable generation now renders Markdown pipe tables as Word tables.

### Changed

- Daily Notes are retained together in the main workspace, and DTM validation checks that referenced projects, working notes, documents, and writing items have a same-day activity-log record.
- Framework validation now detects out-of-order system-log entries.

## [2026-07-19]

### Added

- `thinking-interview` skill for working through a question with structured prompts before committing to a conclusion.
- Lifecycle validation for archived writing, including the former publication URL, publication date, archive date, and archive reason.

### Changed

- Daily Note and working-note workflows were refined around stable focus commitments, durable working-note status, and clearer operational continuity.

## [2026-07-12]

### Added

- Markdown-to-PDF skill and managed Markdown-to-DOCX deliverable generation.
- Working-note template and workspace conventions for retained operational research, plans, and decision support.

### Changed

- Daily Note rollover and framework export checks were strengthened to preserve continuity and public-safe framework output.

## [2026-07-06]

### Added

- Managed `writing/` and `documents/` workspaces, including draft, ready, final, published, and deliverable lifecycle rules.
- DTM and voice skills, writing and document lint tools, reusable writing/document templates, and scheduled drafting and publishing automation definitions.
- Thread-scoped DTM sessions and a durable queue for wiki open questions.

### Changed

- The publication boundary now excludes personal writing and documents as well as Daily Notes, wiki content, and other live-vault material.

## [2026-06-23]

### Added

- Initial Knowledge Agent and Digital TeamMate framework.
- Allowlist-only publication boundary, repeatable installer, sanitized automation definitions, and empty-vault example.
46 changes: 31 additions & 15 deletions framework/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,16 @@ compound across sessions.
documents, such as `.pptx`, `.docx`, and `.xlsx`. Keep deliverables grouped
under a folder named for the document slug where practical, for example
`documents/deliverables/data-strategy-for-social-impact/`.
- Markdown remains the canonical source of truth for every authored document
and slide deck throughout its lifecycle. Draft and final Markdown files are
the maintained copies. Exported `.pptx`, PDF, HTML, image, Word, spreadsheet,
and speaker-note files are generated deliverables only; promoting a Markdown
source to final status does not make an exported file primary.
- Marp slide decks are canonical Markdown sources. Keep active deck sources
under `documents/drafts/<deck-slug>/<deck-slug>.marp.md` and approved final
deck sources under `documents/final/<deck-slug>/<deck-slug>.marp.md`.
Generate slide outputs under `documents/deliverables/<deck-slug>/exports/`
only when the user asks for a deliverable pass.
- When a Markdown document needs a managed Word copy, prefer
`python3 tools/document_deliverables.py docx <document.md>` and visually QA
the output by rendering page images before treating the deliverable as ready
Expand All @@ -166,13 +176,16 @@ compound across sessions.
document is also used as wiki evidence, retain the raw-source copy under
`raw/` or `raw/processed/` as immutable provenance and manage the authored
working copy separately under `documents/`.
- `writing/voice/voice-pack.md` is also the private style model for internal
document drafting. Voice analysis may read only reader-facing prose in
`writing/ready/`, `writing/published/`, and `documents/final/`; it must never
inspect document drafts or use chats, Daily Notes, wiki pages, sources,
projects, or scratch material as style evidence.
- Before creating or materially rewriting a document draft, read the voice pack
when it exists and apply its guidance without caricaturing the user.
- `documents/voice/document-voice-pack.md` is the private style model for
internal document drafting. `writing/voice/anti-ai-style-rules.md` is the
shared protected avoidance layer for both writing and documents. Voice
analysis may read only reader-facing prose in `writing/ready/`,
`writing/published/`, and `documents/final/`; it must never inspect document
drafts or use chats, Daily Notes, wiki pages, sources, projects, or scratch
material as style evidence.
- Before creating or materially rewriting a document draft, read the document
voice pack and anti-AI style rules when they exist and apply their guidance
without caricaturing the user.
- Run `python3 tools/documents.py lint` after structural or status changes.

### `writing/` — collaborative writing workspace
Expand Down Expand Up @@ -205,14 +218,17 @@ compound across sessions.
- Publish only the content between `<!-- publish:start -->` and
`<!-- publish:end -->`. Editorial briefs, source notes, and revision history
remain private working metadata unless the user explicitly includes them.
- `writing/voice/voice-pack.md` is a private style model maintained by the
`$voice` skill. Voice analysis may read only reader-facing prose in
`writing/ready/`, `writing/published/`, and `documents/final/`; it must never
inspect drafts or use chats, Daily Notes, wiki pages, sources, projects, or
scratch material as style evidence.
- Before creating or materially rewriting a draft, read the voice pack when it
exists and apply its guidance without caricaturing the user. Preserve the
user's current brief and explicit instructions over inferred style rules.
- `writing/voice/blog-voice-pack.md` is the private style model for public
writing maintained by the `$voice` skill. `writing/voice/voice-pack.md` is a
compatibility mirror for older artefacts. `writing/voice/anti-ai-style-rules.md`
is the shared protected avoidance layer. Voice analysis may read only
reader-facing prose in `writing/ready/`, `writing/published/`, and
`documents/final/`; it must never inspect drafts or use chats, Daily Notes,
wiki pages, sources, projects, or scratch material as style evidence.
- Before creating or materially rewriting a draft, read the blog voice pack and
anti-AI style rules when they exist and apply their guidance without
caricaturing the user. Preserve the user's current brief and explicit
instructions over inferred style rules.
- Run `python3 tools/writing.py lint` after structural or status changes.

### `AGENTS.md` — shared schema
Expand Down
19 changes: 13 additions & 6 deletions framework/DTM.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,10 +137,10 @@ only after confirmed success. Apply all detailed status and metadata rules in
`writing/README.md`.

Before creating or materially rewriting reader-facing prose, read
`writing/voice/voice-pack.md` when present. Treat it as guidance rather than a
formula: the current brief and direct user instructions take precedence. Only
the `$voice` workflow may learn style from the approved corpus, and it must
exclude drafts completely.
`writing/voice/blog-voice-pack.md` and `writing/voice/anti-ai-style-rules.md`
when present. Treat them as guidance rather than a formula: the current brief
and direct user instructions take precedence. Only the `$voice` workflow may
learn style from the approved corpus, and it must exclude drafts completely.

## Collaborative internal documents

Expand All @@ -166,6 +166,12 @@ document workspace item. Treat the Markdown file in `documents/drafts/` or
`documents/final/` as the editable canonical source when one exists, and treat
the `.pptx`, `.docx`, or `.xlsx` file as the distributed artefact.

The same rule applies to slide decks. A Marp `.marp.md` deck remains the
canonical source in draft and final states. Generate `.pptx`, PDF, HTML,
image, and speaker-note exports only when the user asks for a deliverable pass;
do not create or promote exported slide files merely because a Markdown deck
has been created or revised.

When generating a managed `.docx` deliverable from a Markdown source, prefer
`python3 tools/document_deliverables.py docx <document.md>`, then render the
result and visually inspect the page PNGs before treating it as ready to share.
Expand All @@ -175,8 +181,9 @@ in `raw/` or `raw/processed/` unchanged as provenance and maintain the authored
copy separately under `documents/`.

Before creating or materially rewriting an internal document, read
`writing/voice/voice-pack.md` when present. The `$voice` workflow may learn
from `documents/final/` as part of the approved corpus, but must never inspect
`documents/voice/document-voice-pack.md` and
`writing/voice/anti-ai-style-rules.md` when present. The `$voice` workflow may
learn from `documents/final/` for the document pack, but must never inspect
`documents/drafts/`.

If the user says they have edited a managed document directly in Obsidian or
Expand Down
2 changes: 1 addition & 1 deletion framework/automation-definitions/weekly-diary-draft.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@
"schedule": "01:30 every Monday in the user's local timezone",
"execution_environment": "local",
"workspace": "{{VAULT_PATH}}",
"prompt": "Read AGENTS.md, writing/README.md, and writing/voice/voice-pack.md. Determine the most recent complete Monday-Sunday week from daily/YYYY-MM-DD.md notes. Use every Daily Note from that week as the primary source of truth. Review the previous week's diary post in writing/published/ if one exists; if none exists, proceed without continuity review. Consult wiki/index.md only when extra context would materially improve one or two chosen themes, and only load the minimum relevant wiki pages. Write a conversational, reflective weekly diary post that summarises the week, explores one or two interesting developments in more depth, and closes by looking ahead. Save or update the draft at writing/drafts/diary-<year>-week-<ISO week>.md using the writing template conventions, update writing/index.md so the draft is listed exactly once, run python3 tools/writing.py lint, and report any unresolved blocker without touching writing/ready/ or writing/published/."
"prompt": "Read AGENTS.md, writing/README.md, writing/voice/blog-voice-pack.md, and writing/voice/anti-ai-style-rules.md. Determine the most recent complete Monday-Sunday week from daily/YYYY-MM-DD.md notes. Use every Daily Note from that week as the primary source of truth. Review the previous week's diary post in writing/published/ if one exists; if none exists, proceed without continuity review. Consult wiki/index.md only when extra context would materially improve one or two chosen themes, and only load the minimum relevant wiki pages. Write a conversational, reflective weekly diary post that summarises the week, explores one or two interesting developments in more depth, and closes by looking ahead. Save or update the draft at writing/drafts/diary-<year>-week-<ISO week>.md using the writing template conventions, update writing/index.md so the draft is listed exactly once, run python3 tools/writing.py lint, and report any unresolved blocker without touching writing/ready/ or writing/published/."
}
74 changes: 69 additions & 5 deletions framework/defaults/documents/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,15 @@ here under `documents/`.

## Voice pack

`../writing/voice/voice-pack.md` is the private style guide shared across
writing and internal documents. Invoke `$voice` to learn from approved prose in
`../writing/ready/`, `../writing/published/`, and `final/`. The skill never
reads `drafts/`.
`voice/document-voice-pack.md` is the canonical private guide to the user's
internal document style. It is generated from approved reader-facing prose in
`final/`. `../writing/voice/blog-voice-pack.md` is generated separately from
public writing, and `../writing/voice/anti-ai-style-rules.md` supplies the
protected anti-AI avoidance layer shared by both writing modes.

Invoke `$voice` to refresh the blog and document voice packs. The skill never
reads `drafts/` or `../writing/drafts/`, and it must not learn from chats,
Daily Notes, wiki pages, raw sources, projects, or scratch material.

## Lifecycle

Expand Down Expand Up @@ -73,7 +78,7 @@ updated: YYYY-MM-DD
audience:
human_author:
ai_assistance: true
voice_pack: writing/voice/voice-pack.md
voice_pack: documents/voice/document-voice-pack.md
origin_path:
tags:
- document
Expand Down Expand Up @@ -119,4 +124,63 @@ The current supported path is:

- Markdown document to Word `.docx`

## Marp slide decks

Use Marp Markdown as the canonical source for slide decks that should remain easy to edit in Obsidian and revise with Codex. This remains true throughout the whole lifecycle: draft, final, published, and later revised deck sources are Markdown-first. Exported `.pptx`, PDF, HTML, image, and speaker-note files are generated deliverables only; promoting a deck to a final version does not make an exported file the primary copy.

The preferred Obsidian plugin is `Marp Slides Presenter` (`marp-slides-presenter`), configured to use the local Marp CLI, Chrome launch wrapper, and `templates/marp-themes` as the custom theme folder.

Keep active draft deck sources under:

```text
documents/drafts/<deck-slug>/<deck-slug>.marp.md
```

When a deck is approved as final, move the Markdown source folder to:

```text
documents/final/<deck-slug>/<deck-slug>.marp.md
```

Create exported files only when the Markdown source has been reviewed and the user asks for a deliverable pass. Generated PDFs, PPTX files, speaker-note exports, and deck-local export artefacts belong under:

```text
documents/deliverables/<deck-slug>/exports/
```

Keep deck-local images, diagrams, and style overrides beside the Markdown source while the deck is still being edited:

```text
documents/drafts/<deck-slug>/assets/
documents/final/<deck-slug>/assets/
```

Start new decks from `templates/marp-deck.md`. Use `templates/marp-themes/secondbrain.css` as the default theme unless a branded or event-specific deck needs a different visual treatment.

Speaker notes belong in HTML comments on the slide they support:

```markdown
<!--
Speaker note:
Say the spoken argument here rather than crowding the slide.
-->
```

Prefer standard Markdown image links over Obsidian embeds inside decks, for example:

```markdown
![Delegation modes](assets/diagrams/delegation-modes.svg)
```

Use SVG or PNG assets for important visuals. Mermaid is acceptable for rough drafting, but important conference visuals should be exported to SVG or PNG before final delivery so Obsidian preview, PDF export, and PowerPoint export all use the same asset. Keep `MarkdownIt Plugins` disabled in the presenter plugin unless there is a deliberate need for Kroki-backed diagram rendering.

Deck export:

```sh
python3 tools/decks.py check
python3 tools/decks.py export documents/drafts/example-deck/example-deck.marp.md
```

The helper exports PDF, image-based PPTX, and speaker notes by default. Editable PPTX remains a special-case path because Marp's editable export has lower fidelity and does not preserve presenter notes reliably.

After generating a deliverable, render it through the bundled document-skill renderer and visually inspect the PNG output before treating it as ready to share. The current operating note for this workflow lives in `../work/document-deliverables-workflow.md`.
2 changes: 2 additions & 0 deletions framework/publication-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
{"source": "tools/dtm.py", "destination": "framework/tools/dtm.py"},
{"source": "tools/documents.py", "destination": "framework/tools/documents.py"},
{"source": "tools/document_deliverables.py", "destination": "framework/tools/document_deliverables.py"},
{"source": "tools/decks.py", "destination": "framework/tools/decks.py"},
{"source": "tools/marp-chrome", "destination": "framework/tools/marp-chrome"},
{"source": "tools/writing.py", "destination": "framework/tools/writing.py"},
{"source": "tools/export_framework.py", "destination": "framework/tools/export_framework.py"},
{"source": "tools/publish_framework.py", "destination": "framework/tools/publish_framework.py"},
Expand Down
Loading
Loading