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
16 changes: 8 additions & 8 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: Native Release
on:
workflow_dispatch:
push:
tags: [ 'v2.0.0rc3' ]
tags: [ 'v2.0.0rc4' ]

permissions:
contents: read
Expand Down Expand Up @@ -54,9 +54,9 @@ jobs:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
- name: Build OCI image
run: docker build -t comic-sol:2.0.0rc3 .
run: docker build -t comic-sol:2.0.0rc4 .
- name: Smoke OCI image
run: docker run --rm --entrypoint comic-sol comic-sol:2.0.0rc3 doctor --output-root /data/doctor
run: docker run --rm --entrypoint comic-sol comic-sol:2.0.0rc4 doctor --output-root /data/doctor

source:
runs-on: ubuntu-latest
Expand All @@ -82,7 +82,7 @@ jobs:
publish:
needs: [native, container, source]
runs-on: ubuntu-latest
if: github.ref == 'refs/tags/v2.0.0rc3'
if: github.ref == 'refs/tags/v2.0.0rc4'
permissions:
contents: write
env:
Expand All @@ -108,7 +108,7 @@ jobs:
records = []
for platform in ('linux', 'macos', 'windows'):
bundle = root / f'comic-sol-{platform}-x86_64'
verify_release_directory(bundle, ReleaseIdentity('2.0.0rc3', platform, 'x86_64'))
verify_release_directory(bundle, ReleaseIdentity('2.0.0rc4', platform, 'x86_64'))
for path in sorted(bundle.iterdir()):
if path.name == 'SHA256SUMS':
continue
Expand All @@ -121,6 +121,6 @@ jobs:
- name: Publish immutable prerelease assets
shell: bash
run: |
gh release create v2.0.0rc3 --repo "${GITHUB_REPOSITORY}" --verify-tag --prerelease --title 'Comic Sol v2.0.0rc3' --notes-file docs/releases/v2.0.0rc3.md
find bundles -type f ! -name SHA256SUMS -print0 | xargs -0 gh release upload v2.0.0rc3 --repo "${GITHUB_REPOSITORY}" --clobber
gh release upload v2.0.0rc3 bundles/SHA256SUMS --repo "${GITHUB_REPOSITORY}" --clobber
gh release create v2.0.0rc4 --repo "${GITHUB_REPOSITORY}" --verify-tag --prerelease --title 'Comic Sol v2.0.0rc4' --notes-file docs/releases/v2.0.0rc4.md
find bundles -type f ! -name SHA256SUMS -print0 | xargs -0 gh release upload v2.0.0rc4 --repo "${GITHUB_REPOSITORY}" --clobber
gh release upload v2.0.0rc4 bundles/SHA256SUMS --repo "${GITHUB_REPOSITORY}" --clobber
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,25 @@
# Changelog

## 2.0.0rc4 — 2026-07-30

Speaker-aware balloon-tail prerelease.

### Added

- Validated `speaker`, `voice_source`, and `speaker_anchor` semantics for every dialogue tail.
- Deterministic `organic-cubic-v1` geometry provenance and artifact-bound per-dialogue page-QA regions.

### Fixed

- Replaced short triangular wedge tails with merged-body, non-crossing cubic silhouettes that preserve a durable white core and point toward the declared voice source.
- Captions, system status, and SFX now fail closed if dialogue-only tail fields are present.
- Legacy free-coordinate `tail_target` inputs require explicit migration instead of silent reinterpretation.

### Distribution and limitations

- Linux, macOS, and Windows x86_64 bundles, CycloneDX SBOMs, and SHA-256 manifests remain available.
- Native archives and installers remain unsigned; verify them against `SHA256SUMS`.

## 2.0.0rc3 — 2026-07-30

Focused PDF fidelity prerelease.
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ The CLI currently exposes `doctor`, `init`, `status`, `validate`, `resume`,
`finalize`, and the optional `mcp` launcher. Machine-readable responses use one
stable envelope containing `ok`, `command`, `data`, and `error`.

