48 Commits
Author SHA1 Message Date
tt-a1iandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> aa9a27eeb7 fix(viewer): cap a narrow SVG to its share beside a docked rail
The narrow-diagram cap was computed from a reader width that already
includes the docked rail and its gap, so moving the notes beside a narrow,
tall diagram gave the SVG another 308px and doubled its scale. The cap now
subtracts the docked rail's share; the shell keeps its desktop floor.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-28 09:15:24 +08:00
tt-a1iandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> cf326adcbf fix(viewer): keep relationship labels at the 6px floor in a first-screen fit
Dropping the primary-label floor let a narrow, tall architecture with titles
only shrink until its 8px relationship labels projected to 5.45px, failing
the browser readability gate. The reader's minimum scale now counts context
relationship labels in every layout: declared wide readers hold them to the
requested floor as before, and all other readers to the 6px hard floor.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-27 23:34:53 +08:00
tt-a1iandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> 5f39beac52 fix(viewer): keep a desktop reader shell around narrow tall diagrams
Fitting a narrow, tall diagram to the first screen shrank the whole page
shell to the SVG width, so the title wrapped under the toolbar and the zoom
controls clipped. The shell now keeps the desktop reader floor and the SVG
is centred at its fitted width.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-27 23:24:11 +08:00
tt-a1iandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> dfc84483c7 fix(viewer): fit the whole diagram on the first screen with notes below
With summary notes below the diagram, the adaptive reader held primary
labels at 12px, so a tall architecture overflowed a 14-inch laptop screen
(OpenPI: 947px diagram in a 711px budget) and the reader could not see it
whole. The first screen now fits the complete diagram and its controls down
to the renderer's declared readable text floor; zoom restores detail, and
only a graph taller than that floor allows still scrolls.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-27 23:09:26 +08:00
tt-a1iandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> e1eab5c8da feat(lifecycle): schema v2 grid layout, UML state marks, and readable source badges
Lifecycle diagrams generated from real repositories looked tangled: lower
bands used a column grid offset from the main rail, fixed 36px gaps could not
hold reciprocal transitions or labels, the implied rail doubled authored main
transitions, and the runtime source badge sat on the lifecycle sigil.

Schema v2 renders one row per lane on a shared column grid with a dedicated
orthogonal router, adaptive gaps, and vertical row headers. Start and final
states get UML marks explained by the legend, decision no longer shares the
failure color, and label layout reserves the source badge. Schema v1 keeps
its exact state geometry.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-27 12:51:54 +08:00
tt-a1iandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> c93d16485a feat(viewer): notes below the diagram by default, first screen for the diagram
The right rail hid below-the-fold content on laptops and its index was
clipped to the diagram height. Notes now default below the diagram and
the right rail is an opt-in that the reader remembers.

- Bottom: cards keep one full-width row; the node index is one panel whose
  groups flow into columns, with the placement toggle in its header.
- The first screen is budgeted for the diagram and its controls only; in
  bottom mode primary labels may drop to the rail's 12px floor to fit, and
  taller graphs still scroll.
- The navigation dock lifts to the viewport floor while the stage runs
  below it; stage-rail decisions and receipts use its resting position.
- Right rail: runs past a short diagram down to the viewport floor instead
  of scrolling its index inside the diagram's height.
- visual-check excludes bottom notes from the one-screen fit and measures
  the dock at rest, matching the Reader; tests follow the new rules.
- Fix a README test still expecting the removed #view=dispatch-path link.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-26 00:01:24 +08:00
sunsunsun 3ed5eec06f fix(viewer): restore outline focus after route selection ends
Use the live Route phase to distinguish a refused endpoint from a stale
Finder context. Completed and cleared routes now allow outline focus;
active source/target picking still preserves refused selections. Extend
the Finder browser regression to cover both completed and cleared routes.

