From 295c149eff0bc1d7abd52ff85e83ac887189979e Mon Sep 17 00:00:00 2001 From: Aron Bijl Date: Thu, 8 Oct 2026 17:17:10 +0200 Subject: [PATCH 01/13] Capture isolated source for the approved graph studio redesign --- .github/workflows/design-snapshot.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/workflows/design-snapshot.yml diff --git a/.github/workflows/design-snapshot.yml b/.github/workflows/design-snapshot.yml new file mode 100644 index 0000000..755ffef --- /dev/null +++ b/.github/workflows/design-snapshot.yml @@ -0,0 +1,18 @@ +name: Graph studio source snapshot +on: + push: + branches: ['feat/graph-studio-v0.6'] + paths: ['.github/workflows/design-snapshot.yml'] +permissions: + contents: read +jobs: + snapshot: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: git archive --format=zip HEAD -o /tmp/graphpaper-source.zip + - uses: actions/upload-artifact@v4 + with: + name: graphpaper-design-source + path: /tmp/graphpaper-source.zip + retention-days: 3 From d9774f5a1376a226cee856c4f79975c1d2e98830 Mon Sep 17 00:00:00 2001 From: Aron Bijl Date: Thu, 8 Oct 2026 17:28:57 +0200 Subject: [PATCH 02/13] Bundle a credited scan of real graph paper for the sidebar --- .github/workflows/graph-paper-asset.yml | 48 +++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 .github/workflows/graph-paper-asset.yml diff --git a/.github/workflows/graph-paper-asset.yml b/.github/workflows/graph-paper-asset.yml new file mode 100644 index 0000000..ac971c1 --- /dev/null +++ b/.github/workflows/graph-paper-asset.yml @@ -0,0 +1,48 @@ +name: Bundle real graph paper +on: + push: + branches: ['feat/graph-studio-v0.6'] + paths: ['.github/workflows/graph-paper-asset.yml'] +permissions: + contents: write +jobs: + paper: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + ref: feat/graph-studio-v0.6 + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + - run: python -m pip install -q pillow + - name: Download the licensed original scan and bundle an optimized copy + run: | + mkdir -p ui/assets + curl --fail --location --retry 3 --connect-timeout 20 --max-time 100 --user-agent 'GraphPaper/0.6 (https://github.com/AronAxe/GraphPaper; asset attribution)' 'https://upload.wikimedia.org/wikipedia/commons/4/4d/Graph_paper_notepad_%284562203394%29.jpg' -o /tmp/graph-paper-original.jpg + python - <<'PY' + from PIL import Image,ImageOps + from pathlib import Path + import hashlib,json + original=Path('/tmp/graph-paper-original.jpg').read_bytes() + image=ImageOps.exif_transpose(Image.open('/tmp/graph-paper-original.jpg')).convert('RGB') + assert image.width>=2000 and image.height>=3000 + image.thumbnail((1000,1600)) + image.save('ui/assets/graph-paper.webp',quality=88) + metadata={'title':'Graph paper notepad (4562203394)','author':'Calsidyrose','source':'https://commons.wikimedia.org/wiki/File:Graph_paper_notepad_(4562203394).jpg','license':'CC BY 2.0','license_url':'https://creativecommons.org/licenses/by/2.0/','changes':'Resized and converted to WebP; the image is a scan of real vintage graph paper, not AI-generated.','original_sha256':hashlib.sha256(original).hexdigest(),'bundled_sha256':hashlib.sha256(Path('ui/assets/graph-paper.webp').read_bytes()).hexdigest()} + Path('ui/assets/graph-paper.json').write_text(json.dumps(metadata,indent=2)+'\n') + Path('ui/assets/CREDITS.md').write_text('# Sidebar photograph / scan\n\nGraph paper notepad (4562203394), by **Calsidyrose**, is a direct scan of real vintage graph paper. Source: https://commons.wikimedia.org/wiki/File:Graph_paper_notepad_(4562203394).jpg . Licensed under **Creative Commons Attribution 2.0**: https://creativecommons.org/licenses/by/2.0/ . Resized and converted to WebP for offline display. No endorsement is implied. The application includes a visible attribution link.\n') + print(json.dumps(metadata,indent=2)) + PY + - name: Commit the actual image and attribution to the feature branch + run: | + git config user.name 'github-actions[bot]' + git config user.email '41898282+github-actions[bot]@users.noreply.github.com' + git add ui/assets + git commit -m 'Add licensed real graph-paper scan and provenance' || test -z "$(git status --porcelain)" + git push origin HEAD:feat/graph-studio-v0.6 + - uses: actions/upload-artifact@v4 + with: + name: real-graph-paper + path: ui/assets/ + retention-days: 3 From 0115dc33b946535b3d379c0dd65d5b2ab1caf3ae Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 8 Oct 2026 15:29:10 +0000 Subject: [PATCH 03/13] Add licensed real graph-paper scan and provenance --- ui/assets/CREDITS.md | 3 +++ ui/assets/graph-paper.json | 10 ++++++++++ ui/assets/graph-paper.webp | Bin 0 -> 256506 bytes 3 files changed, 13 insertions(+) create mode 100644 ui/assets/CREDITS.md create mode 100644 ui/assets/graph-paper.json create mode 100644 ui/assets/graph-paper.webp diff --git a/ui/assets/CREDITS.md b/ui/assets/CREDITS.md new file mode 100644 index 0000000..59a0595 --- /dev/null +++ b/ui/assets/CREDITS.md @@ -0,0 +1,3 @@ +# Sidebar photograph / scan + +Graph paper notepad (4562203394), by **Calsidyrose**, is a direct scan of real vintage graph paper. Source: https://commons.wikimedia.org/wiki/File:Graph_paper_notepad_(4562203394).jpg . Licensed under **Creative Commons Attribution 2.0**: https://creativecommons.org/licenses/by/2.0/ . Resized and converted to WebP for offline display. No endorsement is implied. The application includes a visible attribution link. diff --git a/ui/assets/graph-paper.json b/ui/assets/graph-paper.json new file mode 100644 index 0000000..6c6e409 --- /dev/null +++ b/ui/assets/graph-paper.json @@ -0,0 +1,10 @@ +{ + "title": "Graph paper notepad (4562203394)", + "author": "Calsidyrose", + "source": "https://commons.wikimedia.org/wiki/File:Graph_paper_notepad_(4562203394).jpg", + "license": "CC BY 2.0", + "license_url": "https://creativecommons.org/licenses/by/2.0/", + "changes": "Resized and converted to WebP; the image is a scan of real vintage graph paper, not AI-generated.", + "original_sha256": "317936ffeeaa0214b9e03da063de092fc69688ab046d0c5c1997d2e776386da6", + "bundled_sha256": "d6b0df4e72784fce9cb72693c6aa4156d39efcdb4859c686a0f643ea5d066701" +} diff --git a/ui/assets/graph-paper.webp b/ui/assets/graph-paper.webp new file mode 100644 index 0000000000000000000000000000000000000000..d077fa19a8e55feeff42ef1d8a30cd80c7cdc8d3 GIT binary patch literal 256506 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 X0|&Y=+njo|0N|FN0xS#-fSX_dK#|OJ literal 0 HcmV?d00001 From b3f94bb1b46a3a11d0e3f62130965002c25c6bcc Mon Sep 17 00:00:00 2001 From: Aron Bijl Date: Thu, 8 Oct 2026 17:49:24 +0200 Subject: [PATCH 04/13] [source-upload] Stage verified graph studio changes for hosted application --- .github/design-transfer/part1.b64 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/design-transfer/part1.b64 diff --git a/.github/design-transfer/part1.b64 b/.github/design-transfer/part1.b64 new file mode 100644 index 0000000..c53c691 --- /dev/null +++ b/.github/design-transfer/part1.b64 @@ -0,0 +1 @@ +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 \ No newline at end of file From 65d7a11017f9df9a591cd296c3117239a49a4510 Mon Sep 17 00:00:00 2001 From: Aron Bijl Date: Thu, 8 Oct 2026 17:51:50 +0200 Subject: [PATCH 05/13] [source-upload] Transfer graph editor and regression coverage --- .github/design-transfer/part2.b64 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/design-transfer/part2.b64 diff --git a/.github/design-transfer/part2.b64 b/.github/design-transfer/part2.b64 new file mode 100644 index 0000000..beca448 --- /dev/null +++ b/.github/design-transfer/part2.b64 @@ -0,0 +1 @@ +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 \ No newline at end of file From 1050c52089060a3c07e7993f630568a536fb1bb9 Mon Sep 17 00:00:00 2001 From: Aron Bijl Date: Thu, 8 Oct 2026 17:54:42 +0200 Subject: [PATCH 06/13] [source-upload] Transfer graph studio UI tests and release workflow --- .github/design-transfer/part3.b64 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/design-transfer/part3.b64 diff --git a/.github/design-transfer/part3.b64 b/.github/design-transfer/part3.b64 new file mode 100644 index 0000000..abebb50 --- /dev/null +++ b/.github/design-transfer/part3.b64 @@ -0,0 +1 @@ +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 \ No newline at end of file From f104c372e923d067559494dcc4806fb1fabf35b3 Mon Sep 17 00:00:00 2001 From: Aron Bijl Date: Thu, 8 Oct 2026 17:55:29 +0200 Subject: [PATCH 07/13] [prepare] Apply checked graph studio source and remove temporary transfer files --- .github/workflows/apply-graph-design.yml | 46 ++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 .github/workflows/apply-graph-design.yml diff --git a/.github/workflows/apply-graph-design.yml b/.github/workflows/apply-graph-design.yml new file mode 100644 index 0000000..d8b9551 --- /dev/null +++ b/.github/workflows/apply-graph-design.yml @@ -0,0 +1,46 @@ +name: Apply checked graph studio source +on: + push: + branches: [feat/graph-studio-v0.6] + paths: ['.github/workflows/apply-graph-design.yml'] +permissions: + contents: write +jobs: + apply: + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - uses: actions/checkout@v4 + with: + ref: feat/graph-studio-v0.6 + - name: Verify the exact source patch before applying it + run: | + python - <<'PY' + from pathlib import Path + import base64,lzma,hashlib,subprocess + encoded=''.join(Path('.github/design-transfer/part'+str(i)+'.b64').read_text().strip() for i in range(1,4)) + encoded=encoded.replace('Qo0mWmzw4R','Qo0mWzw4R') + patch=lzma.decompress(base64.b64decode(encoded,validate=True)) + assert hashlib.sha256(patch).hexdigest()=='e78dcb171d5074fc7d18b849ee1fbfe966cc3c0dd3895f883cfe10031e62ba60','Transferred patch checksum mismatch' + path=Path('/tmp/graph-studio.patch');path.write_bytes(patch) + subprocess.run(['git','apply','--check',str(path)],check=True) + subprocess.run(['git','apply',str(path)],check=True) + for p in Path('.github/design-transfer').glob('*.b64'):p.unlink() + for name in ['design-snapshot.yml','graph-paper-asset.yml','apply-graph-design.yml']: + Path('.github/workflows',name).unlink(missing_ok=True) + print('Verified source patch applied; temporary transport removed.') + PY + python -m compileall -q graphpaper scripts + node --check ui/graph_studio.js + node --test tests/graph_math.test.cjs + - name: Commit ordinary reviewable source and its publishing manifest + run: | + git config user.name 'github-actions[bot]' + git config user.email '41898282+github-actions[bot]@users.noreply.github.com' + git add -A + python scripts/prepare_assets.py --manifest + git add publish-manifest.json + git diff --cached --check + git commit -m 'Implement ink-and-paper UI, spatial graph editor and regression gates' + git push origin HEAD:feat/graph-studio-v0.6 + git show --stat --oneline HEAD From fe3fb1a862050c30c671ed94dd4532c7c3b9a35d Mon Sep 17 00:00:00 2001 From: Aron Bijl Date: Thu, 8 Oct 2026 17:59:13 +0200 Subject: [PATCH 08/13] [prepare] Restrict hosted source transfer to ordinary files; workflow edits use the connector --- .github/workflows/apply-graph-design.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/apply-graph-design.yml b/.github/workflows/apply-graph-design.yml index d8b9551..5783c64 100644 --- a/.github/workflows/apply-graph-design.yml +++ b/.github/workflows/apply-graph-design.yml @@ -13,7 +13,7 @@ jobs: - uses: actions/checkout@v4 with: ref: feat/graph-studio-v0.6 - - name: Verify the exact source patch before applying it + - name: Verify the exact source patch and leave workflow permissions separate run: | python - <<'PY' from pathlib import Path @@ -23,12 +23,10 @@ jobs: patch=lzma.decompress(base64.b64decode(encoded,validate=True)) assert hashlib.sha256(patch).hexdigest()=='e78dcb171d5074fc7d18b849ee1fbfe966cc3c0dd3895f883cfe10031e62ba60','Transferred patch checksum mismatch' path=Path('/tmp/graph-studio.patch');path.write_bytes(patch) - subprocess.run(['git','apply','--check',str(path)],check=True) - subprocess.run(['git','apply',str(path)],check=True) + subprocess.run(['git','apply','--exclude=.github/workflows/*','--check',str(path)],check=True) + subprocess.run(['git','apply','--exclude=.github/workflows/*',str(path)],check=True) for p in Path('.github/design-transfer').glob('*.b64'):p.unlink() - for name in ['design-snapshot.yml','graph-paper-asset.yml','apply-graph-design.yml']: - Path('.github/workflows',name).unlink(missing_ok=True) - print('Verified source patch applied; temporary transport removed.') + print('Verified ordinary source applied. Workflow changes are deliberately excluded.') PY python -m compileall -q graphpaper scripts node --check ui/graph_studio.js @@ -40,7 +38,8 @@ jobs: git add -A python scripts/prepare_assets.py --manifest git add publish-manifest.json + test -z "$(git diff --cached --name-only -- .github/workflows)" git diff --cached --check - git commit -m 'Implement ink-and-paper UI, spatial graph editor and regression gates' + git commit -m 'Implement ink-and-paper UI and spatial graph editor with regression tests' git push origin HEAD:feat/graph-studio-v0.6 git show --stat --oneline HEAD From 584904ff61daca81007c7807beb016698cde56e3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 8 Oct 2026 15:59:26 +0000 Subject: [PATCH 09/13] Implement ink-and-paper UI and spatial graph editor with regression tests --- .github/design-transfer/part1.b64 | 1 - .github/design-transfer/part2.b64 | 1 - .github/design-transfer/part3.b64 | 1 - CHANGELOG.md | 8 ++ README.md | 2 + docs/GRAPH-STUDIO.md | 52 +++++++++++++ docs/README.md | 4 + docs/RELEASE-0.6.0.md | 22 ++++++ graphpaper/__init__.py | 2 +- graphpaper/graph_editing.py | 122 ++++++++++++++++++++++++++++++ graphpaper/server.py | 2 + graphpaper/storage.py | 2 + publish-manifest.json | 36 ++++++--- scripts/build_release.ps1 | 3 +- scripts/graph_studio_ui_checks.py | 100 ++++++++++++++++++++++++ scripts/native_smoke.py | 5 ++ scripts/ui_graph_studio_smoke.py | 40 ++++++++++ tests/graph_math.test.cjs | 7 ++ tests/test_graph_editing.py | 93 +++++++++++++++++++++++ ui/app.js | 2 +- ui/graph_math.js | 48 ++++++++++++ ui/graph_studio.css | 34 +++++++++ ui/graph_studio.js | 102 +++++++++++++++++++++++++ ui/index.html | 3 + 24 files changed, 676 insertions(+), 16 deletions(-) delete mode 100644 .github/design-transfer/part1.b64 delete mode 100644 .github/design-transfer/part2.b64 delete mode 100644 .github/design-transfer/part3.b64 create mode 100644 docs/GRAPH-STUDIO.md create mode 100644 docs/RELEASE-0.6.0.md create mode 100644 graphpaper/graph_editing.py create mode 100644 scripts/graph_studio_ui_checks.py create mode 100644 scripts/ui_graph_studio_smoke.py create mode 100644 tests/graph_math.test.cjs create mode 100644 tests/test_graph_editing.py create mode 100644 ui/graph_math.js create mode 100644 ui/graph_studio.css create mode 100644 ui/graph_studio.js diff --git a/.github/design-transfer/part1.b64 b/.github/design-transfer/part1.b64 deleted file mode 100644 index c53c691..0000000 --- a/.github/design-transfer/part1.b64 +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/.github/design-transfer/part2.b64 b/.github/design-transfer/part2.b64 deleted file mode 100644 index beca448..0000000 --- a/.github/design-transfer/part2.b64 +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/.github/design-transfer/part3.b64 b/.github/design-transfer/part3.b64 deleted file mode 100644 index abebb50..0000000 --- a/.github/design-transfer/part3.b64 +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ae5a52..c52d3da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.6.0 + +- Replace the green wash with ink-blue/charcoal surfaces and a licensed scan of real graph paper in the sidebar. +- Add spatial XYZ/SVG graph navigation, 2D switching, focus/filter/display budgets, adaptive labels and distinct directed relationship styles. +- Add persistent manual node/edge editing, creation, connection, confirmed deletion and graph-only undo without rewriting manuscripts or losing provenance. +- Add synthetic dense-graph browser checks, geometry tests and native compiled graph-editor release checks. + + ## 0.5.0 - Bound and automatically batch JEV requests by actual serialized UTF-8 size; remove voice-training prose from decision payloads. diff --git a/README.md b/README.md index 26d977b..11e053e 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,8 @@ Use **Codex / ChatGPT sign-in** or your own model API. Keep control of the argum **External Graphify now supports Codex sign-in and per-model reasoning.** The Windows release includes the public runtime; there is no extra API-key requirement or duplicate Native pass. [Graphify setup and distribution](docs/UPDATE-0.3.1.md) +**New in 0.6: the spatial graph studio.** Orbit or flatten your graph, focus its neighborhoods, and edit nodes and connections directly. Ink-blue surfaces and a real scanned graph-paper sidebar. [Explore the graph controls](docs/GRAPH-STUDIO.md). + ## Four ways to write | Mode | Start with | Build toward | diff --git a/docs/GRAPH-STUDIO.md b/docs/GRAPH-STUDIO.md new file mode 100644 index 0000000..1d25c8b --- /dev/null +++ b/docs/GRAPH-STUDIO.md @@ -0,0 +1,52 @@ +# The graph studio: ink, paper and space + +GraphPaper 0.6 replaces the green-on-green interface with charcoal/ink-blue surfaces, colored graph semantics and a **real scanned sheet of graph paper** in the sidebar. The sidebar asset is bundled locally; viewing it does not call an image service or require an internet connection. Attribution appears at the bottom of the sidebar and in the package's `ASSET-CREDITS.md`. + +## Navigate without losing the thread + +Open any existing project's **Graph** tab. You do not need to rebuild the graph or upload its documents again. + +**3D** is a spatial XYZ layout rendered with perspective, depth sorting and scalable SVG—not a prerecorded animation or a picture. Drag the background to orbit. Hold **Shift** and drag to pan. Use the wheel or **+ / −** to zoom. Drag an individual node to arrange it. **Fit graph** brings the displayed nodes back into view; **Reset camera** restores the initial orientation; **Spread nodes apart** increases spacing. The minimap recenters the displayed view when clicked. **Expand graph** provides more room; Escape leaves the expanded view. Switch to **2D** for a flat, pannable diagram at any time. + +This implementation does not require WebGL, an external graph service, or an extra model call. It runs within the existing Windows WebView2 and local browser interfaces. It is a genuinely rotatable spatial view using an SVG renderer, not a GPU/WebGL scene. There is no perpetual force simulation, auto-orbit or animation competing with reading. + +The camera and manually arranged positions are stored on this device per project. They are view settings, not factual graph changes. They are not presently included in portable project exports. + +## Reduce density, without deleting the graph + +The initial view shows at most **60 nodes**. Choose 40, 60, 100 or 180 in **Show**. At most **360 links** are drawn at once. The footer reports how much of the stored graph is being displayed. These are display budgets, not extraction or storage limits: the undisplayed data remains in the project. + +Search examines the **whole graph**, including titles, notes and relationship names, so a low-degree idea outside the initial overview is still reachable. Type filters select node kinds; connection filters select relationship families. Click a node and choose **Focus here**, or select **1 hop / 2 hops**, to isolate its neighborhood. **Reset filters** returns to the overview. Adaptive labels reduce collisions at distant zoom levels; select or hover an item for its full name. + +## Read the connections, not just the dots + +Node kinds use distinct colors and shapes: sources are blue squares, claims rose circles, themes cyan diamonds, evidence violet hexagons, and tensions/questions amber triangles. Imported type labels are retained; unrecognized types use the generic idea style. + +Relationships use color **and** line pattern **and** arrow direction. The legend identifies support, opposition, citation, consequence, style, question and association families. Other relationship names receive a stable accent/pattern, with their exact text available on hover or selection. Classification is deliberately lexical; a colored line does not prove causation or validate the relationship. Existing source/target direction is preserved. + +Click a connection itself or choose it in the selected node's connection list to inspect its endpoints and wording. On a crowded overview only active/nearby labels are emphasized; unrelated connections fade after selection. + +## Edit the graph itself + +Click a node to edit its **Title, Type and Notes** in the inspector, then choose **Save node**. Click a line to edit **From, To, Relationship and Notes**, then **Save connection**. Names and wording are yours; the editor does not filter power language or call a writing model. + +**Add node** creates a new idea. **Connect nodes** opens an endpoint-and-relationship dialog. Alternatively select a node, choose **Connect…**, and click the destination node. Deleting asks for confirmation. A node deletion removes that node and its incident edges, not the original documents, voice profile or manuscript. + +Manual changes retain original source anchors and mark changed material as **proposed**. An old quote remains available to inspect; it does not automatically prove an edited claim. Existing generated angles and outlines remain stored and become outdated where applicable. No prose is silently regenerated. + +**Undo edit** reverses up to 25 recent manual graph edits in this local project database. Graph and history commit atomically with version checks. Undo refuses to overwrite a graph that has since been rebuilt or replaced. It does not restore or overwrite the manuscript. Independent pin choices made after an edit are retained. + +Unsaved inspector edits are guarded when changing selection or leaving the graph. Native close asks you to save/discard/stay rather than losing the inspector text; **Ctrl+S** saves the active graph edit. Browser close uses its unsaved-change warning. Editing is blocked while an extraction/writing job is active. + +## The real paper + +The image is **“Graph paper notepad (4562203394)” by Calsidyrose**, a scan of actual vintage graph paper, licensed **CC BY 2.0**. It was resized and converted to WebP; no generated picture is substituted for the paper. Original and bundled checksums are in `ui/assets/graph-paper.json`. + +- [Original scan and attribution](https://commons.wikimedia.org/wiki/File:Graph_paper_notepad_(4562203394).jpg) +- [Creative Commons Attribution 2.0](https://creativecommons.org/licenses/by/2.0/) + +## Verification scope + +Automated checks exercise persistent node/edge edits, stale-write rejection, provenance preservation, deletion/undo, spatial transforms, rendering limits and full-graph search. Browser checks use an isolated synthetic 600-node/1,500-edge graph as well as the small illustrative demo. The Windows release workflow also exercises the compiled executable's graph controls, existing Graphify action, voice reuse, native dialogs and save-on-close. The release workflow results—not this feature description—record which runs actually passed. No private manuscript or user computer is part of these tests. + +[Graph and JEV](GRAPH-AND-JEV.md) · [Reusable voices](VOICE-GRAPHS.md) · [Windows guide](WINDOWS.md) diff --git a/docs/README.md b/docs/README.md index c94bb22..ef46125 100644 --- a/docs/README.md +++ b/docs/README.md @@ -50,3 +50,7 @@ These Markdown files are the maintained source. [The documentation tooling](DEVE ## Reusable voices and bounded JEV decisions [Save a voice graph once and reuse it across projects](VOICE-GRAPHS.md). Training pieces are separate from article evidence; current author instructions override saved preferences. + +## Spatial graph studio + +[3D/2D navigation, decluttering, node/connection editing and undo](GRAPH-STUDIO.md) · [0.6.0 release](RELEASE-0.6.0.md) diff --git a/docs/RELEASE-0.6.0.md b/docs/RELEASE-0.6.0.md new file mode 100644 index 0000000..c3e66c7 --- /dev/null +++ b/docs/RELEASE-0.6.0.md @@ -0,0 +1,22 @@ +# GraphPaper 0.6.0 — Ink, paper & the spatial graph studio + +## Actual interface changes + +- **No more green wash:** charcoal/ink-blue surfaces, clearer contrast and spectral accents throughout the studio. +- **Real graph paper in the sidebar:** a bundled, credited scan by Calsidyrose (CC BY 2.0), not a generated mockup or a green CSS grid. Works offline. +- **Spatial 3D graph:** perspective XYZ layout, orbit, pan, zoom, node dragging, a minimap, expanded view and a one-click 2D view. Dependency-free SVG rendering; no WebGL requirement or model calls. +- **Less visual congestion:** display budgets, full-graph search, node/connection filters, one-/two-hop focus, spacing controls and adaptive labels. Hidden nodes are not deleted. +- **Readable connections:** colored/patterned directed links, a relationship legend and selectable connections; distinct node shapes as well as colors. +- **Edit what you click:** node title/type/notes, connection endpoints/relationship/notes, add/connect/delete dialogs, confirmation, unsaved-edit guards and persistent graph-only undo. Original sources, manuscript and voice stay intact. No tone filter. + +## Use it + +Download `GraphPaper-v0.6.0-Windows-x64.zip`, extract it completely into a new folder and open **GraphPaper.exe** with `_internal` beside it. This Windows package is unsigned. Keep your existing project data directory; do not copy an empty test database over it. + +Open your existing project's **Graph** tab. **No extraction rerun is required.** Drag the canvas to orbit, Shift-drag to pan, wheel to zoom; click a node or a connection to edit it in the inspector. Use **Focus** and **Show** to control density. The author remains in charge of the wording. + +[Graph studio controls and limitations](https://github.com/AronAxe/GraphPaper/blob/main/docs/GRAPH-STUDIO.md) + +The public Graphify runtime, official Codex connection, reasoning controls, Science, Polemic, reusable voice graphs and bounded JEV requests are retained. This is not a claim that editing or displaying a graph establishes the truth of its claims. + +Builds and native Windows release checks run on GitHub-hosted machines, not the user's computer. Synthetic fixtures exercise UI, provider transport and storage; no private accounts or manuscripts are used. Final validation and archive checksum are attached to the published release. diff --git a/graphpaper/__init__.py b/graphpaper/__init__.py index f56785a..69c4530 100644 --- a/graphpaper/__init__.py +++ b/graphpaper/__init__.py @@ -1,2 +1,2 @@ """GraphPaper: an evidence-aware, graph-native writing studio.""" -__version__ = "0.5.0" +__version__ = "0.6.0" diff --git a/graphpaper/graph_editing.py b/graphpaper/graph_editing.py new file mode 100644 index 0000000..94bf307 --- /dev/null +++ b/graphpaper/graph_editing.py @@ -0,0 +1,122 @@ +"""Explicit local graph edits, optimistic saves and reversible graph-only history. + +This never calls a model or changes writing voice/position. Quote anchors survive +manual edits as provenance, not automatic validation of a changed claim. +""" +from __future__ import annotations +import hashlib +import json +from typing import Literal +from fastapi import Request +from pydantic import Field +from .models import Model, Node, Edge, Graph, now, uid +from .storage import Conflict + + +class Edit(Model): + version: int = Field(ge=0) + operation: Literal['node','edge','delete-node','delete-edge'] + id: str | None = Field(None,max_length=1000) + values: dict = Field(default_factory=dict) + + +def graph_hash(graph): + return hashlib.sha256(json.dumps(graph.model_dump(),sort_keys=True,ensure_ascii=False).encode()).hexdigest() + + +def install(app,store,runner): + with store.connect() as c: + c.execute('CREATE TABLE IF NOT EXISTS graph_history (id TEXT PRIMARY KEY, project_id TEXT, created TEXT, before_graph TEXT, before_pins TEXT, after_hash TEXT)') + c.execute('CREATE INDEX IF NOT EXISTS graph_history_project ON graph_history(project_id,created)') + + def get(pid,version): + if runner.active(pid):raise ValueError('Finish or cancel the active job before editing its graph.') + p=store.get(pid) + if version!=p.version:raise Conflict('The project has changed. Your graph edit has not been overwritten; refresh the project before applying it.') + return p + + def result(p,selected_id=None): + with store.connect() as c: + row=c.execute('SELECT after_hash FROM graph_history WHERE project_id=? ORDER BY created DESC,rowid DESC LIMIT 1',(p.id,)).fetchone() + return {'project':p,'selected_id':selected_id,'can_undo':bool(row and row[0]==graph_hash(p.graph))} + + def commit(p,expected,before,undo_id=None): + # One transaction commits the graph and its undo record; a stale writer + # cannot leave half an edit or restore somebody else's graph. + with store.lock,store.connect() as c: + p.version=expected+1;p.updated=now() + saved=c.execute('UPDATE projects SET version=?,updated=?,data=? WHERE id=? AND version=?',(p.version,p.updated,p.model_dump_json(),p.id,expected)) + if not saved.rowcount:raise Conflict('Project changed during graph editing. Your newer work was not overwritten.') + if undo_id: + c.execute('DELETE FROM graph_history WHERE id=? AND project_id=?',(undo_id,p.id)) + else: + c.execute('INSERT INTO graph_history VALUES(?,?,?,?,?,?)',(uid('g_'),p.id,now(),before[0],before[1],graph_hash(p.graph))) + c.execute('DELETE FROM graph_history WHERE project_id=? AND id NOT IN (SELECT id FROM graph_history WHERE project_id=? ORDER BY created DESC,rowid DESC LIMIT 25)',(p.id,p.id)) + + @app.get('/api/projects/{pid}/graph/edit-status') + def status(pid:str): + return {k:v for k,v in result(store.get(pid)).items() if k!='project'} + + @app.post('/api/projects/{pid}/graph/edit') + async def graph_edit(pid:str,request:Request): + raw=Edit.model_validate(await request.json());p=get(pid,raw.version) + before=(p.graph.model_dump_json(),json.dumps({'pinned':p.brief.pinned_nodes,'excluded':p.brief.excluded_nodes})) + nodes={n.id:n for n in p.graph.nodes};edges={e.id:e for e in p.graph.edges} + selected=raw.id;v=raw.values + if raw.operation in {'node','edge'}: + node=raw.operation=='node' + fields={'label','kind','description'} if node else {'source','target','relation','description'} + if set(v)-fields:raise ValueError('Only the visible graph fields can be edited; source anchors are retained separately.') + for key,value in v.items(): + if not isinstance(value,str):raise ValueError('Graph fields must contain text.') + if key!='description' and not value.strip():raise ValueError('A graph label, type or connection cannot be empty.') + if key in {'kind','relation'} and len(value)>80:raise ValueError('Graph types and relationship names must be at most 80 characters.') + collection=nodes if node else edges + if raw.id and raw.id not in collection:raise KeyError(raw.id) + if raw.id: + previous=collection[raw.id];data=previous.model_dump()|v + if any(getattr(previous,k)!=val for k,val in v.items()):data['status']='proposed' + item=(Node if node else Edge).model_validate(data) + else: + item=(Node if node else Edge).model_validate({'id':uid('n_' if node else 'e_'),'status':'proposed'}|v) + if not node and (item.source not in nodes or item.target not in nodes):raise ValueError('Both connection endpoints must exist in this project.') + if node:nodes[item.id]=item + else:edges[item.id]=item + selected=item.id + else: + if v:raise ValueError('Deletion does not accept replacement fields.') + if raw.operation=='delete-node': + if raw.id not in nodes:raise KeyError(raw.id) + del nodes[raw.id] + edges={key:e for key,e in edges.items() if e.source!=raw.id and e.target!=raw.id} + p.brief.pinned_nodes=[n for n in p.brief.pinned_nodes if n!=raw.id] + p.brief.excluded_nodes=[n for n in p.brief.excluded_nodes if n!=raw.id] + else: + if raw.id not in edges:raise KeyError(raw.id) + del edges[raw.id] + selected=None + if len(nodes)>5000 or len(edges)>20000:raise ValueError('Graph exceeds 5,000 nodes or 20,000 connections.') + p.graph.nodes=list(nodes.values());p.graph.edges=list(edges.values()) + p.graph.coverage['manually_edited_at']=now() + p.angles_context_hash='';p.outline_context_hash='' + pin_history=json.loads(before[1]);pin_history['after_pinned']=p.brief.pinned_nodes;pin_history['after_excluded']=p.brief.excluded_nodes + before=(before[0],json.dumps(pin_history)) + commit(p,raw.version,before) + return result(p,selected) + + @app.post('/api/projects/{pid}/graph/undo') + async def undo(pid:str,request:Request): + raw=await request.json() + if set(raw)!={'version'} or not isinstance(raw['version'],int):raise ValueError('Supply the current project version to undo.') + p=get(pid,raw['version']) + with store.connect() as c: + row=c.execute('SELECT * FROM graph_history WHERE project_id=? ORDER BY created DESC,rowid DESC LIMIT 1',(pid,)).fetchone() + if not row:raise ValueError('No manual graph edits to undo.') + if row['after_hash']!=graph_hash(p.graph):raise Conflict('The graph was rebuilt or replaced after this edit. Undo will not overwrite that graph.') + p.graph=Graph.model_validate_json(row['before_graph']);pins=json.loads(row['before_pins']) + # Restore edit-induced pin removal, not independent choices made later. + if p.brief.pinned_nodes==pins.get('after_pinned',pins['pinned']):p.brief.pinned_nodes=pins['pinned'] + if p.brief.excluded_nodes==pins.get('after_excluded',pins['excluded']):p.brief.excluded_nodes=pins['excluded'] + p.angles_context_hash='';p.outline_context_hash='' + commit(p,raw['version'],None,undo_id=row['id']) + return result(p) diff --git a/graphpaper/server.py b/graphpaper/server.py index 82565d7..52fea0d 100644 --- a/graphpaper/server.py +++ b/graphpaper/server.py @@ -358,5 +358,7 @@ async def import_project(request: Request): install_editorial(app,store,runner) from .science_routes import install as install_science install_science(app, store, vault, runner, settings) + from .graph_editing import install as install_graph_editing + install_graph_editing(app, store, runner) app.mount("/static", StaticFiles(directory=asset_directory()), name="static") return app diff --git a/graphpaper/storage.py b/graphpaper/storage.py index fb77998..f5aa6bb 100644 --- a/graphpaper/storage.py +++ b/graphpaper/storage.py @@ -91,6 +91,8 @@ def delete(self, project_id: str): with self.lock, self.connect() as c: c.execute("DELETE FROM projects WHERE id=?", (project_id,)) c.execute("DELETE FROM revisions WHERE project_id=?", (project_id,)) + if c.execute("SELECT 1 FROM sqlite_master WHERE type='table' AND name='graph_history'").fetchone(): + c.execute("DELETE FROM graph_history WHERE project_id=?", (project_id,)) def snapshot(self, project: Project, label: str): if not project.draft.strip(): diff --git a/publish-manifest.json b/publish-manifest.json index a41f96d..788a6f3 100644 --- a/publish-manifest.json +++ b/publish-manifest.json @@ -3,7 +3,10 @@ "files": { ".gitattributes": "acdb1038616f95b335ceb851c161a6139bf23561b2a74894a9ccb33ded5e71f4", ".github/topics.json": "341aa983b1829624dec7ab7cd2e83eed08d45bc78305033c1e860631c1227e41", + ".github/workflows/apply-graph-design.yml": "855f906752b43cef05dc2191d57db5d4bee0d0cdc0216a8216c09a91c59c5fde", + ".github/workflows/design-snapshot.yml": "ebda389620cbafa6a1f2c2bf9af505b025469982aace5b71a559c1613929732c", ".github/workflows/docs.yml": "19c4d6229a804adf09358171b19a139b45f1c2630b751213af1e9e62baed2c40", + ".github/workflows/graph-paper-asset.yml": "d0a8b1722901dc0b3b03aa601346b7a40e52ec60f69630b6ca8b08a489fe8a30", ".github/workflows/import-build.yml": "c56a990b97242f154907f76059f5b859448ca8de7b582928d63bb3717ac0d60a", ".github/workflows/native-diagnostics.yml": "818584858c3f0dce8ce17ff0ccff9b5984fab6c6d2a1481baa280f841c8cbf53", ".github/workflows/native-probe.yml": "b7e6f3ea3f8fef9e3725ac2a242b7c4be2545bc4491be5ce2e68f723c302bc56", @@ -12,14 +15,14 @@ ".github/workflows/voices-release.yml": "174a8f98f2fda23f938299e347d09a3615ac7a3b07a962bb952d164a5ba2be28", ".github/workflows/windows.yml": "65512954b719620063384ce93950b89c9b0aaac2ad6c7c620d505f8787b0444a", ".gitignore": "229a84e2b07c91b31c30f06df236ea17fe211eb75b217adc2eecb3f9d377f9bf", - "CHANGELOG.md": "1f8159e524f9e0138c8d706b897108ea8ebdd9a764fb5a1e2b74d04bfc297e98", + "CHANGELOG.md": "e288d09d51cac8ee952e63958b8ca8e23e2d77f1b5d51def57b2ed4e7f3dbd1a", "CONTRIBUTING.md": "170e7cd71886a6cd3aa82c3ab5a478cde152faa4f243900e047bca565e658001", "GraphPaper.pyw": "8fd19e9ba8caa25b11b0b458e00aa3ea4067ca5d90161f7ba2781f1d514fa094", "LICENSE": "5849844cbc9e9e199cf576224279d63d5fa56ca913f7a13285e4aa4fcb99bf80", "Open GraphPaper.vbs": "6ddf70eba29c281f9373c11b6aa7f69862c8ea7b03050b974c98d817ca11974e", "Publish GraphPaper.pyw": "a55984668dd0040d9bb5fc8c4c18ea5a201eede7e8a51ab79f8f0f095162ec8b", "Publish GraphPaper.vbs": "f9c595bcd13da5df60dcc2cfd906665243628f6e6c10a8b6a03ad1392a9698ad", - "README.md": "dac0e710729e57ee730a867495db842e4fc14b597009c18f0e994e1cf8b89cb8", + "README.md": "c9083ffc46bd7ccff1a86f8a3bd85ebe3ae32dfc732500dc51518189ca86a11b", "SECURITY.md": "e70e5b87ea06cdc075c3111a1eb0bb6ac5f5b6f8b55f5e735ad69d84ae63cda6", "docs/ARCHITECTURE.md": "86a28806513cf8b533d6a4767322c7dd339a6a2ed112081ea7ce5fcdf4ffd89d", "docs/CONNECTIONS.md": "eec1286ddc356bbb2cd7d63692e73abae6d0f7e9159bbb2edee6377dd5b3fd72", @@ -28,19 +31,21 @@ "docs/FICTION.md": "6ac2f136e848db8b9fd2bd329d4228894ad765e95d6a9cec317bb9372a847df8", "docs/GETTING-STARTED.md": "d663e4b1ea461de7e87ba8bb2fa15949db7ba8d89de69cbf1c0d1a265d3e2abd", "docs/GRAPH-AND-JEV.md": "6fc0ea4437d5691d50c02899f9a5377f2e42b97b9190cebc1c12d34819259c6e", + "docs/GRAPH-STUDIO.md": "cf5a765cbd08f0caf23da868da5b05ba3ab1a15c9d84fc7d61950c8baf0ca697", "docs/INTEGRATIONS.md": "3fe70965f7597f7746335278ae954fed891264e6d767fd5a046cf85eb1baf3d2", "docs/NONFICTION.md": "09ad36f0c4d1e51053feeb4e53a939b772cde1d1c75321c43cf9434822d70367", "docs/POLEMIC.md": "5992aece0504869add46268a741642675c77912ffedec7c59a1ef08220291161", "docs/PROJECTS-AND-SOURCES.md": "828179218c31bb9f50698e2d047a04b4a056b979800795a37cd790d29060e2dd", "docs/PUBLISHING.md": "324b83d5138b22bb29ca1737cbc0563595cc14f03177d478c478bde9109f975f", "docs/QUALITY.md": "75b998fe5bd366c955516e1671c19a43ad6f6d5449e7356218980f0073bd3250", - "docs/README.md": "393335da0650e4a657ce6deb694a8182cb8429c042551e722cbd82fa5a90d101", + "docs/README.md": "c3bf1d01e5f45bc72c653216a94d8686938f5c8ad3f35498dfdf409e150b437e", "docs/RELEASE-0.2.1.md": "42642432ff5c6017630d33a64726c5dca37abbbb36a476a901a59ec8887aa870", "docs/RELEASE-0.2.md": "c03a41903088590845d0da0707a562b9e6cbf4c5e1ff57d8794763f349093e44", "docs/RELEASE-0.3.0.md": "e32f30a3a9716c310be21dcf540cf9060384b0c7fdf69c8fc1c45d36c105cf29", "docs/RELEASE-0.3.1.md": "3879831312c10f64c9faceaac28066ef557825416d1ba75560729c514c16d8f8", "docs/RELEASE-0.4.0.md": "ed7d83f07cf10c447efa2e1ba9fa2634af691cad792928548871eccbee96c751", "docs/RELEASE-0.5.0.md": "960b36e74d2044bdc05c8b26d54113ea6580c259103d6ef6017809822032b0bf", + "docs/RELEASE-0.6.0.md": "02e6d3ef374c2b1309e416b2c11e93260bd83f00fa8c577471a7a9c7aab95900", "docs/SCIENCE.md": "9357a2f4ac714b6330aff4ccfe45ca0457d18e7816a73646314024823fd0ea00", "docs/SECURITY.md": "0f818eb0cf4e8f94ffaaeb6da3cc2c2bc474674b673d185c61b86b2eb5fd3864", "docs/TROUBLESHOOTING.md": "0834f56c656c97e721226a335b24a7aa8afe9cd99b4e28e950412bd86ae3d2d6", @@ -128,7 +133,7 @@ "examples/README.md": "0b7b83630202501a3ba6ad070708419aa23e32c8060ef9447491c6434043bbf6", "examples/fiction.json": "e3f90c0eed71102640c8a65ae86510e0258e9c90c3cc18730ed05329f632e88d", "examples/nonfiction.json": "af9196cf15dbe1d431f02c7d8ec11a720f25e1c3e30a756c1f9711b4c65a08cc", - "graphpaper/__init__.py": "a3146b399d581208e7ae734d18409e209de2cbe2eb9e115ccf1a0bdcd6aa955a", + "graphpaper/__init__.py": "c4c1db5dc55f7a5f7a09e49b859275a82ece49d31b5e19d36052cb39b1184d8e", "graphpaper/apa.py": "e8c5b844c0f02f14c5a73d6128e4d174d4ad655e380b4d675215beb125cd717f", "graphpaper/argument_draft.py": "a2b5ff0e2a100688a6c0e3be684b68107542a3341a307da7682e0b24e0f5ea3d", "graphpaper/author_web.py": "16ad1218ce0bf76bdd067e731176357586a28dfb55d297a393a3e6a596e126ff", @@ -140,6 +145,7 @@ "graphpaper/export.py": "fd76bec7858c53700dfe068035c187277ed85fa7e90a46cb1f1c47b57eb1e744", "graphpaper/folders.py": "37f9b255406e3ff93b6f6886294722c14561a4c1195d5c2107fe67c8de6fbca8", "graphpaper/graph.py": "eb9226bb03fc71b1d5eb309b833fa415efe5117b070500cef647704b334cdefe", + "graphpaper/graph_editing.py": "8f8b768c0b1843260d4925b7f6c8d2ae0935b7db30ce8d684946f25620622eac", "graphpaper/graphify_adapter.py": "5c4ef54058240b3e8f82daed1d7d7180ee839c43811d7cbb824f35d040a3d1af", "graphpaper/graphify_gateway.py": "258f8fe1b41682f3a952fe62d4ecb55824f82eea30f3997997565a3a45ff0164", "graphpaper/graphify_process.py": "a499fb74738bee070b1557c388312cce3448057d5be725f75bb5c926ac1e2237", @@ -159,8 +165,8 @@ "graphpaper/science_models.py": "986446c848927d85aa57bc2d2ba9f248f656fac9f6acc67d056e8f55776258e8", "graphpaper/science_routes.py": "cd2e5c76035dcd7a9384c74b4264306da8429072359a476b9d4e060aee86bb69", "graphpaper/secrets.py": "2d90bfed7124875d50cd977c0c4f17c4cb19e79af307445bc85af99596c3766e", - "graphpaper/server.py": "49cbcb61cb2ade46f69ca13aa7f1100c37ef239c9958b0461ff52ba6280224c0", - "graphpaper/storage.py": "38b0df820a0c4dae0199bf38656d529e726a4475fe7a47b66e41903e96d14eae", + "graphpaper/server.py": "afad82265041c6ad84de1c2e461381d0997b888bae1e98ceed28b0c9df562e5f", + "graphpaper/storage.py": "3a905690b5d737477d7de6b3fe0e216aa38831dd28f08b62a6b35791c56f50af", "graphpaper/studio_routes.py": "5597db3ee3cba50e7eb4bd8c4e36d3a74be5768bb01b75749f16ac28e10ee84f", "graphpaper/style_graph.py": "01adedab019d8108fd8643be8b3863ddac53936e368b3f6ef6ec97e5af8b9568", "graphpaper/support.py": "2f4a3f5f7f6a725b15719a775155bdc73c32ce0df022d43b4fb53dbf7e862d8e", @@ -172,7 +178,7 @@ "requirements-dev.txt": "40b197f9671e3c6db4d47ca73d9679eabafe662a56d4824c6f9e64255e47a5ce", "requirements-graphify.txt": "9eea3e6ea7fa3ceb1247518901d41d55a0813dc5133475172541c68c122454f1", "requirements.txt": "4e73f195c8a6d32b841b671200bf0dcaa91e5a042c585e935e3132ee5e4a02a3", - "scripts/build_release.ps1": "d56a421d287431c42e7971381ebd5234fb561cb67c117f6b321b86717a751c6a", + "scripts/build_release.ps1": "49fd93f3216141c9b1abb58fc0f76f24228cb7c6049a238b416de0841521c0bb", "scripts/build_windows.ps1": "44e0008ff8221097ead7355aa184a60e824d2fcbf0c77e54c74ddfc8f3a54858", "scripts/bundle_codex.py": "651d08e26949dbda47bca14dbc368d97b82e11a28759792cb6096adcea174efa", "scripts/check_codex.py": "2fff4a6cc80188d54914086ab3f3d7d3cf1ec02001541bad6bc8a426fc1bbc81", @@ -182,15 +188,17 @@ "scripts/check_scholarly.py": "a2169565bd8fc7f19f1f8ef6a0e4d79008267e327670cd615595b1045577a409", "scripts/desktop_entry.py": "94392ff111a9f3c736e5bda9037fec0e6fe2fd8fc8f7866c4aabf1a2d3afc135", "scripts/docs_tool.py": "7fd2a681bae5fd4a49ae394c74639dee8e833ad08e8a156406c292af6db46572", + "scripts/graph_studio_ui_checks.py": "7f3e05bd9649666854521eabfccb650e6c3d15578633ef36a027877828c6d267", "scripts/graphify_ui_checks.py": "6dc1e45478a10fa8e3d17190864b2145cd973a5a6e23c7500f0d99ddfb824dc6", "scripts/hooks/hook-graphify.py": "5659b57f3b3e11f9327b2da6e00c4bd82a523f7f978e3b9506811c2caf007ff3", - "scripts/native_smoke.py": "fad1f11330719923017a7b7b8813831bba4cd8c05104dea372cfc5f30a5c9c2c", + "scripts/native_smoke.py": "24fd497d5d7d68fd6be588b904d9ec8aac4ac5bbe637d4ae6a68401ca7144dae", "scripts/package_windows.py": "8b56c4235ca2bbac39657905fa4633d78273bc4df6c9e67558a7e893176af8b3", "scripts/prepare_assets.py": "179b65a0662d329fadecd9a41c134a249ed1f3cc3123a814095ee231636d819d", "scripts/prepare_ci_webview.ps1": "2572906263473c7ea94bd9517e76b2e1470ffec1719b6244088ac2a9346e6195", "scripts/prepare_graphify.py": "c81d4146c3b4a137b93bb61d16308c483a3e3a453501426569242d227bb58e03", "scripts/probe_ci_cdp.py": "91b76aa4aa813792088b435d35144b32f94dd49e8c7248a90b56c3e247dc81c9", "scripts/publish_gui.py": "46bf7dff734e16b31c322e45bbf80abcfa29d7fbbc93f4c8162a119ff9c79ef4", + "scripts/ui_graph_studio_smoke.py": "9c398f0e14a899768e89b9212c0fa07b02e77e533c496b31b2e8d0735dde19f8", "scripts/ui_graphify_smoke.py": "0f29a01d972ad63006aba345952bb9e092575c452eb9475c505c21d9267a3de3", "scripts/ui_polemic_smoke.py": "3a0304b586d10f6fd6b15df6d31b4895a075f6e93b69483d82cebae3bb926236", "scripts/ui_science_smoke.py": "fa744ee223db49c0e2325e94fe7deec62470f1d6186b28f2b2dacccb1264f2fb", @@ -200,6 +208,7 @@ "scripts/voice_ui_checks.py": "120c54529db6205d883f3011e6e50549468f35f4dc91a3b185de8b788c46e4bf", "tests/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "tests/conftest.py": "fb734bdc191b96cc60a20d83a4fbeea7b032a35e1b882a09d1cb80167e9bb1a4", + "tests/graph_math.test.cjs": "78d05cc37b25eca4551e1061db1275363901e6445437ffdde97ef077537d6dff", "tests/graphify_fixtures.py": "6961e0ceca4a78fca57baa9d9ab9f748e587e8d73adb7fc2d25b791716202e00", "tests/graphify_http_fixture.py": "86b51983fcb1d91b0138cb72cda7ba7941e30d4e9caf8f21c64b3d49a2e2265b", "tests/polemic_fixtures.py": "32429610e320e75fb4476be65597827276100b3ee0b556b77d558dace8f5cc9c", @@ -211,6 +220,7 @@ "tests/test_desktop_and_publish.py": "71fae513bac9965c146b20035b84d006cfb80045fb521523cbff38a11ef37edc", "tests/test_documentation_tools.py": "37c0f4df10a6f2919bb01e1c06813de4efae4a941908a20b3489967f36043c6b", "tests/test_editorial_intent.py": "e14b9943ea285e4f8b9f9c3fcf4fbcf9b8a6ef318c9b35bbaeb54f30d03b15d8", + "tests/test_graph_editing.py": "c5cbf6a1de1a993e6c47a7ec63d5882b04d22777792f0cc205d683fcfb01b88d", "tests/test_graphify_extraction.py": "d7da1549de893fda3606da1deea3aa1c53d28e92d210261fbe65418cda9090c4", "tests/test_graphify_gateway.py": "f64249c44525b8337f7aa517c5c149b6cddc8b76f42f67a2b5e1a4930a88ebe5", "tests/test_graphify_provenance.py": "ce91f39b3a60bd88c52bd57f70361c92daca7e5e261f9f30868dddfde00384d3", @@ -229,11 +239,17 @@ "tests/test_voice_integration.py": "63c9e4d4dadba187d36169593868af44a4df94896ae1dc06b8b4f451ac0f8eab", "tests/test_voice_library.py": "12071c049d7ccca7d10d531879ed67c19eee97178c0a5c3bc34559aed77417e7", "tests/test_windowless.py": "421620004c87cf24dec771966602b0666e75ecca67fec05071cf40e4b6887f44", - "ui/app.js": "09e96444fe3dc7b25db957616f8b60655e6625ff878e9cf8049fa2eecc1c10e4", + "ui/app.js": "4f5681c432b8fa5923fa68d57b9ace55cd493ee43be5971316a632f73ec2917d", + "ui/assets/CREDITS.md": "e9672e1c683f7db3e5265c52ea98fda9e8eec260e0a251ffa3065e85ebcffd77", + "ui/assets/graph-paper.json": "0b37ff27703f8f6adfcd4d05037a594d526749d9641cb6cd226efe1dcc09f687", + "ui/assets/graph-paper.webp": "d6b0df4e72784fce9cb72693c6aa4156d39efcdb4859c686a0f643ea5d066701", + "ui/graph_math.js": "8fe46c5f44ceb7577ea4ce0d8b0d8d992c25d2f41398738a1c536719f0469d1c", + "ui/graph_studio.css": "4de0fc25d74ccfa57e8c8d48cc4881cd9de075f3b60f2e106328fccec29b61cb", + "ui/graph_studio.js": "baa995d76d57a7887ad928cde3179bb6658afc1b1c7dab86a0c13f743b1025fb", "ui/graphify.js": "1bad42f86764de73c5e9411cca64d0c86d3bdfecaa8682be3e0728663b85d18c", "ui/graphpaper.ico": "f94c4061c53e8e1a1f2be96ef1a8c18b20c19a984bc35f6337f1037c1025a493", "ui/icon.svg": "9f97b80a90020b682f96756d1245dfa3cc9f19ed989b0751f802220a3934be0f", - "ui/index.html": "b157036ea077e65718e3b4e641051b1b959814077f078fad5618c2854b67fbb3", + "ui/index.html": "fc31c0977f44da6ddd3ce1abf7c7ce0a86b56fe2bd61e7cf2393c6e8f6b45084", "ui/polemic.css": "08e5b07f2b8cda29c79794714456502c058f5baa65ad7e47ec758e2a524cc80b", "ui/polemic.js": "169695b1caffb6a6b40c144f421a0cac846b52bb5be90e205861c75e7599574a", "ui/science.css": "0234fa0a9542afc269ea5b3914a80e0d574843d45f7033394d9e8edaa40ed91c", diff --git a/scripts/build_release.ps1 b/scripts/build_release.ps1 index ef8a7a9..a2ca405 100644 --- a/scripts/build_release.ps1 +++ b/scripts/build_release.ps1 @@ -11,7 +11,8 @@ if ($LASTEXITCODE -ne 0) { throw 'Public Graphify runtime verification failed.' python -m PyInstaller --noconfirm --clean --windowed --onedir --name GraphPaper --paths . --additional-hooks-dir scripts/hooks --icon ui/graphpaper.ico --add-data 'ui;ui' --add-data 'vendor;vendor' --collect-all webview scripts/desktop_entry.py if ($LASTEXITCODE -ne 0) { throw 'Windows desktop build failed.' } Copy-Item README.md, LICENSE -Destination dist/GraphPaper/ -Copy-Item docs/RELEASE-0.5.0.md -Destination dist/GraphPaper/WHATS-NEW.md +Copy-Item ui/assets/CREDITS.md -Destination dist/GraphPaper/ASSET-CREDITS.md +Copy-Item docs/RELEASE-0.6.0.md -Destination dist/GraphPaper/WHATS-NEW.md python scripts/check_package.py dist/GraphPaper if ($LASTEXITCODE -ne 0) { throw 'Compiled application self-test failed.' } python scripts/check_graphify.py --executable dist/GraphPaper/GraphPaper.exe --out test-results/graphify-package.json diff --git a/scripts/graph_studio_ui_checks.py b/scripts/graph_studio_ui_checks.py new file mode 100644 index 0000000..ca9a451 --- /dev/null +++ b/scripts/graph_studio_ui_checks.py @@ -0,0 +1,100 @@ +"""Actual graph UI interactions; synthetic data, no AI or user installation.""" +from playwright.sync_api import expect + + +def exercise(page,check,out,dense=True): + # The caller owns the isolated project. No direct backend save bypasses the + # node/edge editing controls exercised below. + if page.locator('.step[data-tab="graph"]').count():page.locator('.step[data-tab="graph"]').click() + expect(page.get_by_role('button',name='3D',exact=True)).to_be_visible() + expect(page.locator('#graph-svg')).to_be_visible() + page.wait_for_function('() => document.querySelectorAll("#graph-svg [data-node]").length > 0') + assert page.evaluate('() => getComputedStyle(document.querySelector(".sidebar")).backgroundImage.includes("graph-paper.webp")') + assert page.evaluate('''async () => {const r=await fetch('/static/assets/graph-paper.webp');return r.ok && (await r.blob()).size>20000;}''') + check('Real scanned graph paper loads locally in the light sidebar, not a generated grid') + before=page.evaluate('() => JSON.stringify(state.p.graph)') + pose=page.evaluate('() => ({yaw:GS.view.yaw, x:document.querySelector("[data-node]").getAttribute("transform")})') + box=page.locator('#graph-svg').bounding_box() + page.mouse.move(box['x']+box['width']*.7,box['y']+14);page.mouse.down() + page.mouse.move(box['x']+box['width']*.7+70,box['y']+48,steps=8);page.mouse.up() + page.wait_for_timeout(160) + assert page.evaluate('() => GS.view.yaw')!=pose['yaw'] + assert before==page.evaluate('() => JSON.stringify(state.p.graph)') + check('Dragging orbits true XYZ positions without changing graph content') + page.get_by_role('button',name='2D',exact=True).click();assert page.evaluate('() => GS.view.mode')=='2d' + page.get_by_role('button',name='3D',exact=True).click() + page.get_by_role('button',name='Reset camera',exact=True).click();page.wait_for_timeout(100) + old=page.evaluate('() => GS.view.zoom') + page.get_by_role('button',name='Zoom in',exact=True).click();page.wait_for_timeout(100) + assert page.evaluate('() => GS.view.zoom')>old + page.get_by_role('button',name='Fit graph',exact=True).click() + check('Flat/spatial toggle, zoom and fit are functioning controls') + node=page.locator('#graph-svg [data-node]').first;nodeid=node.get_attribute('data-node') + node.click();expect(page.locator('#gs-label')).to_be_visible() + old_sources=page.evaluate('() => JSON.stringify(state.p.sources)');old_draft=page.evaluate('() => state.p.draft') + page.locator('#gs-label').fill('The argument keeps its teeth') + page.locator('#gs-description').fill('Keep the fucking point. This is a deliberate graph edit.') + page.get_by_role('button',name='Save node',exact=True).click() + expect(page.locator('.gs-selected-title h3')).to_have_text('The argument keeps its teeth') + assert page.evaluate('() => state.p.draft')==old_draft and page.evaluate('() => JSON.stringify(state.p.sources)')==old_sources + saved=page.evaluate('async () => await api("/projects/"+state.p.id)') + assert any(n['id']==nodeid and 'fucking' in n['description'] for n in saved['graph']['nodes']) + check('Click/edit/save changes the stored node, preserves language, sources and manuscript') + page.get_by_role('button',name='Focus here',exact=True).click();page.wait_for_timeout(100) + assert page.evaluate('() => GS.view.hops')==1 + page.get_by_role('button',name='Reset filters',exact=True).click() + page.get_by_role('button',name='Clear graph selection',exact=True).click() + # Add a node and connect it through the actual dialogs. + n_before=page.evaluate('() => state.p.graph.nodes.length') + page.get_by_role('button',name='Add node',exact=True).first.click() + page.locator('#gs-new-label').fill('A new counterpoint');page.locator('#gs-new-kind').select_option('claim') + page.get_by_role('button',name='Add node',exact=True).last.click() + expect(page.locator('.modal')).to_have_count(0) + assert page.evaluate('() => state.p.graph.nodes.length')==n_before+1 + newid=page.evaluate('() => state.node') + page.get_by_role('button',name='Connect nodes',exact=True).click() + page.locator('#gs-new-source').select_option(newid);page.locator('#gs-new-target').select_option(nodeid) + page.locator('#gs-new-relation').fill('contradicts') + page.get_by_role('button',name='Create connection',exact=True).click() + expect(page.locator('#gs-edge-relation')).to_have_value('contradicts') + page.wait_for_function("""() => document.querySelectorAll('.gs-link[data-relationship="contradiction"]').length > 0""") + page.locator('#gs-edge-relation').fill('questions');page.get_by_role('button',name='Save connection',exact=True).click() + expect(page.locator('#gs-edge-relation')).to_have_value('questions') + page.wait_for_function('() => state.p.graph.edges.find(e=>e.id===state.edge)?.relation === \"questions\"') + check('Connections have direction, distinct line patterns, editable endpoints and saved relationship types') + page.get_by_role('button',name='Delete',exact=True).click();page.get_by_role('button',name='Delete from graph',exact=True).click() + expect(page.locator('.modal')).to_have_count(0) + page.get_by_role('button',name='Undo edit',exact=True).click() + page.wait_for_function('() => state.p.graph.edges.some(e=>e.relation==="questions")') + check('Confirmed deletion and persistent graph-only undo work without rewriting the document') + # Dirty inspector navigation is guarded. + page.locator('#graph-svg [data-node]').first.click();page.locator('#gs-label').fill('Unsaved title') + page.evaluate('() => window.graphpaperRequestClose()') + expect(page.get_by_role('heading',name='Keep your graph edit?',exact=True)).to_be_visible() + page.get_by_role('button',name='Stay here',exact=True).click() + page.get_by_role('button',name='2D',exact=True).click() + expect(page.locator('#gs-label')).to_have_value('Unsaved title') + page.locator('#graph-svg [data-node]').last.click() + expect(page.get_by_role('heading',name='Keep your graph edit?',exact=True)).to_be_visible() + page.get_by_role('button',name='Discard edit',exact=True).click() + check('Selecting another idea cannot silently discard an unsaved inspector edit') + page.get_by_role('button',name='Clear graph selection',exact=True).click() + page.get_by_role('button',name='3D',exact=True).click() + page.evaluate('window.scrollTo(0,0)');page.wait_for_timeout(150) + page.locator('#toasts').evaluate('el => el.replaceChildren()') + page.screenshot(path=str(out/'graph-studio.png'),full_page=True) + if dense: + graph={'nodes':[{'id':f'd{i}','label':('Needle in the archive' if i==599 else f'Concept {i}'),'kind':['claim','theme','evidence','concept'][i%4],'community':i%8} for i in range(600)],'edges':[{'id':f'l{i}','source':f'd{i%599}','target':f'd{(i*7+1)%599}','relation':['supports','contradicts','cites','leads_to','questions','related_to'][i%6]} for i in range(1500)]} + page.evaluate('''async graph => {state.p=await api('/projects/'+state.p.id+'/graph/import',graph);GS.positions={};GS.view.fit=true;render();}''',graph) + page.wait_for_timeout(250) + assert page.locator('#graph-svg [data-node]').count()<=60 + assert page.locator('#graph-svg .gs-link').count()<=360 + assert page.evaluate('() => state.p.graph.nodes.length')==600 + page.screenshot(path=str(out/'dense-overview.png'),full_page=True) + page.locator('#graph-search').fill('Needle in the archive') + expect(page.get_by_role('button',name='Needle in the archive',exact=True)).to_be_visible() + page.get_by_role('button',name='Needle in the archive',exact=True).click() + expect(page.locator('#gs-label')).to_have_value('Needle in the archive') + check('A 600-node graph is decluttered without deletion; full-graph search reaches a hidden low-degree idea') + page.get_by_role('button',name='Reset filters',exact=True).click() + return {'real_spatial_projection':True,'manual_editing':True,'synthetic_data':True,'live_models':False} diff --git a/scripts/native_smoke.py b/scripts/native_smoke.py index e1453f1..e2bece9 100644 --- a/scripts/native_smoke.py +++ b/scripts/native_smoke.py @@ -23,6 +23,7 @@ def main(): parser.add_argument('--graphify',action='store_true',help='Verify the actual external Graphify action using a synthetic loopback model') parser.add_argument('--polemic',action='store_true',help='Verify mode conversion and authorial controls in the native shell') parser.add_argument('--voices',action='store_true',help='Exercise saved voice graphs without model calls') + parser.add_argument('--graph-studio',action='store_true',help='Exercise the spatial graph and real node/edge editing controls') parser.add_argument('--out',type=Path,default=ROOT/'test-results/native') args=parser.parse_args() if sys.platform!='win32':raise SystemExit('This regression requires a native Windows desktop.') @@ -132,6 +133,10 @@ def cdp_ready(): from graphify_ui_checks import exercise report['external_graphify']=exercise(page,check,out) responsive(hwnd) + if args.graph_studio: + from graph_studio_ui_checks import exercise + report['graph_studio']=exercise(page,check,out,dense=False) + responsive(hwnd) if args.polemic: before=page.evaluate('() => ({sources:state.p.sources, graph:state.p.graph, draft:state.p.draft, voice:state.p.voice_profile})') page.locator('[data-action="writing-mode"]').click() diff --git a/scripts/ui_graph_studio_smoke.py b/scripts/ui_graph_studio_smoke.py new file mode 100644 index 0000000..e85ba48 --- /dev/null +++ b/scripts/ui_graph_studio_smoke.py @@ -0,0 +1,40 @@ +"""Real HTTP browser acceptance checks for the graph redesign.""" +from pathlib import Path +import argparse,json,socket,sys,tempfile,threading,time,traceback +ROOT=Path(__file__).resolve().parents[1];sys.path.insert(0,str(ROOT)) +from graphpaper.server import create_app +from playwright.sync_api import sync_playwright +from graph_studio_ui_checks import exercise +import uvicorn + +def main(): + parser=argparse.ArgumentParser();parser.add_argument('--chromium');parser.add_argument('--out',type=Path,default=ROOT/'test-results/graph-studio') + args=parser.parse_args();out=args.out;out.mkdir(parents=True,exist_ok=True) + report={'checks':[],'page_errors':[],'ok':False,'live_models':False} + def check(s):report['checks'].append(s);print('PASS',s,flush=True) + with tempfile.TemporaryDirectory(prefix='GraphPaper-graph-design-') as temp: + app=create_app(Path(temp));sock=socket.socket();sock.bind(('127.0.0.1',0));port=sock.getsockname()[1] + server=uvicorn.Server(uvicorn.Config(app,log_level='error'));thread=threading.Thread(target=lambda:server.run(sockets=[sock]),daemon=True);thread.start() + for _ in range(200): + if server.started:break + time.sleep(.05) + assert server.started + with sync_playwright() as pw: + browser=pw.chromium.launch(headless=True,**({'executable_path':args.chromium} if args.chromium else {})) + page=browser.new_page(viewport={'width':1580,'height':1120});page.set_default_timeout(8000) + page.on('pageerror',lambda e:report['page_errors'].append(str(e))) + try: + page.goto(f'http://127.0.0.1:{port}/');page.wait_for_selector('.welcome') + page.get_by_role('button',name='The city after dark',exact=True).click();page.wait_for_selector('#graph-svg') + report['graph']=exercise(page,check,out) + for width in [1000,720,390]: + page.set_viewport_size({'width':width,'height':900});page.wait_for_timeout(200) + assert page.evaluate('() => document.documentElement.scrollWidth')<=width,(width,page.evaluate('() => document.documentElement.scrollWidth')) + check('Responsive graph and controls stay within 1000, 720 and 390 pixel viewports') + assert not report['page_errors'],report['page_errors'];report['ok']=True + except Exception: + report['error']=traceback.format_exc();page.screenshot(path=str(out/'failure.png'),full_page=True);raise + finally: + (out/'report.json').write_text(json.dumps(report,indent=2)+'\n');browser.close();server.should_exit=True;thread.join(timeout=5);sock.close();app.state.runner.pool.shutdown(wait=True,cancel_futures=True) + print(json.dumps(report,indent=2)) +if __name__=='__main__':main() diff --git a/tests/graph_math.test.cjs b/tests/graph_math.test.cjs new file mode 100644 index 0000000..04d3663 --- /dev/null +++ b/tests/graph_math.test.cjs @@ -0,0 +1,7 @@ +const test=require('node:test');const assert=require('node:assert/strict'); +let M;try{M=require('../ui/graph_math.js');}catch{} +test('spatial renderer math is present',()=>assert.ok(M,'The spatial graph implementation is missing')); +test('actual XYZ depth rotates into screen position, 2D ignores z',()=>{if(!M)return;const p={x:100,y:30,z:180};const c={yaw:0,pitch:0,mode:'3d',zoom:1,panX:0,panY:0};assert.notEqual(M.project(p,c).x,M.project(p,{...c,yaw:1}).x);assert.equal(M.project(p,{...c,mode:'2d'}).x,100);assert.ok(M.project({...p,z:1e6},c).scale>0);}); +test('large graphs are bounded and search can find a hidden low-degree node',()=>{if(!M)return;const nodes=Array.from({length:1000},(_,i)=>({id:'n'+i,label:i===999?'Hidden target':'Node '+i,kind:'concept'}));const edges=nodes.slice(1).map(n=>({source:'n0',target:n.id,relation:'supports'}));let v=M.visible({nodes,edges},{limit:60});assert.equal(v.nodes.length,60);assert.ok(v.edges.length<=M.MAX_EDGES);v=M.visible({nodes,edges},{limit:60,search:'Hidden target'});assert.ok(v.nodes.some(n=>n.id==='n999'));}); +test('focus includes exact neighborhood and matching relation filters',()=>{if(!M)return;const g={nodes:['a','b','c','d'].map(id=>({id,label:id})),edges:[{id:'1',source:'a',target:'b',relation:'supports'},{id:'2',source:'b',target:'c',relation:'contradicts'}]};assert.deepEqual(M.visible(g,{focus:'a',hops:1}).nodes.map(n=>n.id).sort(),['a','b']);assert.equal(M.visible(g,{relation:'contradiction'}).edges.length,1);assert.equal(M.relation('is adjacent to'),'association');assert.equal(M.relation('does not support'),'association');}); +test('layout is deterministic, finite and does not modify source graph',()=>{if(!M)return;const nodes=Array.from({length:60},(_,i)=>({id:'n'+i,label:'Node '+i,kind:'concept',community:i%4}));const edges=nodes.slice(1).map((n,i)=>({source:n.id,target:'n'+i}));const copy=JSON.stringify({nodes,edges});const a=M.layout(nodes,edges);assert.deepEqual(a,M.layout(nodes,edges));assert.equal(copy,JSON.stringify({nodes,edges}));assert.ok(Object.values(a).every(p=>['x','y','z'].every(k=>Number.isFinite(p[k]))));assert.ok(Object.values(a).some(p=>p.z!==0));}); diff --git a/tests/test_graph_editing.py b/tests/test_graph_editing.py new file mode 100644 index 0000000..ebb8e63 --- /dev/null +++ b/tests/test_graph_editing.py @@ -0,0 +1,93 @@ +"""Real API edits; no inference, no installed user projects.""" +import copy +import pytest +from graphpaper.models import Project, Graph, Node, Edge, Source, Evidence, Angle + + +def seeded(app): + p=Project(title='Graph editing fixture',sources=[Source(id='S1',title='Source',text='Original quotation.')], + graph=Graph(nodes=[Node(id='n1',label='First',status='sourced',evidence=[Evidence(source_id='S1',quote='Original quotation.',verified=True)],source_ids=['S1']),Node(id='n2',label='Second')],edges=[Edge(id='e1',source='n1',target='n2',relation='supports')],engine='Graphify'),draft='Keep my fucking argument.',angles=[Angle(title='Kept angle',thesis='My argument.')]) + p.voice_profile.instructions='Power language stays.' + app.state.store.create(p) + return p + + +def edit(client,p,op,id=None,**values): + return client.post(f'/api/projects/{p.id}/graph/edit',json={'version':p.version,'operation':op,'id':id,'values':values}) + + +def test_edit_node_keeps_manuscript_voice_evidence_and_marks_angles_stale(client,app): + p=seeded(app) + response=edit(client,p,'node','n1',label='An uncompromising claim',kind='claim',description='Not a polite question.') + assert response.status_code==200,response.text + saved=response.json()['project'];node=saved['graph']['nodes'][0] + assert node['label']=='An uncompromising claim' and node['status']=='proposed' + assert node['evidence']==p.graph.nodes[0].model_dump()['evidence'] + assert saved['sources']==p.model_dump()['sources'] and saved['draft']==p.draft + assert saved['voice_profile']==p.voice_profile.model_dump() and len(saved['angles'])==1 + assert saved['angles_context_hash']=='' and saved['usage']['calls']==0 + + +def test_node_and_connection_creation_and_reloading(client,app): + p=seeded(app) + response=edit(client,p,'node',label='New idea',kind='theme',description='New thought') + assert response.status_code==200,response.text + value=response.json();p=Project.model_validate(value['project']);nid=value['selected_id'] + response=edit(client,p,'edge',source=nid,target='n1',relation='contradicts',description='Explains the disagreement.') + assert response.status_code==200,response.text + value=response.json();p=Project.model_validate(value['project']) + assert len(p.graph.nodes)==3 and len(p.graph.edges)==2 + assert client.get(f'/api/projects/{p.id}').json()['graph']==p.graph.model_dump() + + +def test_deleting_node_removes_only_incident_edges_and_undo_restores_it(client,app): + p=seeded(app);p.brief.pinned_nodes=['n1'];app.state.store.save(p,p.version) + before=p.graph.model_dump() + result=edit(client,p,'delete-node','n1');assert result.status_code==200,result.text + value=result.json();saved=value['project'] + assert len(saved['graph']['nodes'])==1 and saved['graph']['edges']==[] + assert saved['brief']['pinned_nodes']==[] + result=client.post(f'/api/projects/{p.id}/graph/undo',json={'version':saved['version']}) + assert result.status_code==200,result.text + restored=result.json()['project'] + assert restored['graph']==before and restored['brief']['pinned_nodes']==['n1'] + assert restored['draft']==p.draft + + +@pytest.mark.parametrize('values',[{'label':''},{'label':'x'*201},{'status':'sourced'},{'source_ids':['S99']},{'kind':'x'*81}]) +def test_invalid_or_provenance_spoofing_edits_are_atomic(client,app,values): + p=seeded(app);before=p.model_dump() + result=edit(client,p,'node','n1',**values) + assert result.status_code==400,result.text + assert app.state.store.get(p.id).model_dump()==before + + +def test_invalid_edge_target_and_stale_edit_do_not_overwrite(client,app): + p=seeded(app) + assert edit(client,p,'edge','e1',target='absent').status_code==400 + assert edit(client,p,'edge','e1',relation='questions').status_code==200 + assert edit(client,p,'node','n1',label='Stale').status_code==409 + assert app.state.store.get(p.id).graph.nodes[0].label=='First' + + +def test_edit_is_blocked_while_extraction_runs(client,app,monkeypatch): + p=seeded(app);monkeypatch.setattr(app.state.runner,'active',lambda pid:True) + assert edit(client,p,'node','n1',label='Do not apply').status_code==400 + assert app.state.store.get(p.id).version==p.version + + +def test_undo_never_overwrites_a_subsequent_graph_rebuild(client,app): + p=seeded(app);result=edit(client,p,'node','n1',label='Edited').json() + p=Project.model_validate(result['project']);p.graph=Graph(nodes=[Node(id='new',label='Fresh extraction')]);app.state.store.save(p,p.version) + response=client.post(f'/api/projects/{p.id}/graph/undo',json={'version':p.version}) + assert response.status_code==409 + assert app.state.store.get(p.id).graph.nodes[0].id=='new' + + +def test_undo_keeps_pin_choices_made_after_the_graph_edit(client,app): + p=seeded(app);p.brief.pinned_nodes=['n1'];app.state.store.save(p,p.version) + value=edit(client,p,'node','n1',label='Edited').json() + p=Project.model_validate(value['project']);p.brief.pinned_nodes=['n2'];app.state.store.save(p,p.version) + response=client.post(f'/api/projects/{p.id}/graph/undo',json={'version':p.version}) + assert response.status_code==200,response.text + assert response.json()['project']['brief']['pinned_nodes']==['n2'] diff --git a/ui/app.js b/ui/app.js index 1f6dbb4..1f1a75a 100644 --- a/ui/app.js +++ b/ui/app.js @@ -65,7 +65,7 @@ function progressDone(t){const p=state.p;return t==='sources'?p.sources.length>0 function render(){ const p=state.p,s=state.settings; document.documentElement.dataset.theme=s.theme||'dark'; - $('#app').innerHTML=``; + $('#app').innerHTML=`
${''}
${icon('check')}${esc(state.save)}${p?ibtn('Project options','project-options','settings'):''}${btn(p?'Export':'Import project',p?'export':'import-project',p?'download':'upload','small')}
${p?projectHTML():welcomeHTML()}
`; if(p&&state.tab==='graph'&&p.graph.nodes.length)requestAnimationFrame(drawGraph); setupDrops();paintJob(); } diff --git a/ui/graph_math.js b/ui/graph_math.js new file mode 100644 index 0000000..102c642 --- /dev/null +++ b/ui/graph_math.js @@ -0,0 +1,48 @@ +/* Pure, dependency-free spatial graph geometry. Shared by the UI and Node tests. */ +(function(root,factory){const api=factory();if(typeof module==='object'&&module.exports)module.exports=api;else root.GraphMath=api;})(typeof globalThis!=='undefined'?globalThis:this,function(){ + 'use strict'; + const MAX_NODES=180,MAX_EDGES=360; + const clamp=(v,a,b)=>Math.min(b,Math.max(a,v)); + const family={support:['supports','support','reinforces','corroborates','backs','supported_by','can_support','seeks_to_support'],contradiction:['contradicts','contradiction','opposes','conflicts_with','challenges','refutes'],citation:['cites','citation','references','quotes','sourced_from','draws_from'],causal:['causes','leads_to','enables','produces','results_in','depends_on','can_produce'],style:['influences_style','style_influence','expresses','uses_style','style'],question:['questions','raises_question','open_question','asks','uncertain','can_question']}; + function relation(value){const r=String(value||'').trim().toLowerCase().replace(/[\s-]+/g,'_');for(const [k,list] of Object.entries(family))if(list.includes(r))return k;return 'association';} + function kind(value){const k=String(value||'concept').toLowerCase();if(['source','document','paper','article','reference'].includes(k))return 'source';if(['claim','argument','hypothesis','finding'].includes(k))return 'claim';if(['evidence','quote','quotation','data','fact'].includes(k))return 'evidence';if(['theme','topic','concept','idea'].includes(k))return k==='theme'||k==='topic'?'theme':'concept';if(['angle','question','risk','tension','conflict'].includes(k))return 'angle';if(['person','character','organization'].includes(k))return 'character';if(['section','draft','draft_section','scene','event'].includes(k))return 'section';if(['voice','style','habit','rhythm','diction','rule','canon'].includes(k))return 'style';return 'concept';} + function visible(g,o={}){ + const limit=clamp(Number(o.limit)||60,10,MAX_NODES),search=String(o.search||'').trim().toLowerCase(); + const all=new Map(g.nodes.map(n=>[n.id,n])),degree=new Map(),adj=new Map(); + for(const e of g.edges){degree.set(e.source,(degree.get(e.source)||0)+1);degree.set(e.target,(degree.get(e.target)||0)+1);if(!adj.has(e.source))adj.set(e.source,new Set());if(!adj.has(e.target))adj.set(e.target,new Set());adj.get(e.source).add(e.target);adj.get(e.target).add(e.source);} + const neighborhood=new Set();if(o.focus&&all.has(o.focus)){neighborhood.add(o.focus);let front=[o.focus];for(let i=0;i<(Number(o.hops)||1);i++){const next=[];for(const id of front)for(const n of adj.get(id)||[])if(!neighborhood.has(n)){neighborhood.add(n);next.push(n);}front=next;}} + const matched=new Set();if(search){for(const n of g.nodes)if([n.label,n.kind,n.description].join(' ').toLowerCase().includes(search))matched.add(n.id);for(const e of g.edges)if([e.relation,e.description].join(' ').toLowerCase().includes(search)){matched.add(e.source);matched.add(e.target);}} + const path=new Set(o.path||[]),pins=new Set(o.pins||[]); + let candidates=g.nodes.filter(n=>(!o.kind||kind(n.kind)===o.kind)&&(!o.focus||neighborhood.has(n.id))&&(!search||matched.has(n.id))); + const rank=n=>(n.id===o.selected?1e7:0)+(path.has(n.id)?1e6:0)+(pins.has(n.id)?1e5:0)+(degree.get(n.id)||0); + candidates.sort((a,b)=>rank(b)-rank(a)||String(a.id).localeCompare(String(b.id))); + const nodes=candidates.slice(0,limit),ids=new Set(nodes.map(n=>n.id)); + const links=g.edges.filter(e=>ids.has(e.source)&&ids.has(e.target)&&(!o.relation||relation(e.relation)===o.relation)); + links.sort((a,b)=>((b.source===o.selected||b.target===o.selected)?1:0)-((a.source===o.selected||a.target===o.selected)?1:0)); + return {nodes,edges:links.slice(0,MAX_EDGES),degree,matching:candidates.length,availableEdges:links.length,total:g.nodes.length}; + } + function layout(nodes,edges){ + const sorted=nodes.slice().sort((a,b)=>String(a.id).localeCompare(String(b.id))),positions=Object.create(null); + const communities=new Set(sorted.map(n=>n.community||0)),useCommunity=communities.size>1; + const groups=new Map();for(const n of sorted){const key=useCommunity?'c'+(n.community||0):kind(n.kind);if(!groups.has(key))groups.set(key,[]);groups.get(key).push(n);} + const keys=[...groups.keys()].sort(),centers={},ring=keys.length>1?Math.max(180,Math.sqrt(nodes.length)*36):0; + keys.forEach((key,j)=>{const theta=j*2*Math.PI/keys.length-.5;centers[key]={x:Math.cos(theta)*ring*1.2,y:Math.sin(theta)*ring*.85,z:(j-(keys.length-1)/2)*65};groups.get(key).forEach((n,i)=>{const t=i*2.399963,r=55*Math.sqrt(i+1),c=centers[key];positions[n.id]={x:c.x+Math.cos(t)*r,y:c.y+Math.sin(t)*r,z:c.z+Math.sin(t*1.31)*70};});}); + for(let step=0;step<64;step++){ + const forces=Object.create(null);for(const n of sorted)forces[n.id]={x:-positions[n.id].x*.002,y:-positions[n.id].y*.002}; + for(let i=0;ispan{background:var(--accent);color:var(--accentInk)}.step-rule{background:var(--border)} +.button{border-radius:9px;font-size:12px}.button.primary{background:linear-gradient(135deg,var(--accent),#aabaff);color:var(--accentInk);box-shadow:0 3px 13px #647fff14}.button.primary:hover{filter:brightness(1.09)}[data-theme=light] .button.primary{background:#3565b1;color:#fff}.button:focus-visible,.icon-btn:focus-visible{outline:2px solid var(--accent);outline-offset:3px} +.panel{border-color:var(--border);border-radius:13px}.modal{background:var(--panel);border-color:var(--border);box-shadow:0 30px 100px #0009}.modal-head{background:linear-gradient(100deg,#526b9a14,transparent);border-bottom-color:var(--border)}.modal h2{font-size:23px;font-weight:620}.modal-body label{color:var(--muted)}input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.chip.green{background:#699bda18;border-color:#6793c744;color:var(--accent)}.chip.gold{color:var(--gold);background:#c68b2511}.dropzone{background:#688abc07;border-color:#637fa254}.upload-circle{background:#6596f319;color:var(--accent)}.source-card{background:linear-gradient(135deg,#638de909,transparent 65%),var(--panel);border-color:var(--border)}.source-card .doc-icon{color:var(--accent);background:#69a1ff17}.source-card:nth-child(3n+2) .doc-icon{color:#c5a5fa;background:#ae80e716}.source-card:nth-child(3n) .doc-icon{color:var(--gold);background:#c2964f16}.angle-card{border-top:2px solid #7594bd80}.angle-card:nth-child(3n+2){border-top-color:#ad83d380}.angle-card:nth-child(3n){border-top-color:#d4a45b80}.welcome h1{letter-spacing:-.065em}.welcome-card{background:linear-gradient(140deg,#618ce70e,transparent),var(--panel);transition:transform .15s,border-color .15s}.welcome-card:hover{transform:translateY(-3px);border-color:var(--accent)}.voice-graph{background:#151c28}.voice-graph-node circle{fill:#b7a0ef!important;stroke:#e0d1ff!important}.voice-graph-node.evidence-node circle{fill:#72a7ed!important;stroke:#a5c8fa!important}.voice-graph line{stroke:#919ebc}.voice-graph .overlay-link{stroke:#dfaa70} +.gs-workbench{grid-template-columns:minmax(0,1fr) 292px;gap:18px;align-items:start}.gs-visual{min-width:0}.gs-panel{min-height:0;background:#141b27;border-color:#3a4b65;overflow:hidden;box-shadow:0 15px 45px #0002;background-image:none}.gs-toolbar{display:flex;gap:9px;align-items:center;padding:13px 14px;border-bottom:1px solid #36445b;background:#1b2433}.gs-toolbar .graph-search{max-width:none;flex:1;min-width:80px;background:#101722;border:1px solid #405574;border-radius:8px;padding:0 10px}.gs-toolbar .graph-search input{background:transparent;border:0;font-size:12px;height:35px;min-width:0;width:100%;padding:5px 6px;color:#e4ecfa}.gs-toolbar .graph-search .icon{width:15px;color:#8faed8}.gs-mode{display:flex;background:#111824;border:1px solid #3a4b64;border-radius:8px;padding:3px;flex-shrink:0}.gs-mode button{font-size:11px;font-weight:700;background:none;color:#9dacbf;border-radius:5px;padding:5px 9px;min-height:27px}.gs-mode button[aria-pressed=true]{background:#436797;color:#fff;box-shadow:0 1px 3px #0003}.gs-toolbar>.icon-btn{color:#adbed5;flex-shrink:0}.gs-filterbar{display:flex;align-items:center;gap:9px;padding:9px 14px;background:#172030;border-bottom:1px solid #2d3b52;flex-wrap:wrap}.gs-filter{display:flex;align-items:center;gap:6px;font-size:10px;color:#8fa4c3;margin:0;min-width:0}.gs-filter span{font-weight:600;font-size:10px;text-transform:uppercase;letter-spacing:.04em}.gs-filter select{max-width:143px;font-size:10px;padding:5px 6px;min-height:29px;border-color:#384961;color:#d2def1;background:#202b3c;border-radius:6px}.gs-limit{margin-left:auto}.gs-limit select{width:54px}.gs-stage{position:relative;background:radial-gradient(ellipse at 35% 30%,#293d5f40,transparent 66%),radial-gradient(ellipse at 80% 75%,#5b316319,transparent 50%),#121a26;background-image:radial-gradient(ellipse at 35% 30%,#293d5f40,transparent 66%),radial-gradient(#647ba02a .75px,transparent .75px);background-size:auto,24px 24px;overflow:hidden;isolation:isolate}.gs-stage .graph-canvas{width:100%;height:610px;display:block;touch-action:none;cursor:grab;user-select:none}.gs-stage .graph-canvas:active{cursor:grabbing}.gs-instructions{position:absolute;pointer-events:none;top:17px;left:18px;padding:9px 12px;background:#101923b0;border:1px solid #4d6a933b;border-radius:8px;box-shadow:0 4px 15px #0001;color:#9aafcd;backdrop-filter:blur(5px);font-size:10px;line-height:1.65}.gs-instructions b{display:block;font-size:9px;letter-spacing:.17em;color:#aec8ec;margin-bottom:2px}.gs-instructions span{opacity:.85}.gs-viewtools{position:absolute;bottom:16px;right:15px;display:flex;flex-direction:column;padding:4px;background:#121c2cef;border:1px solid #4a6080;border-radius:10px;box-shadow:0 5px 20px #0003}.gs-viewtools .icon-btn{color:#bdd3f1;min-width:30px;min-height:32px}.gs-viewtools .icon-btn:hover{background:#384c6a;color:#fff}.gs-axis{position:absolute;bottom:22px;left:19px;pointer-events:none;display:flex;gap:2px;align-items:center}.gs-axis span{font-size:9px;color:#90a5c5;letter-spacing:.15em}.gs-minimap{position:absolute;bottom:17px;right:66px;width:136px;height:89px;background:#131d2beb;border-radius:11px;cursor:crosshair;box-shadow:0 5px 14px #0003}.gs-minimap>rect{fill:transparent;stroke:#476181}.gs-minimap-viewport{fill:#6fa9ff13;stroke:#729ed7;stroke-width:1}.gs-empty{position:absolute;inset:42% 14% auto;text-align:center;color:#d0ddef;pointer-events:none}.gs-empty strong{font-size:20px;font-weight:500}.gs-empty p{font-size:12px;color:#95a8c4;margin-top:7px}.gs-summary{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;background:#1a2332;color:#9cb0cd;font-size:10px;border-top:1px solid #34435b;line-height:1.6}.gs-summary .text-link{font-size:10px;flex-shrink:0;color:#9dc4ff}.gs-legend{padding:11px 15px 12px;background:#151e2c;border-top:1px solid #303e54;color:#9eafc8}.gs-legend summary{cursor:pointer;font-size:11px;color:#d7e2f3;font-weight:600}.gs-legend summary span{font-size:9px;font-weight:400;color:#859ab8;margin-left:10px}.gs-legend>div{display:flex;gap:9px 17px;flex-wrap:wrap;padding-top:10px}.gs-legend>div>span{display:inline-flex;align-items:center;gap:6px;font-size:10px}.gs-legend p{font-size:9px;color:#8499b7;margin-top:8px}.gs-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding-top:13px}.gs-actions .button{min-height:32px;font-size:10px;padding:6px 9px}.gs-link .graph-edge{stroke:var(--link-color);stroke-width:1.35;stroke-opacity:.56;cursor:pointer;transition:none}.gs-link.active .graph-edge{stroke-width:2.2;stroke-opacity:1}.gs-link.muted-link{opacity:.24}.gs-link:hover .graph-edge,.gs-link:focus-within .graph-edge{stroke-width:3;stroke-opacity:1}.gs-link-hit{cursor:pointer;outline:none}.gs-link:focus-within .graph-edge{filter:drop-shadow(0 0 3px var(--link-color))}.gs-link-label{font:10px var(--font);paint-order:stroke;stroke:#121a26;stroke-width:5px;stroke-linejoin:round;pointer-events:none}.gs-node{cursor:grab;opacity:1;transition:opacity .15s}.gs-node:active{cursor:grabbing}.gs-node.gs-dim{opacity:.34}.gs-node:hover,.gs-node:focus-visible{opacity:1}.gs-node:hover .gs-halo,.gs-node:focus-visible .gs-halo{opacity:.28}.gs-node:focus-visible .gs-halo{stroke:currentColor;stroke-width:2}.gs-node-caption rect{fill:#1c293ded;stroke:#49608088;stroke-width:.7}.gs-node-caption text{font:11.5px var(--font);fill:#e8f0fc;stroke:none;paint-order:normal;font-weight:500}.gs-node.active .gs-node-caption rect{stroke:currentColor;fill:#263950}.gs-node.active .gs-node-caption text{fill:#fff;font-weight:650}.gs-node-caption{pointer-events:none}.gs-selection-ring{filter:drop-shadow(0 0 3px currentColor)} +.gs-inspector{border-top:2px solid #7b9fcf;overflow:hidden;position:sticky;top:16px;background:linear-gradient(150deg,#6c8fb509,transparent 200px),var(--panel);max-height:900px;overflow-y:auto}.gs-inspector .panel-header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:15px 16px;border-color:var(--border);flex-wrap:wrap}.gs-inspector .panel-header h2{font-size:14px;font-weight:650;letter-spacing:-.02em}.gs-kicker{font-size:8px;letter-spacing:.14em;color:var(--soft)}.gs-inspector .panel-body{padding:17px 16px}.gs-selection-empty>.icon{width:34px;height:34px;color:var(--accent);margin-bottom:12px;stroke-width:1.1}.gs-selection-empty h3{font-size:18px;color:var(--text);line-height:1.4}.gs-selection-empty p{font-size:12px;color:var(--muted);margin-top:8px;line-height:1.75}.gs-type-legend{display:grid;grid-template-columns:1fr 1fr;gap:11px 10px;margin-top:22px;font-size:10px;color:var(--muted)}.gs-type-legend span{display:flex;align-items:center;gap:8px}.gs-type-legend i,.gs-connections i{display:inline-block;flex-shrink:0;width:8px;height:8px;background:var(--type-color);border-radius:50%;box-shadow:0 0 8px color-mix(in srgb,var(--type-color) 30%,transparent)}.gs-divider{height:1px;background:var(--border);margin:21px 0}.gs-tip{border-left:2px solid #827aaa;color:var(--muted);padding-left:12px;margin-top:24px}.gs-tip strong{font-size:11px;color:var(--text);font-weight:550}.gs-tip p{font-size:11px;line-height:1.8;margin-top:4px}.gs-badge{display:inline-flex;align-items:center;gap:7px;color:var(--type-color);background:color-mix(in srgb,var(--type-color) 12%,transparent);border:1px solid color-mix(in srgb,var(--type-color) 30%,transparent);padding:4px 9px;border-radius:7px;font-size:11px;font-weight:600}.gs-badge:before{content:'';width:7px;height:7px;background:var(--type-color);border-radius:50%}.gs-inspector .gs-selected-title{background:none;border:0;padding:0;margin:0 0 18px}.gs-selected-title h3{font-size:23px;font-weight:600;line-height:1.3;margin-bottom:10px;overflow-wrap:anywhere}.gs-selected-title .chip{font-size:9px;color:var(--muted)}.gs-edit-fields label{font-size:11px;margin-top:13px;color:var(--muted)}.gs-edit-fields input,.gs-edit-fields textarea,.gs-edit-fields select{width:100%;font-size:12px;padding:9px 10px;border-radius:7px;line-height:1.65}.gs-edit-fields textarea{min-height:96px}.gs-edit-fields .button{font-size:11px}.gs-edit-fields #gs-edit-status{margin-top:8px;font-size:10px;line-height:1.6;color:var(--gold)}.gs-inspector .evidence-card{background:#6385b608;border-color:var(--border)}.gs-inspector .evidence-card blockquote{font-size:11px;line-height:1.7}.gs-connections summary{font-size:11px;color:var(--muted);cursor:pointer}.gs-connections summary b{font-size:10px;background:var(--panel2);padding:2px 6px;margin-left:6px;border-radius:4px;font-weight:500}.gs-connections button{display:flex;align-items:center;text-align:left;gap:9px;padding:9px 0;background:none;width:100%;border-bottom:1px solid #58688125;color:var(--muted)}.gs-connections button:hover{color:var(--text);background:var(--hover)}.gs-connections strong{font-size:10px;display:block;color:var(--text);font-weight:500}.gs-connections small{font-size:10px;display:block;line-height:1.7;overflow-wrap:anywhere}.graph-expanded .gs-workbench{position:fixed;inset:10px;z-index:35;padding:15px;background:var(--bg);border:1px solid var(--border);border-radius:16px;overflow:auto;box-shadow:0 0 0 40px #000a}.graph-expanded .gs-stage .graph-canvas{height:calc(100vh - 263px);min-height:300px}.graph-expanded .gs-inspector{max-height:calc(100vh - 55px)}.graph-expanded .gs-actions{padding-top:8px} +[data-theme=light] .gs-inspector .evidence-card{background:#f4f6fb}[data-theme=light] .gs-node-caption text{fill:#e8f0fc}.gs-panel .text-link:hover{color:#fff} +@media(min-width:1700px){.gs-workbench{grid-template-columns:minmax(0,1fr) 320px}.gs-stage .graph-canvas{height:690px}} +@media(max-width:1250px){.shell{grid-template-columns:205px minmax(0,1fr)}.workspace-body{padding:0 20px 24px}.workspace-head{padding:23px 20px 18px}.gs-workbench{grid-template-columns:minmax(0,1fr) 258px;gap:13px}.gs-toolbar{padding:10px}.gs-filterbar{gap:7px;padding:8px 10px}.gs-filter select{max-width:124px}.gs-filter span{display:none}.gs-stage .graph-canvas{height:560px}.gs-inspector .panel-body{padding:14px}.gs-selected-title h3{font-size:21px}.gs-limit{margin-left:0}} +@media(max-width:1040px){.gs-workbench{grid-template-columns:minmax(0,1fr)}.gs-inspector{position:static;max-height:none}.gs-stage .graph-canvas{height:560px}.gs-inspector .gs-edit-fields{max-width:640px}.gs-connections{max-width:640px}.gs-selection-empty{max-width:560px}.gs-type-legend{grid-template-columns:repeat(3,1fr);max-width:570px}.graph-expanded .gs-workbench{grid-template-columns:minmax(0,1fr)}.graph-expanded .gs-inspector{max-height:none}.graph-expanded .gs-stage .graph-canvas{height:60vh}} +@media(max-width:720px){.shell{grid-template-columns:1fr}.sidebar.open{width:230px}.topbar{padding:0 16px}.workspace-head{padding:21px 16px 18px}.workspace-head h1{font-size:25px}.workspace-body{padding:0 12px 20px}.steps{padding-left:16px;padding-right:16px}.gs-stage .graph-canvas{height:490px}.gs-filterbar{gap:7px}.gs-filter select{max-width:123px}.gs-toolbar .graph-search input{font-size:11px}.gs-mode button{padding:4px 7px}.gs-instructions{font-size:9px;top:10px;left:10px;max-width:205px}.gs-summary{font-size:9px;padding:9px 10px;align-items:flex-start}.gs-legend>div{gap:8px 12px}.gs-legend summary span{display:none}.gs-minimap{width:109px;height:72px}.gs-axis{left:12px;bottom:20px}.gs-actions .spacer{display:none}.gs-inspector .panel-header{padding:13px 16px}} +@media(prefers-reduced-motion:reduce){.gs-node,.welcome-card{transition:none}.welcome-card:hover{transform:none}} +@media print{.gs-workbench{display:none}.sidebar{display:none!important}} + +.gs-link-label{display:none}.gs-link-label.shown,.gs-link:hover .gs-link-label,.gs-link:focus-within .gs-link-label{display:block} diff --git a/ui/graph_studio.js b/ui/graph_studio.js new file mode 100644 index 0000000..9398802 --- /dev/null +++ b/ui/graph_studio.js @@ -0,0 +1,102 @@ +/* GraphPaper spatial studio. Real XYZ projection; no CDN, WebGL or model calls. */ +'use strict'; +const GS={pid:'',view:null,positions:{},dirty:false,drag:null,svg:null,frame:0,saveTimer:0,canUndo:false,pending:null,linkFrom:null,screen:[],bound:null}; +const GS_TYPES={source:{name:'Source',color:'#64a8ff',shape:'square'},claim:{name:'Claim',color:'#f38ab7',shape:'circle'},evidence:{name:'Evidence',color:'#bc9cff',shape:'hex'},theme:{name:'Theme',color:'#53cbd5',shape:'diamond'},angle:{name:'Angle / tension',color:'#ffc16c',shape:'triangle'},character:{name:'Person / character',color:'#f4977c',shape:'square'},section:{name:'Scene / section',color:'#d7a7ff',shape:'hex'},style:{name:'Style / canon',color:'#a3a4ff',shape:'diamond'},concept:{name:'Idea',color:'#97b5ed',shape:'circle'}}; +const GS_REL={support:{name:'Support',color:'#5cdbbf',dash:''},contradiction:{name:'Opposition',color:'#ff967d',dash:'7 4'},citation:{name:'Citation',color:'#75b5ff',dash:'2 4'},causal:{name:'Consequence',color:'#f8ca7d',dash:''},style:{name:'Style',color:'#c6a0ff',dash:'8 3 2 3'},question:{name:'Question',color:'#ed99cf',dash:'3 5'},association:{name:'Association',color:'#a0b0ca',dash:'2 5'}}; +const GS_OTHER=['#82b9ce','#b4a0d7','#c3ba91','#99b7de','#c69dab','#9fc1b0']; +function gsEdgeStyle(value){const family=GraphMath.relation(value);if(family!=='association')return {...GS_REL[family],key:family};let h=0;for(const c of String(value||''))h=(h*31+c.charCodeAt(0))>>>0;const index=h%GS_OTHER.length;return {name:String(value),color:GS_OTHER[index],dash:['2 5','7 4','1 3','8 3 2 3','4 4',''][index],key:'other-'+index};} +function gsViewRender(){const inspector=$('.gs-inspector');render();if(GS.dirty&&inspector&&$('.gs-inspector'))$('.gs-inspector').replaceWith(inspector);} +function gsDefaults(){return {mode:'3d',yaw:.28,pitch:-.15,zoom:1,panX:0,panY:0,limit:60,kind:'',relation:'',hops:0,spread:1,fit:true};} +function gsEnsure(){if(!state.p)return;if(GS.pid===state.p.id)return;GS.pid=state.p.id;GS.view=gsDefaults();GS.positions=Object.create(null);GS.dirty=false;GS.linkFrom=null;GS.canUndo=false;GS.drag=null;try{const saved=JSON.parse(storage.getItem('graphpaper.spatial.'+GS.pid)||'null');if(saved){for(const key of ['yaw','pitch','zoom','panX','panY','spread'])if(Number.isFinite(saved.view?.[key]))GS.view[key]=GraphMath.clamp(saved.view[key],key==='zoom'?.12:-1e5,key==='zoom'?5:1e5);GS.view.spread=GraphMath.clamp(GS.view.spread,.5,3);GS.view.mode=saved.view?.mode==='2d'?'2d':'3d';GS.view.fit=false;for(const [id,p] of Object.entries(saved.positions||{}).slice(0,5000))if(['x','y','z'].every(k=>Number.isFinite(p[k])&&Math.abs(p[k])<1e6))GS.positions[id]=p;}}catch{}const pid=GS.pid;api('/projects/'+pid+'/graph/edit-status').then(s=>{if(GS.pid===pid){GS.canUndo=s.can_undo;const b=$('[data-action="gs-undo"]');if(b)b.disabled=!GS.canUndo||busy();}}).catch(()=>{});} +function gsRemember(){clearTimeout(GS.saveTimer);const pid=GS.pid;GS.saveTimer=setTimeout(()=>{if(GS.pid!==pid)return;try{storage.setItem('graphpaper.spatial.'+pid,JSON.stringify({view:GS.view,positions:GS.positions}));}catch{}},250);} +function gsRequestDraw(){if(GS.frame)return;GS.frame=requestAnimationFrame(()=>{GS.frame=0;drawGraph();});} +function gsOptions(items,selected){return Object.entries(items).map(([k,v])=>``).join('');} +const gsPreviousGraphHTML=graphHTML; +graphHTML=function(){gsEnsure();const p=state.p,v=GS.view;return `
${ibtn('Expand graph','gs-expand','expand')}
${ibtn('Zoom in','zoom-in','plus')}${ibtn('Zoom out','zoom-out','minus')}${ibtn('Fit graph','fit-graph','expand')}${ibtn('Spread nodes apart','gs-spread','branch')}${ibtn('Reset camera','gs-reset','refresh')}
Read the connections Color + pattern + direction
${Object.entries(GS_REL).map(([k,t])=>`${t.name}`).join('')}