## Native Distribution (`v2.0.0rc3`)
## Native Distribution (`v2.0.0rc4`)

The `v2.0.0rc3` prerelease provides bundled portable archives for Linux, macOS,
The `v2.0.0rc4` prerelease provides bundled portable archives for Linux, macOS,
and Windows x86_64, plus transactional user-local installers and a non-root OCI
image. Native archives include Python, Pillow, MCP, fonts, templates, the Skill,
and references, so installed execution does not require a system Python.
Expand Down
2 changes: 1 addition & 1 deletion comic_sol_product/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
"""Installed product surface for Comic Sol."""

__version__ = "2.0.0rc3"
__version__ = "2.0.0rc4"
2 changes: 1 addition & 1 deletion comic_sol_product/distribution.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from pathlib import Path
from typing import Iterable

_VERSION = "2.0.0rc3"
_VERSION = "2.0.0rc4"
_PLATFORMS = {"linux", "macos", "windows"}
_ARCHITECTURES = {"x86_64", "arm64"}
_SAFE_NAME = re.compile(r"^[A-Za-z0-9][A-Za-z0-9._-]*$")
Expand Down
2 changes: 1 addition & 1 deletion compose.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
services:
comic-sol:
build: .
image: comic-sol:2.0.0rc3
image: comic-sol:2.0.0rc4
read_only: true
command: ["mcp", "--root", "/data"]
volumes:
Expand Down
22 changes: 11 additions & 11 deletions docs/install.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Install Comic Sol v2.0.0rc3
# Install Comic Sol v2.0.0rc4

Comic Sol `v2.0.0rc3` is a prerelease distributed as native portable archives for Linux, macOS, and Windows, plus a Python wheel/source archive and an OCI image definition. Native archives bundle Python 3.11, Pillow, MCP, fonts, templates, the Skill, and references; no system Python is required after extraction.
Comic Sol `v2.0.0rc4` is a prerelease distributed as native portable archives for Linux, macOS, and Windows, plus a Python wheel/source archive and an OCI image definition. Native archives bundle Python 3.11, Pillow, MCP, fonts, templates, the Skill, and references; no system Python is required after extraction.

## Security status

Expand All @@ -11,29 +11,29 @@ This release is **unsigned**. It is not Authenticode-signed, notarized, or GPG-s
Download the matching ZIP and copy `installers/install.sh` from the same release or repository checkout. Read it before execution, then verify and install:

```bash
sha256sum comic-sol-2.0.0rc3-linux-x86_64.zip
sha256sum comic-sol-2.0.0rc4-linux-x86_64.zip
# Compare the digest with SHA256SUMS.
sh installers/install.sh \
--archive ./comic-sol-2.0.0rc3-linux-x86_64.zip \
--archive ./comic-sol-2.0.0rc4-linux-x86_64.zip \
--sha256 <digest-from-SHA256SUMS>

$HOME/.local/share/comic-sol/bin/comic-sol --version
$HOME/.local/share/comic-sol/bin/comic-sol doctor
```

For macOS, use `comic-sol-2.0.0rc3-macos-x86_64.zip`. The default installation root is `$HOME/.local/share/comic-sol`. Override it with `--install-root PATH` or `COMIC_SOL_INSTALL_ROOT`.
For macOS, use `comic-sol-2.0.0rc4-macos-x86_64.zip`. The default installation root is `$HOME/.local/share/comic-sol`. Override it with `--install-root PATH` or `COMIC_SOL_INSTALL_ROOT`.

The POSIX installer requires `sha256sum`, `unzip`, and standard POSIX utilities. Native binaries are unsigned, so macOS Gatekeeper may require an explicit local approval for this prerelease.

## Windows PowerShell

Download `comic-sol-2.0.0rc3-windows-x86_64.zip` and copy `installers/install.ps1` from the same release or repository checkout, then run:
Download `comic-sol-2.0.0rc4-windows-x86_64.zip` and copy `installers/install.ps1` from the same release or repository checkout, then run:

```powershell
(Get-FileHash .\comic-sol-2.0.0rc3-windows-x86_64.zip -Algorithm SHA256).Hash
(Get-FileHash .\comic-sol-2.0.0rc4-windows-x86_64.zip -Algorithm SHA256).Hash
# Compare the digest with SHA256SUMS.
.\installers\install.ps1 `
-Archive .\comic-sol-2.0.0rc3-windows-x86_64.zip `
-Archive .\comic-sol-2.0.0rc4-windows-x86_64.zip `
-SHA256 <digest-from-SHA256SUMS>

& "$HOME\AppData\Local\ComicSol\bin\comic-sol.exe" --version
Expand Down Expand Up @@ -80,8 +80,8 @@ Uninstall removes only the user-local runtime installation. Comic projects are p
Build and run the non-root image from a checkout:

```bash
docker build -t comic-sol:2.0.0rc3 .
docker run --rm --entrypoint comic-sol comic-sol:2.0.0rc3 doctor --output-root /tmp/comic-sol-doctor
docker build -t comic-sol:2.0.0rc4 .
docker run --rm --entrypoint comic-sol comic-sol:2.0.0rc4 doctor --output-root /tmp/comic-sol-doctor
docker compose up
```

Expand All @@ -91,7 +91,7 @@ The image runs as `comic-sol`, uses `/data` for persistent projects, and exposes

Each platform bundle contains:

- `comic-sol-2.0.0rc3-<platform>-x86_64.zip`
- `comic-sol-2.0.0rc4-<platform>-x86_64.zip`
- platform metadata declaring the unsigned state
- a CycloneDX SBOM
- `SHA256SUMS`
Expand Down
38 changes: 38 additions & 0 deletions docs/releases/v2.0.0rc4.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Comic Sol v2.0.0rc4

`v2.0.0rc4` is a speaker-aware balloon-tail **prerelease** that replaces ambiguous free-coordinate wedges with validated voice-source semantics and production-quality organic cubic tails.

## Fixed

- Every dialogue now binds `speaker`, `voice_source`, and normalized `speaker_anchor` semantics before lettering.
- Human and spoken-device tails resolve toward the declared visible voice source; captions, system status, and SFX remain tail-free.
- Legacy `tail_target` projects remain readable for inspection but fail closed with `balloon-tail-migration-required` until explicitly migrated.
- Balloon tails use a deterministic `organic-cubic-v1` geometry record with body overlap, non-crossing controls, protected source gap, durable white core, and a single merged body/tail outline.
- Lettering provenance binds the complete tail geometry and rejects stale or legacy wedge records downstream.
- `bubble-tail-direction` page QA requires exactly one artifact-bound region per dialogue; generic `all-bubbles` evidence is rejected.

## Visual evidence

A local deterministic fixture rendered the RC3 wedge and RC4 cubic tail from identical panel, text, and speaker-anchor inputs. The final V4 geometry passed strict visual inspection for body integration, smooth taper, white-core durability, outline consistency, clean antialiasing and tip, and alignment to the mouth anchor. Deterministic mechanics tests remain separate from this retained visual review.

## Quality and compatibility

RC4 retains deterministic normalization, typography preflight, the immutable `four-grid` layout, artifact-bound page QA, full-content PDF verification, and the deterministic quality matrix. Matrix evidence proves mechanics only and is not a substitute for visual review.

- The exact 17-tool MCP surface is unchanged.
- Full-page PDF thresholds remain `3.1 / 0.021 / 16.0`.
- RC3 PDF quality 95 fidelity behavior is retained.
- Raw and clean panel art remains reusable when only dialogue-tail semantics change.

## Distribution

The prerelease includes:

- Linux, macOS, and Windows x86_64 portable archives
- Python wheel and source archive
- transactional POSIX and PowerShell installers
- SHA-256 checksums
- CycloneDX SBOMs
- non-root OCI build definition

Native archives and installers remain **unsigned**. Verify every downloaded artifact against `SHA256SUMS` before use.
Loading
Loading