Update the MCO README proof assertions to require supported presentation
and reach links instead of the retired chapter URL, fixing the CI failure.
Regenerate Viewer artifacts, gallery digests, the delta receipt and ZIP.
Reuse the unchanged README GIF with its original capture hashes/revision
and an explicit source-equivalence rationale in the receipt.

Validation: the old outline failed four result/idle cases; all eight
source/target/context combinations pass after the fix. The old README
assertion failed and the corrected proof test passes. Local npm test had
2232 passes, 83 skips, and one stale GIF-receipt failure; after updating
that receipt, the affected suites pass (11 passed, one optional MCO skip).
ZIP rebuild bytes match. Browser regressions run in PR CI.

Ablation: removed the redundant Finder-history guard after verifying that
live Route phase alone preserves the acceptance cases. No new abstraction.
2026-09-25 20:20:52 +08:00
tt-a1iandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> 397b28a4cf fix(viewer): address PR #566 review findings
- Node index: a Route pick the Finder refuses no longer falls back to
  focus, which cleared the active Route.
- Schemas keep accepting retired meta.views (ignored) so existing
  schema 1/2 files still validate, per the 2.x compatibility contract.
- Rail comfort check measures node label sizes directly, so the 12px
  default-collapse rule covers all five diagram types.
- Rail choices live in memory first; blocked localStorage no longer
  freezes collapse/expand/placement.
- Escape-collapsing the overlay rail returns focus to the reveal control.
- Oversized raster exports downscale below 1x instead of allocating a
  canvas over the pixel cap.
- README and Gallery drop removed chapter-playback links and copy;
  README demo captures and live-proof GIF re-recorded on the new shell.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-25 19:05:46 +08:00
tt-a1iandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> fca0dc2f91 feat(viewer)!: refined reader shell, Viewer-style figures, and no guided views
UI/UX only, re-cut from dev so no renderer or authoring-rule changes ride
along (those made diagrams noisier in real use and were dropped).

- Reader shell: system UI type, grouped toolbar that scrolls with the page,
  refined style/export menus and navigation dock (Guide on "?", Map only
  when zoomed), plain-language Path copy and compact picking panel.
- Summary rail with node index for every diagram: right by default,
  collapsible, movable to the bottom, remembered per browser, and
  collapsed when docking would shrink primary text below 12px.
- Raster exports reproduce the Viewer page without controls (title row,
  canvas card, margins); background now covers non-zero viewBox origins.
- Canvas keeps dev's diagram colors and strokes; classic adds only a quiet
  dot field and lifted nodes.
- Remove guided views and story playback (breaking): meta.views is no
  longer accepted and fails with "remove unsupported property views".
- Skill: each diagram request goes into .archify/<type>-<slug>-<timestamp>/.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-25 17:20:44 +08:00
tt-a1i 5c9736e94c Merge dev and rebuild the skill archive 2026-09-22 23:33:24 +08:00
tt-a1i 564c2e5293 Merge remote-tracking branch 'origin/main' into codex/dev-stability-repair-20260922
# Conflicts:
#	.github/workflows/ci.yml
#	README.md
#	README_EN.md
#	README_ZH.md
#	archify/test/release-package-gates.test.mjs
2026-09-22 20:22:37 +08:00
tt-a1i ffd68ef220 feat(check): predict fixed-width viewport overflow before the browser gate
A canvas whose viewBox ratio is below the 1.55 wide threshold and that
declares no intrinsic-height fit renders at the full reader width, so its
1440x900 page height is a function of the viewBox alone: 1346px wide SVG
plus 126px of fixed chrome (187px with guided views). Such a candidate
passes validate, deliver and check and only fails at visual-check, after
the author has spent the whole delivery round; both maintainer replays of
a year-long holiday timeline lost most of their time exactly here.

Compute that height in the shared checker and report it as
composition/viewport-height with the maximum viewBox height at the current
width, the minimum width at the current height, and the architecture
escape hatch (omit meta.viewBox). The prediction matches Chrome to the
pixel on the three gallery artifacts that fail visual-check today
(972/1683/934px SVG). It is a warning in every profile for now, as
CONTRIBUTING asks of a new rule, so existing artifacts and the gallery
build keep passing while showcase authors see the non-zero warning count.