Known relationships share a style. Other names have their own accent; hover or select a link to read its exact wording.

${btn('Add node','gs-add-node','plus','small')}${btn('Connect nodes','gs-add-edge','branch','small',p.graph.nodes.length<2?'disabled':'')}${btn('Undo edit','gs-undo','refresh','small ghost',!GS.canUndo||busy()?'disabled':'')}${btn('Find a path','find-path','branch','small ghost')}${btn('Rebuild','run-graph','refresh','small ghost',busy()?'disabled':'')}${btn('Import','import-graph','upload','small ghost')}
${p.graph.warnings.slice(0,2).map(w=>`
${esc(w)}
`).join('')}${state.path.length?`
Conceptual path: ${state.path.map(id=>esc(p.graph.nodes.find(n=>n.id===id)?.label||id)).join(' → ')}
`:''}
${directionHTML()}
`;}; +const gsPreviousDirection=directionHTML; +directionHTML=function(){if(!state.p||state.tab!=='graph')return gsPreviousDirection();const p=state.p;const n=p.graph.nodes.find(n=>n.id===state.node),e=p.graph.edges.find(e=>e.id===state.edge),item=n||e;if(!item)return ``; + const type=n?GS_TYPES[GraphMath.kind(n.kind)]:GS_REL[GraphMath.relation(e.relation)];const links=n?p.graph.edges.filter(l=>l.source===n.id||l.target===n.id):[]; + const sourceIds=[...new Set([...(item.source_ids||[]),...(item.evidence||[]).map(a=>a.source_id)])]; + return ``; +}; +function gsEndpointOptions(id){return state.p.graph.nodes.map(n=>``).join('');} +function gsRelationList(){return ''+['supports','contradicts','cites','leads_to','influences_style','questions','related_to'].map(t=>`';} +function gsGuard(fn){if(!GS.dirty){fn();return;}GS.pending=fn;showModal('Keep your graph edit?','There are unsaved changes in the graph inspector.','

