sabaridsnfuji's picture
|
download
raw
8.08 kB

NOTICE — third-party provenance

posterly is licensed as a whole under AGPL-3.0 © 2026 Ruishuo Chen (see LICENSE). It additionally vendors a set of poster-quality "gate" tools, three tokenized templates, and one component catalog from ARIS (Auto-claude-code-research-in-sleep), whose paper-poster-html skill is itself a fork of posterly. Those ARIS files are MIT-licensed; MIT is GPL/AGPL-compatible, so they are lawfully combined into this AGPL project while remaining individually available under their original MIT terms (see below). This file records the vendor boundary so the relationship stays clean and attribution is preserved in both directions.

Licensing of this combined work

  • The project as a whole is AGPL-3.0 (LICENSE). Any distributed or network-deployed (SaaS) derivative of posterly must release its complete corresponding source under AGPL-3.0.
  • The body-unmodified ARIS tools below (style_check.py, asset_check.py, extract_pdf_figures.py, preprocess_figures.py) are verbatim MIT © 2026 wanshuiyin and remain additionally available under MIT (LICENSES/aris-MIT.txt) — anyone may extract just those files and use them under MIT. AGPL copyleft applies to posterly as a whole, not to these individual third-party files in isolation.
  • The adapted files (templates, COMPONENTS.md, run_gates.py) are derivative works combining posterly-original material with ARIS's MIT contribution; as part of posterly they are distributed under AGPL-3.0, with the MIT origin attributed below.

Vendored from ARIS (MIT)

  • Upstream: ARIS — https://github.com/wanshuiyin/Auto-claude-code-research-in-sleep (skill paper-poster-html).
  • License: MIT, © 2026 wanshuiyin. Full text: LICENSES/aris-MIT.txt.
  • Note on lineage: ARIS's paper-poster-html vendored posterly's render/measure engine (_posterly/, poster_check.py, render_preview.py) unchanged, then layered the gate tools below on top. We vendor those ARIS-original additions back here. posterly keeps its own (newer) _posterly/ and poster_check.py — they are NOT replaced.

Vendored, body unmodified (a provenance header comment was prepended to each .py):

Path Origin in ARIS Purpose
tools/style_check.py scripts/style_check.py style HARD gate (13 rules: token-only colors, no inline style=, no gradients, font whitelist, --fs-* scale, data-attribute contracts, BEM-variant CSS presence)
tools/asset_check.py scripts/asset_check.py real-figure provenance gate (data-source="paper" + FIGURE_MANIFEST.json sha256 chain + rendered-area bands)
tools/extract_pdf_figures.py scripts/extract_pdf_figures.py pull real figures out of a paper PDF (contact-sheet / auto / crop) — needs PyMuPDF + Pillow
tools/preprocess_figures.py scripts/preprocess_figures.py autocrop / resolution-check extracted crops, keep FIGURE_MANIFEST.json honest — needs Pillow

These vendored scripts import posterly's own tools/_posterly/ (canvas/render/textutil), so they run against posterly's engine, not a copy.

Vendored and adapted:

Path Origin posterly modifications
templates/COMPONENTS.md templates/COMPONENTS.md re-pointed from the ARIS skill's design docs to posterly's SKILL.md + tools/ gates; provenance note added. The component classes it catalogs are posterly's own.
templates/landscape_4col_neutral.html templates/landscape_4col.html the tokenized form of posterly's own neutral template — replaced the non-tokenized original in place so style_check passes out of the box; provenance comment prepended. Measure-role skeleton, component classes, and placeholder copy are posterly's own (verified identical).
templates/landscape_hero_neutral.html templates/landscape_hero.html same as above
templates/portrait_2col_neutral.html templates/portrait_2col.html same as above
tools/run_gates.py scripts/run_gates.py gate orchestrator → GATE_REPORT.json. Modified by posterly (fixes an upstream false-pass): the asset gate is now opt-in — without --manifest it is reported NOT_RUN and excluded from overall, instead of being run, crashing on its required arg (child exit 2), and silently counted as a pass; a hard gate that ends in SKIPPED from a real environment error now counts as a failure. Also forwards --hero to asset_check; the report skill field is posterly.

ARIS-inspired, original posterly work (not a copy)

  • The softened closed-set fix vocabulary and the cross-model final-review step in SKILL.md are original posterly text, inspired by paper-poster-html's DESIGN_FINAL (Phase 5 anti-patch-loop / Phase 6 Codex review). posterly's version is half-closed (the agent may propose a new token/variant for human review rather than being hard-blocked) and uses adjustable round caps, suited to a human-in-the-loop workflow.

Not vendored

ARIS's venue color-token packs (templates/tokens/*.json) were intentionally not taken: posterly derives its palette from poster signals (logo / figure / brand) under WCAG AA, rather than from fixed per-venue presets.

ResearchStudio-inspired, original posterly work (not a copy)

Five loop-convergence mechanisms were inspired by ResearchStudio's paper2poster skill (https://github.com/ai-nuts/ResearchStudio, ResearchStudio-Reel/skills/paper2poster) after a 2026-07 side-by-side review. No code or prose was copied — the mechanisms were re-designed for posterly's human-in-the-loop workflow and implemented from scratch against posterly's own _posterly engine (paper2poster shares distant ancestry with that engine but diverged long ago):

  • the shared-passing-band + safe-delta hints in measure (their needPx/needPxRange; posterly's version couples the spread and gap constraints into one band),
  • the on-disk measure circuit breaker (_posterly/budget.py; their .fill_budget.json — posterly counts consecutive failures and auto-resets on PASS / 12 h idle),
  • the pack column-feasibility pre-check (their static floor arithmetic; posterly instead probes the Gate A band endpoints live in the browser),
  • the edit-targets block (their EDIT TARGETS verbatim-source dump; posterly emits source line numbers + math-stripped anchors instead, since MathJax mutates the DOM),
  • the keybox two-line label reservation (their .stat-mini .lbl { min-height: 2.4em }; posterly uses 2lh so each template's own line-height is tracked).

Vendored third-party runtime: MathJax

assets/mathjax/tex-svg.js is the unmodified MathJax 3.2.2 single-file SVG bundle (https://www.mathjax.org/, Apache-2.0 — license text at assets/mathjax/LICENSE, version pin at assets/mathjax/VERSION). The check tools' renderer intercepts the templates' MathJax CDN request and serves this bundle (_posterly/render.py route_mathjax_local), so the measurement gates typeset math deterministically offline. Vendoring an Apache-2.0 file into this AGPL-3.0 project is license-compatible; the file remains individually available under Apache-2.0. (Mechanism ported from ResearchStudio paper2poster's offline-math routing, re-implemented here; the MathJax bundle itself is upstream MathJax's build, not theirs.)

Upstream-sync rule

When pulling new ARIS releases of these tools, preserve the vendor boundary: re-vendor the body-unmodified .py files (style_check.py, asset_check.py, extract_pdf_figures.py, preprocess_figures.py) as drop-in replacements (re-prepend the provenance header), and re-apply the documented COMPONENTS.md + template adaptations. run_gates.py is not a drop-in: re-apply posterly's asset-opt-in / no-silent-false-pass patch on top of the new upstream version. Do not fold posterly-specific logic into the body-unmodified files, so the ARIS diff stays clean and re-syncable.

Xet Storage Details

Size:
8.08 kB
·
Xet hash:
6c71ebcca81800f4caba43a40f46c8fb7998e2829e3a1d09a1534d39c53678f1

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.