Regenerate examples, gallery, showcase, compare artifact, MCO case and
archify.zip for the settled reader template; the synthetic checker
fixtures use a 240x154 canvas so the new rule stays out of unrelated
composition tests.
2026-09-22 17:38:10 +08:00
tt-a1i 83d10786af build: regenerate examples, gallery, showcase, and skill archive
Re-render the checked-in examples and gallery artifacts from the combined
renderer and viewer source, rebuild the Checkout compare artifact and the
MCO case/showcase against their pinned repository, and rebuild archify.zip
with Node 22. The Chrome pipe transport test now derives the first-command
timeout from CHROME_STARTUP_TIMEOUT_MS instead of the former 15s literal.
2026-09-22 16:03:46 +08:00
tt-a1i 4694462a8d docs: refresh README branding and interactive community showcase (#491)
* docs: refresh README presentation and community stories

* docs: remove Claude upload screenshot from README

* docs: use standalone Archify logo in README header

* docs: feature historical GitHub weekly trending milestone

* docs: move language switcher into README navigation

* docs: place ranking cards ahead of status and community badges

* docs: use official Trendshift weekly and daily badges

* docs: highlight extensibility through community creations

* docs: introduce horizontal vector Archify wordmark

* docs: link community CityWalk screenshot to interactive HTML

* docs: add visible interactive CTA beside CityWalk preview

* docs: remove HelloGitHub mention from README

* docs: preserve explicit development release identity

* docs: retain explicit supported agent onboarding
2026-09-20 22:10:47 +08:00
tt-a1i 08cad09adf docs(showcase): refresh Astron evidence with combined dev Viewer 2026-09-17 03:28:26 +08:00
tt-a1i 62b1a4a84a docs(showcase): integrate Astron case with dev and refresh exact artifact evidence 2026-09-17 03:27:54 +08:00
bb71ccdd64 refactor(viewer): modularize source while preserving standalone HTML (#381)
* refactor(viewer): extract Reader Layout source (#343)

* refactor(viewer): isolate SVG export cleanup (#343)

* refactor(viewer): extract Chrome Layout source (#343)

* refactor(viewer): extract Camera source (#343)

* test(viewer): stabilize camera observations and cancellation checks

* refactor(viewer): extract Semantic Radar source (#343)

* test(viewer): cover Radar viewport and activity synchronization

* refactor(viewer): extract Motion Governor source (#343)

* refactor(viewer): extract Node Finder source (#343)

* refactor(viewer): extract Intent Trace source (#343)

* refactor(viewer): extract Semantic Lens source (#343)

* refactor(viewer): extract Route Probe source (#343)

* refactor(viewer): extract Guided Views source (#343)

* fix(viewer): keep selected chapters and story stops in view

* refactor(viewer): extract Focus and shared flow tokens source

* refactor(viewer): extract complete export module with owned cleanup

* test(viewer): enforce synchronous clipboard construction

* test(viewer): establish mouse capabilities after browser navigation

* test(viewer): configure desktop pointer capabilities in browser fixtures

* test(viewer): verify desktop input and stabilize native clicks

* test(viewer): verify motion reload identity and bound browser concurrency

* test(viewer): diagnose native Linux storage without viewer scripts

* test(viewer): trace startup injection identity in isolated Linux motion check

* test(viewer): scope motion fixture injection to its navigation

---------

Co-authored-by: tt-a1i <53142663+tt-a1i@users.noreply.github.com>
Co-authored-by: tt-a1i <2801884530@qq.com>
2026-09-11 10:56:57 +08:00
10722002bb fix(viewer): embed the viewer font so delivered pages stay self-contained (#256)
* fix(viewer): embed the viewer font so delivered pages stay self-contained

A delivered page linked fonts.googleapis.com and fonts.gstatic.com, so every
viewer's browser reached a third party to render the artifact as designed.

The consequence is larger than the reported typography loss. The adaptive
reader measures real font metrics rather than assuming them, so the resolved
column width depends on that request succeeding: the same file resolves a
960px reader column with the face loaded and 987px without it, and the diagram
repaints at the matching scale. Both states report readability: pass, so
nothing flags it. The producer sees one page and the receiver sees another.

Embed the woff2 subsets Google Fonts serves for JetBrains Mono as data: URIs,
one @font-face per unicode range over the variable wght 400-800 axis. The
bytes are identical to what the linked stylesheet resolved to, so typography
and geometry are unchanged and now reproducible offline. No local() source is
declared first on purpose: resolving an installed copy of unknown version puts
the metrics, and so the column width, back at the mercy of the viewer's
machine. The template comment publishes a sha256 per subset and a test
enforces that those digests match what ships.

Add test/offline-self-containment.test.mjs. It selects artifacts by the
presence of Archify.readerLayout rather than a generator meta match, because
readerLayout is the code that measures font metrics: the compare artifact
carries no generator meta yet is delivered like any other page, while the
site pages declare one and link a stylesheet on purpose. Each artifact is
scanned both as-is and with entities decoded, since compare embeds each side
as an escaped srcdoc whose subresources would otherwise read as clean. Both
artifact cases assert the six faces are present, because reaching no third
party by dropping the typography satisfies the offline check and still hands
the receiver a different page.

JetBrains Mono is under the SIL Open Font License 1.1; the notice and full
license text ship at assets/JetBrainsMono-OFL.txt rather than in the template
comment, so a grep over a delivered page reports zero external hosts.

Closes #242

* fix(viewer): share offline font bytes across delivery and exports

* chore: retrigger stalled PR update processing

* build: preserve showcase quality for the checkout comparison

* fix(packaging): check embedded fonts across the staged payload

---------

Co-authored-by: sunsunsun <fromzerobegin@gmail.com>
Co-authored-by: tt-a1i <2801884530@qq.com>
2026-09-08 19:41:35 +08:00
tt-a1i 06dd052602 fix: ship third-party mark notices (#267)
* fix: ship third-party mark notices

* fix: enforce complete third-party notices
2026-09-02 09:24:50 +08:00
tt-a1i 7a16d30322 fix: preserve license provenance in distributions (#265)
* fix: preserve license provenance in distributions

* docs: keep upstream attribution in license

* chore(release): advance license fix to development

* chore: refresh pull request checks
2026-09-01 22:50:23 +08:00
tt-a1i d57d1627d7 chore: prepare v2.16.0 release 2026-08-30 17:14:24 +08:00
FenjuFu 37d0ef0e98 docs(showcase): bind Astron visual evidence to canonical artifact
Signed-off-by: FenjuFu <92919259+FenjuFu@users.noreply.github.com>
2026-08-30 14:57:43 +08:00
FenjuFu 1a67c1a675 docs(showcase): add verified Astron Agent runtime map
Signed-off-by: FenjuFu <92919259+FenjuFu@users.noreply.github.com>
2026-08-29 19:25:35 +08:00
Friend A 7fe139ebe2 fix(viewer): keep navigation dock clear of diagram stage (#113)
* fix(viewer): keep navigation dock clear of stage

* fix(viewer): clip camera content to protected stage

* fix(viewer): keep dock clear during camera transitions

* test(webm): ignore transient viewer clip in live snapshots
2026-08-28 11:16:05 +08:00
Friend A 8323a15adb fix(svg): emit XML-safe marker attributes (#114) 2026-08-26 18:00:59 +08:00
sunsunsun-java 4be6da578b feat(i18n): localize Viewer UI from meta.locale (#108)
* feat(i18n): localize viewer content by locale

* fix(i18n): address review feedback for #106
2026-08-26 11:32:22 +08:00
sunsunsun-java 98648ce928 fix(renderers): keep automatic routes clear and boundary composition readable (#96)
* fix(renderers): prevent routes from overlapping node borders

* fix(architecture): enforce readable boundary composition

* fix(renderers): preserve routing and layout compatibility

* fix(renderers): close review readability gaps

Include stable reader settling, projected boundary-title checks, delta mask z-ordering, and authored lifecycle-via compatibility. Refresh affected generated artifacts and regression coverage.

* chore(examples): drop Maka artifact refresh

* fix(visual-check): harden Chrome CI launch
2026-08-21 14:30:47 +08:00
UNGETSU 82e63c9ec3 fix(viewer): preserve authored direction in Intent Trace (#90)
Preserve authored source-to-target direction for incoming Intent Trace animation and add cross-renderer regression coverage.
2026-08-19 15:28:26 +08:00
tt-a1i e1ac748f19 Release v2.15.0 (#86)
* chore: release v2.15.0

* fix(dsh): allow intentional Archify core releases
2026-08-17 23:47:12 +08:00
tt-a1i eb2ef3d50b release: v2.14.0 2026-08-11 23:34:23 +08:00
tt-a1i 8b6ec99e1b polish: reduce diagram view dock 2026-08-11 22:11:48 +08:00
tt-a1i 2d723744da polish: compact diagram view controls 2026-08-11 12:33:03 +08:00
tt-a1i 4f014fc096 fix: adapt wide diagrams to viewport height 2026-08-10 20:13:42 +08:00
tt-a1i 8338120ab2 Merge remote-tracking branch 'origin/main' into codex/viewer-polish-snapshot
# Conflicts:
#	archify.zip
#	archify/renderers/architecture/render-architecture.mjs
#	archify/renderers/dataflow/render-dataflow.mjs
#	archify/renderers/lifecycle/render-lifecycle.mjs
#	archify/renderers/sequence/render-sequence.mjs
#	archify/renderers/shared/text-fit.mjs
#	archify/renderers/workflow/render-workflow.mjs
#	archify/test/layout-rules.test.mjs
#	docs/gallery.html
#	docs/gallery/manifest.json
2026-08-10 19:59:23 +08:00
tt-a1i 5df5b8e324 feat: polish diagram authoring and viewer
Refine text fitting, routing, localized authoring defaults, toolbar and export controls, first-screen layout, and regenerated examples and gallery artifacts.
2026-08-10 19:48:25 +08:00
tt-a1i 2c1f8ac2ca release: v2.13.0 (#55) 2026-08-03 10:30:32 +08:00
tt-a1i cc5576451a feat: add truthful configurable legends (#54)
Closes #52.
2026-08-02 23:13:27 +08:00
tt-a1i a097c2d63e fix: harden output and release stability (#53)
* [verified] Harden output and release stability

* docs: align Node support guidance

* test: make opener fixture Node 18 compatible
2026-08-02 17:38:05 +08:00
tt-a1i 3b5035f947 fix: harden diagram authoring and delivery 2026-07-27 21:25:24 +08:00
tt-a1i 733fb165d7 feat: establish evidence-backed growth loops 2026-07-26 09:55:03 +08:00
tt-a1i eb847fa65a feat: add direct visual style picker 2026-07-24 00:16:29 +08:00
tt-a1i b744b0b43e feat: add editorial visual preset 2026-07-23 23:39:30 +08:00
tt-a1i dee7089ca2 fix: make semantic passport dismissible 2026-07-23 15:13:09 +08:00
tt-a1i 13d58c406d feat: add authored reach share cards 2026-07-23 11:20:34 +08:00
tt-a1i 95dd518d5b feat: add authored reachability exploration 2026-07-23 10:50:26 +08:00
tt-a1i 0c4647abb4 feat: surface verified source evidence 2026-07-23 08:49:55 +08:00
tt-a1i 00dcad0d51 feat: add verified repository evidence 2026-07-23 08:18:21 +08:00
tt-a1i 324c0c063b release: prepare v2.12.0 2026-07-23 00:45:08 +08:00