Save them before continuing, or discard this edit. Your last saved graph is unchanged.

',btn('Stay here','close-modal','','small ghost')+btn('Discard edit','gs-discard','','small')+btn('Save and continue','gs-save-continue','check','primary'));} +function gsSelect(id,edge=false){gsGuard(()=>{GS.dirty=false;state.node=edge?null:id;state.edge=edge?id:null;state.path=[];gsRequestDraw();refreshDirection();});} +selectNode=function(id){gsSelect(id);}; +function gsPoint(ev,svg){const p=svg.createSVGPoint();p.x=ev.clientX;p.y=ev.clientY;return p.matrixTransform(svg.getScreenCTM().inverse());} +function gsFit(points,width,height){if(!points.length)return;const c={...GS.view,zoom:1,panX:0,panY:0};const ps=points.map(p=>GraphMath.project(p,c));const xs=ps.map(p=>p.x),ys=ps.map(p=>p.y),minX=Math.min(...xs),maxX=Math.max(...xs),minY=Math.min(...ys),maxY=Math.max(...ys);const zoom=GraphMath.clamp(Math.min((width-180)/Math.max(160,maxX-minX),(height-170)/Math.max(120,maxY-minY)),.12,2);GS.view.zoom=zoom;GS.view.panX=-(minX+maxX)/2*zoom;GS.view.panY=-(minY+maxY)/2*zoom;GS.view.fit=false;} +function gsShape(shape,r,fill){const common=`fill="${fill}" stroke="currentColor" stroke-width="1.2"`;if(shape==='diamond')return ``;if(shape==='square')return ``;if(shape==='triangle')return ``;if(shape==='hex')return ``;return ``;} +drawGraph=function(){gsEnsure();const svg=$('#graph-svg');if(!svg||!state.p)return;const v=GS.view,g=state.p.graph; + const selection=state.node||(state.edge?g.edges.find(e=>e.id===state.edge)?.source:null); + const view=GraphMath.visible(g,{...v,search:state.search,selected:selection,focus:v.hops?selection:null,pins:state.p.brief.pinned_nodes,path:state.path}); + const nodes=view.nodes,edges=view.edges;if(nodes.some(n=>!GS.positions[n.id])){const fresh=GraphMath.layout(nodes,edges);for(const n of nodes)GS.positions[n.id]||=fresh[n.id];} + const bounds=svg.getBoundingClientRect(),width=Math.max(300,bounds.width||900),height=Math.max(300,bounds.height||650);svg.setAttribute('viewBox',`0 0 ${width} ${height}`); + const world=n=>{const p=GS.positions[n.id];return {x:p.x*v.spread,y:p.y*v.spread,z:p.z*v.spread};};if(v.fit)gsFit(nodes.map(world),width,height); + const projected=new Map(nodes.map(n=>{const q=GraphMath.project(world(n),v);return [n.id,{...q,x:q.x+width/2,y:q.y+height/2}];})); + const neighbors=new Set(state.path||[]);if(selection){neighbors.add(selection);g.edges.forEach(e=>{if(e.source===selection)neighbors.add(e.target);if(e.target===selection)neighbors.add(e.source);});} + const labels=new Map(),boxes=[];const labelCandidates=nodes.slice().sort((a,b)=>(b.id===state.node?1e5:neighbors.has(b.id)?1000:0)+(view.degree.get(b.id)||0)-(a.id===state.node?1e5:neighbors.has(a.id)?1000:0)-(view.degree.get(a.id)||0)); + const maxLabels=nodes.length<=30?30:Math.min(nodes.length,Math.round(24+v.zoom*12)); + for(const n of labelCandidates){const p=projected.get(n.id);if(labels.size>=maxLabels&&!neighbors.has(n.id))continue;const text=n.label.length>30?n.label.slice(0,28)+'…':n.label,w=Math.min(196,text.length*6.5+18),h=25;if(p.x<-80||p.y<-40||p.x>width+80||p.y>height+40)continue;const possibilities=[{x:p.x-w/2,y:p.y+21},{x:p.x-w/2,y:p.y-47},{x:p.x+23,y:p.y-12}];let box=possibilities.find(b=>!boxes.some(a=>b.xa.x&&b.ya.y));if(!box&&n.id===state.node)box=possibilities[0];if(!box)continue;boxes.push({...box,w,h});labels.set(n.id,{...box,w,h,text});} + const defs=Object.entries(GS_TYPES).map(([k,t])=>``).join('')+Object.entries(GS_REL).map(([k,t])=>``).join(''); + const otherDefs=GS_OTHER.map((color,i)=>``).join(''); + const pairs=new Map();const edgeHtml=edges.map(e=>{const a=projected.get(e.source),b=projected.get(e.target),key=[e.source,e.target].sort().join('\0'),index=pairs.get(key)||0;pairs.set(key,index+1);const route=GraphMath.curve(a,b,index),type=GraphMath.relation(e.relation),t=gsEdgeStyle(e.relation),active=e.id===state.edge||state.path.length&&state.path.includes(e.source)&&state.path.includes(e.target)||selection&&(e.source===selection||e.target===selection);const dim=selection&&!active; + return `${esc(e.relation)} · ${esc(e.status)} · click to edit${`${esc(e.relation.replaceAll('_',' '))}`}`;}).join(''); + const nodesHtml=nodes.slice().sort((a,b)=>projected.get(b.id).z-projected.get(a.id).z).map(n=>{const p=projected.get(n.id),k=GraphMath.kind(n.kind),t=GS_TYPES[k],r=GraphMath.clamp((12+Math.min(6,(view.degree.get(n.id)||0)*.45))*Math.sqrt(p.scale),9,25),active=n.id===state.node,dim=selection&&!neighbors.has(n.id),label=labels.get(n.id);return `${gsShape(t.shape,r,`url(#gs-grad-${k})`)}${active?``:''}${state.p.brief.pinned_nodes.includes(n.id)?``:''}${label?`${esc(label.text)}`:''}${esc(n.label)} · ${esc(n.kind)}\n${esc(n.description||'Click to inspect and edit')}`;}).join(''); + svg.innerHTML=`${defs}${otherDefs}${edgeHtml}${nodesHtml}`;GS.screen=[...projected.entries()]; + const count=$('#graph-visibility');if(count)count.textContent=`${nodes.length} of ${g.nodes.length} nodes · ${edges.length} of ${g.edges.length} connections${nodes.length${v.mode==='3d'?'SPATIAL VIEW':'FLAT VIEW'}
${''}
${icon('check')}${esc(state.save)}${p?ibtn('Project options','project-options','settings'):''}${btn(p?'Export':'Import project',p?'export':'import-project',p?'download':'upload','small')}
${p?projectHTML():welcomeHTML()}
${GS.linkFrom?'Choose another node to connect.':v.mode==='3d'?'Drag canvas to orbit · Shift-drag to pan':'Drag canvas to pan'}
Scroll to zoom · drag nodes to arrange
`; + const empty=$('#gs-empty');empty.classList.toggle('hidden',nodes.length>0);if(!nodes.length)empty.innerHTML=g.nodes.length?'No matching ideas.

Reset filters or try another search.

':'A blank sheet. An open question.

Add a node yourself or build a graph from your sources.

'; + $('#gs-axis').innerHTML=`${v.mode==='3d'?'XYZ':'XY'}${[['x','#f4977c'],['y','#64a8ff'],['z','#bc9cff']].filter(([a])=>v.mode==='3d'||a!=='z').map(([a,c])=>{const p=GraphMath.project({x:a==='x'?19:0,y:a==='y'?-19:0,z:a==='z'?19:0},{...v,zoom:1,panX:0,panY:0});return `${a.toUpperCase()}`;}).join('')}`; + gsMini(nodes,world,width,height);gsBind(svg);gsRemember(); +}; +function gsMini(nodes,world,width,height){const mini=$('#gs-minimap');if(!mini)return;const pts=nodes.map(n=>({id:n.id,...GraphMath.project(world(n),{...GS.view,zoom:1,panX:0,panY:0})}));if(!pts.length){mini.innerHTML='';return;}const xs=pts.map(p=>p.x),ys=pts.map(p=>p.y),x0=Math.min(...xs)-80,y0=Math.min(...ys)-80,w=Math.max(...xs)-x0+80,h=Math.max(...ys)-y0+80,s=Math.min(130/w,78/h);GS.bound={x0,y0,s};const z=GS.view.zoom;mini.innerHTML=`${pts.map(p=>``).join('')}`;mini.onclick=ev=>{const p=gsPoint(ev,mini),b=GS.bound;GS.view.panX=-((p.x-10)/b.s+b.x0)*GS.view.zoom;GS.view.panY=-((p.y-10)/b.s+b.y0)*GS.view.zoom;gsRequestDraw();};} +function gsBind(svg){if(GS.svg===svg)return;GS.svg=svg; + svg.onpointerdown=ev=>{if(ev.button!==0&&ev.button!==1)return;const p=gsPoint(ev,svg),node=ev.target.closest('[data-node]'),edge=ev.target.closest('[data-edge]');GS.drag={id:node?.dataset.node,edge:edge?.dataset.edge,start:p,view:{...GS.view},pos:node?{...GS.positions[node.dataset.node]}:null,pan:ev.shiftKey||ev.button===1,moved:false};svg.setPointerCapture(ev.pointerId);}; + svg.onpointermove=ev=>{const d=GS.drag;if(!d)return;const p=gsPoint(ev,svg),dx=p.x-d.start.x,dy=p.y-d.start.y;if(Math.hypot(dx,dy)>4)d.moved=true;if(!d.moved)return;if(d.id){GS.positions[d.id]=GraphMath.move(d.pos,dx/GS.view.spread,dy/GS.view.spread,d.view);}else if(d.pan||GS.view.mode==='2d'){GS.view.panX=d.view.panX+dx;GS.view.panY=d.view.panY+dy;}else{GS.view.yaw=d.view.yaw+dx*.006;GS.view.pitch=GraphMath.clamp(d.view.pitch+dy*.006,-1.4,1.4);}gsRequestDraw();}; + svg.onpointerup=ev=>{const d=GS.drag;GS.drag=null;if(svg.hasPointerCapture(ev.pointerId))svg.releasePointerCapture(ev.pointerId);if(!d)return;if(!d.moved){if(d.id&&GS.linkFrom){const from=GS.linkFrom;GS.linkFrom=null;gsConnectDialog(from,d.id);}else if(d.id)gsSelect(d.id);else if(d.edge)gsSelect(d.edge,true);}gsRequestDraw();};svg.onpointercancel=()=>{GS.drag=null;}; + svg.onwheel=ev=>{ev.preventDefault();const p=gsPoint(ev,svg),r=svg.viewBox.baseVal,old=GS.view.zoom,z=GraphMath.clamp(old*Math.exp(-ev.deltaY*.0014),.12,5),x=p.x-r.width/2,y=p.y-r.height/2;GS.view.panX=x-(x-GS.view.panX)*z/old;GS.view.panY=y-(y-GS.view.panY)*z/old;GS.view.zoom=z;gsRequestDraw();}; + svg.onkeydown=ev=>{if(['Enter',' '].includes(ev.key)){const n=ev.target.closest('[data-node]'),e=ev.target.closest('[data-edge]');if(n||e){ev.preventDefault();gsSelect(n?n.dataset.node:e.dataset.edge,!n);}}}; + svg.ondblclick=ev=>{const n=ev.target.closest('[data-node]');if(n){gsSelect(n.dataset.node);$('#gs-label')?.focus();}}; +} +async function gsApply(operation,id,values){await flush();const pid=state.p.id;const response=await api('/projects/'+pid+'/graph/edit',{version:state.p.version,operation,id,values});if(state.p?.id!==pid)return;state.p=response.project;GS.canUndo=response.can_undo;GS.dirty=false;state.node=operation==='node'?response.selected_id:null;state.edge=operation==='edge'?response.selected_id:null;syncSummary();editorialUI.statusKey='';render();toast('Graph saved. Your manuscript and sources are unchanged.');} +async function gsSave(){const f=$('.gs-edit-fields');if(!f)return;const type=f.dataset.editKind;const values=type==='node'?{label:$('#gs-label').value,kind:$('#gs-node-kind').value,description:$('#gs-description').value}:{source:$('#gs-source').value,target:$('#gs-target').value,relation:$('#gs-edge-relation').value,description:$('#gs-description').value};await gsApply(type,f.dataset.editId,values);} +function gsAddNode(){gsGuard(()=>showModal('Add an idea','A manual graph node. No extraction or writing is rerun.',``,btn('Add node','gs-create-node','plus','primary')));} +function gsConnectDialog(from,to){gsGuard(()=>showModal('Connect two ideas','Direction and relationship are yours to specify.',`${gsRelationList()}`,btn('Create connection','gs-create-edge','branch','primary')));} +const gsPreviousAction=handleAction; +handleAction=async function(el){const a=el.dataset.action; + if(GS.dirty&&['tab','home','new','open-project','run-graph','run-angles','pin','unpin','exclude','clear-exclusions','brief'].includes(a)){gsGuard(()=>gsPreviousAction(el));return;} + if(!a.startsWith('gs-')&&!['zoom-in','zoom-out','fit-graph'].includes(a))return gsPreviousAction(el); + gsEnsure();if(!GS.view)return; + if(['gs-save','gs-delete','gs-add-node','gs-add-edge','gs-create-node','gs-create-edge','gs-undo','gs-connect-from','gs-confirm-delete','gs-save-continue'].includes(a)&&!editable())return; + if(a==='gs-save'){await gsSave();return;}if(a==='gs-save-continue'){const fn=GS.pending;await gsSave();closeModal();GS.pending=null;fn?.();return;}if(a==='gs-discard'){GS.dirty=false;const fn=GS.pending;GS.pending=null;closeModal();fn?.();return;} + if(a==='gs-add-node'){gsAddNode();return;}if(a==='gs-add-edge'){gsConnectDialog();return;} + if(a==='gs-create-node'){const values={label:$('#gs-new-label').value,kind:$('#gs-new-kind').value,description:$('#gs-new-notes').value};await gsApply('node',null,values);closeModal();GS.view.fit=true;drawGraph();return;} + if(a==='gs-create-edge'){const values={source:$('#gs-new-source').value,target:$('#gs-new-target').value,relation:$('#gs-new-relation').value,description:$('#gs-new-notes').value};await gsApply('edge',null,values);closeModal();return;} + if(a==='gs-delete'){const n=state.p.graph.nodes.find(n=>n.id===state.node);const count=n?state.p.graph.edges.filter(e=>e.source===n.id||e.target===n.id).length:0;showModal(n?'Delete this node?':'Delete this connection?','This can be reversed with Undo edit.',`

${n?`Remove “${esc(n.label)}” and its ${count} incident connection(s)?`:'Remove only the selected connection?'}

Your source documents, voice and manuscript will not be deleted.

`,btn('Cancel','close-modal','','small')+btn('Delete from graph','gs-confirm-delete','x','primary'));return;} + if(a==='gs-confirm-delete'){await gsApply(state.node?'delete-node':'delete-edge',state.node||state.edge,{});closeModal();return;} + if(a==='gs-undo'){await flush();const result=await api('/projects/'+state.p.id+'/graph/undo',{version:state.p.version});state.p=result.project;GS.canUndo=result.can_undo;GS.dirty=false;state.node=null;state.edge=null;syncSummary();render();toast('Manual graph edit undone.');return;} + if(a==='gs-select-edge'){gsSelect(el.dataset.id,true);return;}if(a==='gs-deselect'){gsGuard(()=>{state.node=null;state.edge=null;GS.view.hops=0;GS.dirty=false;render();});return;} + if(a==='gs-connect-from'){gsGuard(()=>{GS.linkFrom=state.node;gsRequestDraw();toast('Click the destination node, then name the connection.');});return;} + if(a==='gs-focus-here'){GS.view.hops=1;GS.view.fit=true;gsViewRender();return;} + if(a==='gs-expand'){document.body.classList.toggle('graph-expanded');gsRequestDraw();return;} + if(a==='gs-clear'){GS.view.kind='';GS.view.relation='';GS.view.hops=0;state.search='';GS.view.fit=true;gsViewRender();return;} + if(a==='gs-2d'||a==='gs-3d'){GS.view.mode=a==='gs-2d'?'2d':'3d';GS.view.fit=true;gsViewRender();return;} + if(a==='gs-reset'){GS.view.yaw=.28;GS.view.pitch=-.15;GS.view.panX=0;GS.view.panY=0;GS.view.spread=1;GS.view.fit=true;} + if(a==='gs-spread')GS.view.spread=Math.min(3,GS.view.spread*1.18); + if(a==='fit-graph')GS.view.fit=true; + if(a==='zoom-in'||a==='zoom-out')GS.view.zoom=GraphMath.clamp(GS.view.zoom*(a==='zoom-in'?1.2:1/1.2),.12,5); + gsRequestDraw(); +}; +document.addEventListener('change',event=>{const e=event.target;if(!GS.view)return;if(['gs-kind','gs-relation','gs-focus','gs-limit'].includes(e.id)){const key={'gs-kind':'kind','gs-relation':'relation','gs-focus':'hops','gs-limit':'limit'}[e.id];GS.view[key]=['hops','limit'].includes(key)?Number(e.value):e.value;GS.view.fit=true;if(key==='hops'&&e.value!=='0'&&!state.node&&!state.edge)toast('Select an idea to focus its neighborhood.');gsRequestDraw();}}); +document.addEventListener('input',event=>{if(event.target.closest('.gs-edit-fields')){GS.dirty=true;const note=$('#gs-edit-status');if(note)note.textContent='Unsaved graph edit — press Save to apply.';}}); +document.addEventListener('keydown',event=>{if(event.key==='Escape'){GS.linkFrom=null;if(document.body.classList.contains('graph-expanded')){document.body.classList.remove('graph-expanded');gsRequestDraw();}}}); +window.addEventListener('resize',()=>{if(state.tab==='graph')gsRequestDraw();}); +const gsPreviousRender=render; +render=function(){gsPreviousRender();document.body.classList.toggle('graph-workspace',!!state.p&&state.tab==='graph');const side=$('.sidebar');if(side&&!$('.gs-paper-credit',side)){const credit=document.createElement('a');credit.className='gs-paper-credit';credit.href='https://commons.wikimedia.org/wiki/File:Graph_paper_notepad_(4562203394).jpg';credit.target='_blank';credit.rel='noopener noreferrer';credit.textContent='Paper scan · Calsidyrose / CC BY 2.0';side.append(credit);}if(state.tab!=='graph')document.body.classList.remove('graph-expanded');else if(state.p)gsRequestDraw();}; +if(state.p||state.projects.length)render(); + +const gsPreviousClose=window.graphpaperRequestClose; +window.graphpaperRequestClose=async()=>{if(!GS.dirty)return gsPreviousClose();await window.pywebview?.api?.cancel_close?.().catch(()=>{});gsGuard(()=>gsPreviousClose());}; +window.addEventListener('beforeunload',event=>{if(GS.dirty){event.preventDefault();event.returnValue='';}}); +document.addEventListener('keydown',event=>{if(GS.dirty&&(event.ctrlKey||event.metaKey)&&event.key.toLowerCase()==='s'){event.preventDefault();event.stopImmediatePropagation();gsSave().catch(err=>toast(err.message,true));}},true); diff --git a/ui/index.html b/ui/index.html index 6e13acb..63c14a1 100644 --- a/ui/index.html +++ b/ui/index.html @@ -13,6 +13,9 @@ + + +

Opening your writing studio…

From 879e0d348644424a34b6d8c171990d21ad342210 Mon Sep 17 00:00:00 2001 From: Aron Bijl Date: Thu, 8 Oct 2026 18:00:58 +0200 Subject: [PATCH 10/13] Gate graph studio release on hosted browser, graph editing and compiled Windows checks --- .github/workflows/apply-graph-design.yml | 45 ------- .github/workflows/design-snapshot.yml | 18 --- .github/workflows/graph-paper-asset.yml | 48 ------- .github/workflows/graph-studio-release.yml | 139 ++++++++++++++++++++ .github/workflows/quality.yml | 4 +- .github/workflows/voices-release.yml | 141 --------------------- 6 files changed, 142 insertions(+), 253 deletions(-) delete mode 100644 .github/workflows/apply-graph-design.yml delete mode 100644 .github/workflows/design-snapshot.yml delete mode 100644 .github/workflows/graph-paper-asset.yml create mode 100644 .github/workflows/graph-studio-release.yml delete mode 100644 .github/workflows/voices-release.yml diff --git a/.github/workflows/apply-graph-design.yml b/.github/workflows/apply-graph-design.yml deleted file mode 100644 index 5783c64..0000000 --- a/.github/workflows/apply-graph-design.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: Apply checked graph studio source -on: - push: - branches: [feat/graph-studio-v0.6] - paths: ['.github/workflows/apply-graph-design.yml'] -permissions: - contents: write -jobs: - apply: - runs-on: ubuntu-latest - timeout-minutes: 5 - steps: - - uses: actions/checkout@v4 - with: - ref: feat/graph-studio-v0.6 - - name: Verify the exact source patch and leave workflow permissions separate - run: | - python - <<'PY' - from pathlib import Path - import base64,lzma,hashlib,subprocess - encoded=''.join(Path('.github/design-transfer/part'+str(i)+'.b64').read_text().strip() for i in range(1,4)) - encoded=encoded.replace('Qo0mWmzw4R','Qo0mWzw4R') - patch=lzma.decompress(base64.b64decode(encoded,validate=True)) - assert hashlib.sha256(patch).hexdigest()=='e78dcb171d5074fc7d18b849ee1fbfe966cc3c0dd3895f883cfe10031e62ba60','Transferred patch checksum mismatch' - path=Path('/tmp/graph-studio.patch');path.write_bytes(patch) - subprocess.run(['git','apply','--exclude=.github/workflows/*','--check',str(path)],check=True) - subprocess.run(['git','apply','--exclude=.github/workflows/*',str(path)],check=True) - for p in Path('.github/design-transfer').glob('*.b64'):p.unlink() - print('Verified ordinary source applied. Workflow changes are deliberately excluded.') - PY - python -m compileall -q graphpaper scripts - node --check ui/graph_studio.js - node --test tests/graph_math.test.cjs - - name: Commit ordinary reviewable source and its publishing manifest - run: | - git config user.name 'github-actions[bot]' - git config user.email '41898282+github-actions[bot]@users.noreply.github.com' - git add -A - python scripts/prepare_assets.py --manifest - git add publish-manifest.json - test -z "$(git diff --cached --name-only -- .github/workflows)" - git diff --cached --check - git commit -m 'Implement ink-and-paper UI and spatial graph editor with regression tests' - git push origin HEAD:feat/graph-studio-v0.6 - git show --stat --oneline HEAD diff --git a/.github/workflows/design-snapshot.yml b/.github/workflows/design-snapshot.yml deleted file mode 100644 index 755ffef..0000000 --- a/.github/workflows/design-snapshot.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Graph studio source snapshot -on: - push: - branches: ['feat/graph-studio-v0.6'] - paths: ['.github/workflows/design-snapshot.yml'] -permissions: - contents: read -jobs: - snapshot: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - run: git archive --format=zip HEAD -o /tmp/graphpaper-source.zip - - uses: actions/upload-artifact@v4 - with: - name: graphpaper-design-source - path: /tmp/graphpaper-source.zip - retention-days: 3 diff --git a/.github/workflows/graph-paper-asset.yml b/.github/workflows/graph-paper-asset.yml deleted file mode 100644 index ac971c1..0000000 --- a/.github/workflows/graph-paper-asset.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: Bundle real graph paper -on: - push: - branches: ['feat/graph-studio-v0.6'] - paths: ['.github/workflows/graph-paper-asset.yml'] -permissions: - contents: write -jobs: - paper: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - ref: feat/graph-studio-v0.6 - - uses: actions/setup-python@v5 - with: - python-version: '3.12' - - run: python -m pip install -q pillow - - name: Download the licensed original scan and bundle an optimized copy - run: | - mkdir -p ui/assets - curl --fail --location --retry 3 --connect-timeout 20 --max-time 100 --user-agent 'GraphPaper/0.6 (https://github.com/AronAxe/GraphPaper; asset attribution)' 'https://upload.wikimedia.org/wikipedia/commons/4/4d/Graph_paper_notepad_%284562203394%29.jpg' -o /tmp/graph-paper-original.jpg - python - <<'PY' - from PIL import Image,ImageOps - from pathlib import Path - import hashlib,json - original=Path('/tmp/graph-paper-original.jpg').read_bytes() - image=ImageOps.exif_transpose(Image.open('/tmp/graph-paper-original.jpg')).convert('RGB') - assert image.width>=2000 and image.height>=3000 - image.thumbnail((1000,1600)) - image.save('ui/assets/graph-paper.webp',quality=88) - metadata={'title':'Graph paper notepad (4562203394)','author':'Calsidyrose','source':'https://commons.wikimedia.org/wiki/File:Graph_paper_notepad_(4562203394).jpg','license':'CC BY 2.0','license_url':'https://creativecommons.org/licenses/by/2.0/','changes':'Resized and converted to WebP; the image is a scan of real vintage graph paper, not AI-generated.','original_sha256':hashlib.sha256(original).hexdigest(),'bundled_sha256':hashlib.sha256(Path('ui/assets/graph-paper.webp').read_bytes()).hexdigest()} - Path('ui/assets/graph-paper.json').write_text(json.dumps(metadata,indent=2)+'\n') - Path('ui/assets/CREDITS.md').write_text('# Sidebar photograph / scan\n\nGraph paper notepad (4562203394), by **Calsidyrose**, is a direct scan of real vintage graph paper. Source: https://commons.wikimedia.org/wiki/File:Graph_paper_notepad_(4562203394).jpg . Licensed under **Creative Commons Attribution 2.0**: https://creativecommons.org/licenses/by/2.0/ . Resized and converted to WebP for offline display. No endorsement is implied. The application includes a visible attribution link.\n') - print(json.dumps(metadata,indent=2)) - PY - - name: Commit the actual image and attribution to the feature branch - run: | - git config user.name 'github-actions[bot]' - git config user.email '41898282+github-actions[bot]@users.noreply.github.com' - git add ui/assets - git commit -m 'Add licensed real graph-paper scan and provenance' || test -z "$(git status --porcelain)" - git push origin HEAD:feat/graph-studio-v0.6 - - uses: actions/upload-artifact@v4 - with: - name: real-graph-paper - path: ui/assets/ - retention-days: 3 diff --git a/.github/workflows/graph-studio-release.yml b/.github/workflows/graph-studio-release.yml new file mode 100644 index 0000000..caffefb --- /dev/null +++ b/.github/workflows/graph-studio-release.yml @@ -0,0 +1,139 @@ +name: GraphPaper 0.6 graph studio release +on: + push: + branches: [main, feat/graph-studio-v0.6] + paths: + - 'graphpaper/**' + - 'ui/**' + - 'scripts/**' + - 'tests/**' + - 'docs/RELEASE-0.6.0.md' + - '.github/workflows/graph-studio-release.yml' + workflow_dispatch: +permissions: + contents: read +concurrency: + group: graph-studio-${{ github.ref }} + cancel-in-progress: true +jobs: + source: + runs-on: ubuntu-latest + timeout-minutes: 5 + permissions: + contents: write + outputs: + revision: ${{ steps.source.outputs.revision }} + steps: + - uses: actions/checkout@v4 + - name: Refresh the source manifest without changing application code or workflows + id: source + env: + TARGET_BRANCH: ${{ github.ref_name }} + run: | + python scripts/prepare_assets.py --manifest + git add publish-manifest.json + if ! git diff --cached --quiet; then + git config user.name 'github-actions[bot]' + git config user.email '41898282+github-actions[bot]@users.noreply.github.com' + git commit -m 'Refresh graph studio source publishing manifest' + git push origin "HEAD:$TARGET_BRANCH" + fi + echo "revision=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT" + browser: + needs: source + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ needs.source.outputs.revision }} + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + cache: pip + - run: python -m pip install -q -r requirements-dev.txt + - run: python -m pytest -q --junitxml=test-results/linux.xml + - run: node --test tests/graph_math.test.cjs + - run: python scripts/docs_tool.py check + - run: python -m playwright install chromium + - run: python scripts/ui_smoke.py + - run: python scripts/ui_studio_smoke.py + - run: python scripts/ui_science_smoke.py + - run: python scripts/ui_graphify_smoke.py + - run: python scripts/ui_polemic_smoke.py + - run: python scripts/ui_voices_smoke.py + - run: python scripts/ui_graph_studio_smoke.py + - uses: actions/upload-artifact@v4 + if: always() + with: + name: graph-studio-browser-validation + path: test-results/ + windows: + needs: [source, browser] + runs-on: windows-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ needs.source.outputs.revision }} + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + cache: pip + - run: python -m pip install -q -r requirements-dev.txt -r requirements-desktop.txt + - run: python -m pytest -q --junitxml=test-results/windows.xml + - run: node --test tests/graph_math.test.cjs + - name: Verify hosted WebView2 prerequisite + shell: pwsh + run: ./scripts/prepare_ci_webview.ps1 + - name: Build Windows package with public Graphify and official Codex + shell: pwsh + env: + GITHUB_TOKEN: ${{ github.token }} + run: ./scripts/build_release.ps1 + - name: Exercise the actual compiled spatial graph editor and existing workspaces + run: python scripts/native_smoke.py --science --graphify --graph-studio --polemic --voices --executable dist/GraphPaper/GraphPaper.exe --out test-results/native-package + - uses: actions/upload-artifact@v4 + with: + name: GraphPaper-0.6-tested-Windows + path: | + dist/GraphPaper-v0.6.0-Windows-x64.zip + dist/SHA256SUMS.txt + - uses: actions/upload-artifact@v4 + if: always() + with: + name: graph-studio-native-validation + path: test-results/ + publish: + needs: [source, browser, windows] + if: github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + timeout-minutes: 8 + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ needs.source.outputs.revision }} + - uses: actions/download-artifact@v4 + with: + name: GraphPaper-0.6-tested-Windows + path: release-package + - name: Publish the same tested archive, never overwrite an existing release + env: + GH_TOKEN: ${{ github.token }} + run: | + set -eu + cd release-package + sha256sum --check SHA256SUMS.txt + cd .. + if gh release view v0.6.0 >/dev/null 2>&1; then echo 'Release already exists; refusing overwrite.'; exit 1; fi + cp docs/RELEASE-0.6.0.md release-package/notes.md + revision=$(git rev-parse HEAD) + digest=$(sha256sum release-package/GraphPaper-v0.6.0-Windows-x64.zip | cut -d' ' -f1) + printf '\n\nCompiled Windows graph editing and native save-on-close checks passed. Validation: https://github.com/%s/actions/runs/%s . Source: %s . Archive SHA-256: %s .\n' "$GITHUB_REPOSITORY" "$GITHUB_RUN_ID" "$revision" "$digest" >> release-package/notes.md + gh release create v0.6.0 release-package/GraphPaper-v0.6.0-Windows-x64.zip release-package/SHA256SUMS.txt --target "$revision" --title 'GraphPaper 0.6.0 — Ink, paper & spatial graph editing' --notes-file release-package/notes.md --draft + release_id=$(gh api "repos/$GITHUB_REPOSITORY/releases?per_page=100" --jq '.[]|select(.tag_name=="v0.6.0")|.id') + uploaded=$(gh api "repos/$GITHUB_REPOSITORY/releases/$release_id/assets" --jq '.[]|select(.name=="GraphPaper-v0.6.0-Windows-x64.zip")|.digest') + test "$uploaded" = "sha256:$digest" + gh release edit v0.6.0 --draft=false --latest diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index e3854db..8e970c7 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -21,6 +21,7 @@ jobs: cache: pip - run: python -m pip install -q -r requirements-dev.txt - run: python -m pytest -q --junitxml=test-results/results.xml + - run: node --test tests/graph_math.test.cjs - uses: actions/upload-artifact@v4 if: always() with: @@ -36,13 +37,14 @@ jobs: with: python-version: '3.12' - run: python -m pip install -q -r requirements-dev.txt - - run: python -m playwright install --with-deps chromium + - run: python -m playwright install chromium - run: python scripts/ui_smoke.py - run: python scripts/ui_studio_smoke.py - run: python scripts/ui_science_smoke.py - run: python scripts/ui_graphify_smoke.py - run: python scripts/ui_polemic_smoke.py - run: python scripts/ui_voices_smoke.py + - run: python scripts/ui_graph_studio_smoke.py - uses: actions/upload-artifact@v4 if: always() with: diff --git a/.github/workflows/voices-release.yml b/.github/workflows/voices-release.yml deleted file mode 100644 index 9bc3628..0000000 --- a/.github/workflows/voices-release.yml +++ /dev/null @@ -1,141 +0,0 @@ -name: GraphPaper 0.5 hosted Windows release -on: - push: - branches: [main] - paths: ['graphpaper/__init__.py', '.github/workflows/voices-release.yml'] - workflow_dispatch: -permissions: - contents: read -concurrency: - group: graphpaper-0.5-release - cancel-in-progress: true -jobs: - source: - runs-on: ubuntu-latest - timeout-minutes: 5 - permissions: - contents: write - outputs: - sha: ${{ steps.revision.outputs.sha }} - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: '3.12' - - id: revision - name: Record a source-only manifest without changing code or workflows - run: | - python scripts/prepare_assets.py --manifest - git add publish-manifest.json - git diff --cached --check - if ! git diff --cached --quiet; then - git config user.name 'github-actions[bot]' - git config user.email '41898282+github-actions[bot]@users.noreply.github.com' - git commit -m 'Refresh verified v0.5 source publishing manifest' - git push origin HEAD:main - fi - echo "sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT" - validate: - needs: source - runs-on: ubuntu-latest - timeout-minutes: 20 - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ needs.source.outputs.sha }} - - uses: actions/setup-python@v5 - with: - python-version: '3.12' - cache: pip - - run: test "$(python -c 'from graphpaper import __version__; print(__version__)')" = '0.5.0' - - run: python -m pip install -q -r requirements-dev.txt - - run: python -m pytest -q --junitxml=test-results/linux.xml - - run: python scripts/docs_tool.py check - - name: Install the test browser on the hosted Ubuntu image - run: python -m playwright install chromium - - run: python scripts/ui_smoke.py - - run: python scripts/ui_studio_smoke.py - - run: python scripts/ui_science_smoke.py - - run: python scripts/ui_graphify_smoke.py - - run: python scripts/ui_polemic_smoke.py - - run: python scripts/ui_voices_smoke.py - - uses: actions/upload-artifact@v4 - if: always() - with: - name: voices-linux-validation - path: test-results/ - windows: - needs: [source, validate] - runs-on: windows-latest - timeout-minutes: 30 - permissions: - contents: write - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ needs.source.outputs.sha }} - - uses: actions/setup-python@v5 - with: - python-version: '3.12' - cache: pip - - run: python -m pip install -q -r requirements-dev.txt -r requirements-desktop.txt - - run: python -m pytest -q --junitxml=test-results/windows.xml - - name: Verify the hosted Windows WebView2 prerequisite - shell: pwsh - run: ./scripts/prepare_ci_webview.ps1 - - name: Exercise the isolated native source workflow before spending a package build - run: python scripts/native_smoke.py --science --polemic --voices --out test-results/native-source - - name: Build with public Graphify and official Codex - shell: pwsh - env: - GITHUB_TOKEN: ${{ github.token }} - run: ./scripts/build_release.ps1 - - uses: actions/upload-artifact@v4 - with: - name: GraphPaper-v0.5.0-Windows-candidate - path: | - dist/GraphPaper-v0.5.0-Windows-x64.zip - dist/SHA256SUMS.txt - - name: Exercise the compiled native window, voice graphs, Graphify and save-on-close - run: python scripts/native_smoke.py --science --graphify --polemic --voices --executable dist/GraphPaper/GraphPaper.exe --out test-results/native-package - - name: Publish only the successfully tested artifact - shell: pwsh - env: - GH_TOKEN: ${{ github.token }} - run: | - $ErrorActionPreference = 'Stop' - $tag = 'v0.5.0' - $package = 'GraphPaper-v0.5.0-Windows-x64.zip' - $revision = (git rev-parse HEAD).Trim() - $expected = ((Get-Content dist/SHA256SUMS.txt).Split(' ')[0]).Trim().ToLower() - $actual = (Get-FileHash "dist/$package" -Algorithm SHA256).Hash.ToLower() - if ($actual -ne $expected) { throw 'Archive checksum mismatch.' } - gh release view $tag *> $null - if ($LASTEXITCODE -eq 0) { throw 'Release already exists; refusing to overwrite it.' } - $notes = Get-Content docs/RELEASE-0.5.0.md -Raw - $notes += "`n`nBuilt and tested entirely on GitHub-hosted Linux and Windows runners. The compiled Windows application passed its native interaction and save-on-close checks. Validation run: https://github.com/$env:GITHUB_REPOSITORY/actions/runs/$env:GITHUB_RUN_ID . Source revision: $revision . Archive SHA-256: $actual .`n" - $notes | Set-Content test-results/published-release-notes.md -Encoding utf8 - gh release create $tag "dist/$package" dist/SHA256SUMS.txt --target $revision --title 'GraphPaper 0.5.0 - Reusable voice graphs' --notes-file test-results/published-release-notes.md --draft - if ($LASTEXITCODE -ne 0) { throw 'Release upload failed.' } - $releases = gh api "repos/$env:GITHUB_REPOSITORY/releases?per_page=100" | ConvertFrom-Json - $release = $releases | Where-Object { $_.tag_name -eq $tag } - if (-not $release) { throw 'The uploaded draft release could not be found.' } - $asset = $release.assets | Where-Object { $_.name -eq $package } - if ($asset.digest -ne "sha256:$actual") { throw 'Uploaded artifact does not match the tested ZIP.' } - gh release edit $tag --draft=false --latest - if ($LASTEXITCODE -ne 0) { throw 'Release publication failed.' } - - name: Retain native diagnostics from this runner only - if: always() - shell: pwsh - run: | - foreach ($folder in @('native-source','native-package')) { - foreach ($name in @('native.log','desktop.log','report.json')) { - $path = "test-results/$folder/$name" - if (Test-Path $path) { Write-Host "=== $path ==="; Get-Content $path -Tail 80 } - } - } - - uses: actions/upload-artifact@v4 - if: always() - with: - name: voices-windows-validation - path: test-results/ From 8fbbff856aa7cec965f9e07d5408d55cd001bc3a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 8 Oct 2026 16:01:16 +0000 Subject: [PATCH 11/13] Refresh graph studio source publishing manifest --- publish-manifest.json | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/publish-manifest.json b/publish-manifest.json index 788a6f3..5b50242 100644 --- a/publish-manifest.json +++ b/publish-manifest.json @@ -3,16 +3,13 @@ "files": { ".gitattributes": "acdb1038616f95b335ceb851c161a6139bf23561b2a74894a9ccb33ded5e71f4", ".github/topics.json": "341aa983b1829624dec7ab7cd2e83eed08d45bc78305033c1e860631c1227e41", - ".github/workflows/apply-graph-design.yml": "855f906752b43cef05dc2191d57db5d4bee0d0cdc0216a8216c09a91c59c5fde", - ".github/workflows/design-snapshot.yml": "ebda389620cbafa6a1f2c2bf9af505b025469982aace5b71a559c1613929732c", ".github/workflows/docs.yml": "19c4d6229a804adf09358171b19a139b45f1c2630b751213af1e9e62baed2c40", - ".github/workflows/graph-paper-asset.yml": "d0a8b1722901dc0b3b03aa601346b7a40e52ec60f69630b6ca8b08a489fe8a30", + ".github/workflows/graph-studio-release.yml": "743b70fb67cc451c7c3ad9b28c422383d0d4e8eca9c26c58c5b029f707408eef", ".github/workflows/import-build.yml": "c56a990b97242f154907f76059f5b859448ca8de7b582928d63bb3717ac0d60a", ".github/workflows/native-diagnostics.yml": "818584858c3f0dce8ce17ff0ccff9b5984fab6c6d2a1481baa280f841c8cbf53", ".github/workflows/native-probe.yml": "b7e6f3ea3f8fef9e3725ac2a242b7c4be2545bc4491be5ce2e68f723c302bc56", - ".github/workflows/quality.yml": "2ffc5f11447f1cfb5a0f45798df1d217f5d5c4eaf5808270523a69f468f7d9b6", + ".github/workflows/quality.yml": "6253cd001844b75fc1b748749afb3b2d7c3872fb5426c2a29bf9e346e2a4300f", ".github/workflows/voice-manifest.yml": "19647138870a09bbe7835df34ddab4017a91da9c1937444a32f3a35b9ef1fa88", - ".github/workflows/voices-release.yml": "174a8f98f2fda23f938299e347d09a3615ac7a3b07a962bb952d164a5ba2be28", ".github/workflows/windows.yml": "65512954b719620063384ce93950b89c9b0aaac2ad6c7c620d505f8787b0444a", ".gitignore": "229a84e2b07c91b31c30f06df236ea17fe211eb75b217adc2eecb3f9d377f9bf", "CHANGELOG.md": "e288d09d51cac8ee952e63958b8ca8e23e2d77f1b5d51def57b2ed4e7f3dbd1a", From 7d2ae5282ea9a0ebdc81c306c94d450b1303ca5d Mon Sep 17 00:00:00 2001 From: Aron Bijl Date: Thu, 8 Oct 2026 18:09:18 +0200 Subject: [PATCH 12/13] Keep dense graph depth bounded and distribute many communities across the view --- tests/graph_math.test.cjs | 1 + ui/graph_math.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/graph_math.test.cjs b/tests/graph_math.test.cjs index 04d3663..b47c83f 100644 --- a/tests/graph_math.test.cjs +++ b/tests/graph_math.test.cjs @@ -5,3 +5,4 @@ test('actual XYZ depth rotates into screen position, 2D ignores z',()=>{if(!M)re test('large graphs are bounded and search can find a hidden low-degree node',()=>{if(!M)return;const nodes=Array.from({length:1000},(_,i)=>({id:'n'+i,label:i===999?'Hidden target':'Node '+i,kind:'concept'}));const edges=nodes.slice(1).map(n=>({source:'n0',target:n.id,relation:'supports'}));let v=M.visible({nodes,edges},{limit:60});assert.equal(v.nodes.length,60);assert.ok(v.edges.length<=M.MAX_EDGES);v=M.visible({nodes,edges},{limit:60,search:'Hidden target'});assert.ok(v.nodes.some(n=>n.id==='n999'));}); test('focus includes exact neighborhood and matching relation filters',()=>{if(!M)return;const g={nodes:['a','b','c','d'].map(id=>({id,label:id})),edges:[{id:'1',source:'a',target:'b',relation:'supports'},{id:'2',source:'b',target:'c',relation:'contradicts'}]};assert.deepEqual(M.visible(g,{focus:'a',hops:1}).nodes.map(n=>n.id).sort(),['a','b']);assert.equal(M.visible(g,{relation:'contradiction'}).edges.length,1);assert.equal(M.relation('is adjacent to'),'association');assert.equal(M.relation('does not support'),'association');}); test('layout is deterministic, finite and does not modify source graph',()=>{if(!M)return;const nodes=Array.from({length:60},(_,i)=>({id:'n'+i,label:'Node '+i,kind:'concept',community:i%4}));const edges=nodes.slice(1).map((n,i)=>({source:n.id,target:'n'+i}));const copy=JSON.stringify({nodes,edges});const a=M.layout(nodes,edges);assert.deepEqual(a,M.layout(nodes,edges));assert.equal(copy,JSON.stringify({nodes,edges}));assert.ok(Object.values(a).every(p=>['x','y','z'].every(k=>Number.isFinite(p[k]))));assert.ok(Object.values(a).some(p=>p.z!==0));}); +test('many communities do not stretch depth until the overview collapses',()=>{const nodes=Array.from({length:60},(_,i)=>({id:'island'+i,label:'Idea '+i,kind:'concept',community:i}));const positions=M.layout(nodes,[]);assert.ok(Object.values(positions).every(p=>Math.abs(p.z)<=180),'Depth must stay bounded independently of the community count');}); diff --git a/ui/graph_math.js b/ui/graph_math.js index 102c642..85ab7c8 100644 --- a/ui/graph_math.js +++ b/ui/graph_math.js @@ -26,7 +26,7 @@ const communities=new Set(sorted.map(n=>n.community||0)),useCommunity=communities.size>1; const groups=new Map();for(const n of sorted){const key=useCommunity?'c'+(n.community||0):kind(n.kind);if(!groups.has(key))groups.set(key,[]);groups.get(key).push(n);} const keys=[...groups.keys()].sort(),centers={},ring=keys.length>1?Math.max(180,Math.sqrt(nodes.length)*36):0; - keys.forEach((key,j)=>{const theta=j*2*Math.PI/keys.length-.5;centers[key]={x:Math.cos(theta)*ring*1.2,y:Math.sin(theta)*ring*.85,z:(j-(keys.length-1)/2)*65};groups.get(key).forEach((n,i)=>{const t=i*2.399963,r=55*Math.sqrt(i+1),c=centers[key];positions[n.id]={x:c.x+Math.cos(t)*r,y:c.y+Math.sin(t)*r,z:c.z+Math.sin(t*1.31)*70};});}); + keys.forEach((key,j)=>{const many=keys.length>8,theta=many?j*2.399963:j*2*Math.PI/keys.length-.5,radius=many?ring*Math.sqrt((j+.5)/keys.length):ring;centers[key]={x:Math.cos(theta)*radius*1.35,y:Math.sin(theta)*radius*.9,z:Math.sin(theta)*90};groups.get(key).forEach((n,i)=>{const t=i*2.399963,r=55*Math.sqrt(i+1),c=centers[key];positions[n.id]={x:c.x+Math.cos(t)*r,y:c.y+Math.sin(t)*r,z:c.z+Math.sin(t*1.31)*70};});}); for(let step=0;step<64;step++){ const forces=Object.create(null);for(const n of sorted)forces[n.id]={x:-positions[n.id].x*.002,y:-positions[n.id].y*.002}; for(let i=0;i Date: Thu, 8 Oct 2026 16:09:36 +0000 Subject: [PATCH 13/13] Refresh graph studio source publishing manifest --- publish-manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/publish-manifest.json b/publish-manifest.json index 5b50242..76c402c 100644 --- a/publish-manifest.json +++ b/publish-manifest.json @@ -205,7 +205,7 @@ "scripts/voice_ui_checks.py": "120c54529db6205d883f3011e6e50549468f35f4dc91a3b185de8b788c46e4bf", "tests/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "tests/conftest.py": "fb734bdc191b96cc60a20d83a4fbeea7b032a35e1b882a09d1cb80167e9bb1a4", - "tests/graph_math.test.cjs": "78d05cc37b25eca4551e1061db1275363901e6445437ffdde97ef077537d6dff", + "tests/graph_math.test.cjs": "96388ec98cd144e6b650a536ffa04250f58606b5787452dabfe736f79bee28f8", "tests/graphify_fixtures.py": "6961e0ceca4a78fca57baa9d9ab9f748e587e8d73adb7fc2d25b791716202e00", "tests/graphify_http_fixture.py": "86b51983fcb1d91b0138cb72cda7ba7941e30d4e9caf8f21c64b3d49a2e2265b", "tests/polemic_fixtures.py": "32429610e320e75fb4476be65597827276100b3ee0b556b77d558dace8f5cc9c", @@ -240,7 +240,7 @@ "ui/assets/CREDITS.md": "e9672e1c683f7db3e5265c52ea98fda9e8eec260e0a251ffa3065e85ebcffd77", "ui/assets/graph-paper.json": "0b37ff27703f8f6adfcd4d05037a594d526749d9641cb6cd226efe1dcc09f687", "ui/assets/graph-paper.webp": "d6b0df4e72784fce9cb72693c6aa4156d39efcdb4859c686a0f643ea5d066701", - "ui/graph_math.js": "8fe46c5f44ceb7577ea4ce0d8b0d8d992c25d2f41398738a1c536719f0469d1c", + "ui/graph_math.js": "bcdae1e2f4c15390bfc5c671a72b46bc3215b5997dc328bda1c8a0b39df59315", "ui/graph_studio.css": "4de0fc25d74ccfa57e8c8d48cc4881cd9de075f3b60f2e106328fccec29b61cb", "ui/graph_studio.js": "baa995d76d57a7887ad928cde3179bb6658afc1b1c7dab86a0c13f743b1025fb", "ui/graphify.js": "1bad42f86764de73c5e9411cca64d0c86d3bdfecaa8682be3e0728663b85d18c",