Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ jobs:
with:
python-version: '3.12'
- run: python -m unittest discover -s tests -p test_documentation_tools.py -v
- run: python -m unittest discover -s docs/tests -p 'test_*.py' -v
- run: python scripts/docs_tool.py check
- run: python scripts/docs_tool.py render-wiki --output test-results/wiki-preview
- uses: actions/upload-artifact@v4
Expand All @@ -61,3 +62,32 @@ jobs:
env:
GH_TOKEN: ${{ github.token }}
run: python scripts/docs_tool.py publish-wiki
- name: Verify the published wiki against the checked documentation
env:
GH_TOKEN: ${{ github.token }}
run: |
set -eu
git -c credential.helper= -c 'credential.helper=!gh auth git-credential' clone --depth 1 https://github.com/AronAxe/GraphPaper.wiki.git /tmp/graphpaper-wiki-verify
python - <<'PYVERIFY'
from pathlib import Path
import hashlib,json,subprocess
from scripts.docs_tool import render
root=Path.cwd();wiki=Path('/tmp/graphpaper-wiki-verify')
conf,pages=render(root)
for name,expected in pages.items():
actual=(wiki/name).read_text(encoding='utf-8')
assert actual==expected,'Published wiki differs: '+name
manifest=json.loads((wiki/'.graphpaper-wiki.json').read_text())
assert manifest['docs_version']==conf['docs_version']
for name,expected in pages.items():
assert manifest['files'][name]==hashlib.sha256(expected.encode()).hexdigest()
report={'ok':True,'docs_version':conf['docs_version'],'source_revision':subprocess.check_output(['git','rev-parse','HEAD'],text=True).strip(),'wiki_revision':subprocess.check_output(['git','-C',str(wiki),'rev-parse','HEAD'],text=True).strip(),'guides':len(conf['pages']),'navigation_files':2,'verified_files':sorted(pages)}
output=root/'test-results/wiki-publication';output.mkdir(parents=True,exist_ok=True)
(output/'report.json').write_text(json.dumps(report,indent=2)+'\n')
for name in pages:(output/name).write_bytes((wiki/name).read_bytes())
print(json.dumps(report,indent=2))
PYVERIFY
- uses: actions/upload-artifact@v4
with:
name: published-wiki-verification
path: test-results/wiki-publication/
17 changes: 10 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,25 +55,28 @@ The portable build needs Microsoft Edge WebView2 and is currently unsigned. Exis

## What makes it useful

- **Explore before committing.** Inspect source-linked concepts and relationships, follow paths, pin ideas and compare competing angles. Edit a suggested thesis or write your own.
- **Keep your voice.** Learn an editable style profile from your writing samples or selected articles at an author URL. Adjust its influence rather than accepting a generic house style.
- **Explore before committing.** Orbit or flatten the graph, filter and focus its neighborhoods, and edit nodes and connections directly. Follow source links, pin ideas, undo graph edits and choose your own angle.
- **Keep your voice.** Save a reusable voice graph from your writing samples or selected articles, then apply it across projects without retraining. Edit its habits and influence; your current instructions remain in charge.
- **Improve prose without losing the original.** Humanize and Deslop offer separate or combined passes, protected factual spans, side-by-side proposals and explicit acceptance.
- **Work from a project folder.** Drop documents into a project’s Inbox. Role-specific subfolders distinguish evidence, canon, inspiration and voice samples; idle-time imports do not trigger paid model calls.
- **Choose where reasoning happens.** Configure writer, editor and extraction models separately, with provider-native reasoning controls. Optional JEV evaluates graph candidates, evidence gaps and revision decisions.
- **Do traceable literature work.** Search PubMed, Semantic Scholar, arXiv, Crossref and Europe PMC; screen papers, inspect accessible text and export the search log with the manuscript.

## Inside GraphPaper

![Graph exploration in GraphPaper](docs/images/graph.webp)
*The graph workspace, using the included illustrative project.*
![GraphPaper 0.6 spatial graph studio with real graph-paper sidebar](docs/images/graph-studio-v0.6.webp)
*Actual v0.6 interface: the included illustrative project, spatial graph controls and colored connections. [Visual tour and capture provenance](docs/VISUAL-TOUR.md).*

<details>
<summary><strong>Science research desk and writing workspace</strong></summary>
<summary><strong>Science, writing and reusable voice graphs — v0.6 screenshots</strong></summary>

![Science research desk](docs/images/research-v0.3.webp)
![GraphPaper 0.6 Science research desk](docs/images/research-v0.6.webp)
*Actual interface with clearly labelled synthetic workflow-test material.*

![Writing workspace](docs/images/writing.webp)
![GraphPaper 0.6 writing workspace](docs/images/writing-v0.6.webp)

![GraphPaper 0.6 reusable voice library](docs/images/reusable-voice-v0.6.webp)
*The editable voice mini-graph, with a synthetic style example. Save once, reuse across projects.*

</details>

Expand Down
4 changes: 3 additions & 1 deletion docs/CONNECTIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ Higher effort can increase latency and token consumption. It does not set the ma

JEV has its own **Auto, OpenRouter, TypeSafe or Off** selector. Auto prefers an available OpenRouter credential, then direct TypeSafe. It does not silently switch routes after a failed paid request.

The application preflights serialized request size and automatically batches decisions. Voice training articles are excluded from those requests; optional decisions that cannot fit stay unscored. [Request-sizing behavior](VOICE-GRAPHS.md#why-jev-no-longer-receives-the-whole-heap).

Without JEV, writing remains available and graph candidates are explicitly unscored. Codex OAuth does not include a JEV connection. [JEV’s role in the workflow →](GRAPH-AND-JEV.md)

## Scholarly database keys
Expand All @@ -67,6 +69,6 @@ Advanced settings include maximum requests per job, output-token cap, context bu

Never put keys into prompts, screenshots, issue reports or project documents. [Credential storage and privacy →](SECURITY.md)

## External Graphify in 0.3.1
## External Graphify

Choose **Graphify (external process)** under Advanced limits & Graphify. Leave the custom path blank for the included Windows runtime. **Check Graphify runtime** does not call a model. The external action now uses this same provider connection, including Codex OAuth, with the extraction-role model and reasoning setting. [Detailed setup and distribution](UPDATE-0.3.1.md).
57 changes: 57 additions & 0 deletions docs/FAQ.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Frequently asked questions

These answers describe GraphPaper **0.6.0**. For error-specific steps, see [Troubleshooting](TROUBLESHOOTING.md).

## Do I need to rebuild my graph after upgrading?

No. Open the existing project's Graph tab. The new renderer works with stored graphs. Rebuild when source material changes and you need fresh extraction, not merely because the interface changed. [Graph studio](GRAPH-STUDIO.md).

## Why am I seeing only 60 nodes?

That is the default display budget, not the size of the stored graph. **Show** offers 40, 60, 100 or 180 nodes; at most 360 connections are drawn at once. Search examines the whole graph, including nodes outside the current overview. Nothing is deleted by a display filter.

## How do I untangle a dense graph?

Click the important node and choose **Focus here**. Use one or two hops, filter node/connection types, or **Spread nodes apart**. Scroll to zoom, drag the canvas to orbit, Shift-drag to pan, and switch to **2D** for a flat view. **Fit graph** and **Reset filters** provide a route back. [All controls](GRAPH-STUDIO.md#navigate-without-losing-the-thread).

## Can I edit the graph rather than just look at it?

Yes. Click a node or a connection, edit its fields and choose **Save node** or **Save connection**. **Add node**, **Connect nodes** and confirmed deletion are available. **Undo edit** can reverse up to 25 recent manual graph edits, but does not overwrite a graph that has since been rebuilt or replaced. Source documents and the manuscript are separate from these edits.

## Is 3D a real interactive view?

Yes: XYZ positions are projected with perspective and depth sorting, and you can rotate the view. It is rendered using SVG, not WebGL, so it does not require a separate GPU graph engine. It is not a generated mockup. Camera and arranged positions are local view settings and are not currently part of a portable project export.

## How do I reuse my writing voice?

Save the profile under **Your writing voice → Save as reusable voice**. In another project, select it in **My voices → Use in this project**. The compact voice graph is applied without copying the training articles or running a model. To create a new voice, add material under the library's Training pieces and learn it once. [Reusable voices](VOICE-GRAPHS.md).

## Can a voice force polite language or override my current brief?

The saved voice is a default, not an editor with veto power. Your current brief and explicit instructions take precedence. Strong language, sarcasm, satire and indignation are valid choices; rhetorical force does not require lowering evidence requirements. Use Polemic or Nonfiction's **Develop and defend my position**, then refresh old angles. [Authorial intent](POLEMIC.md).

## Does Codex sign-in also authenticate JEV?

No. Codex supplies the writing/extraction route. JEV has a separate OpenRouter or TypeSafe connection and is optional. With it off, writing remains available and missing evaluations are not presented as real scores. [Connections](CONNECTIONS.md#optional-jev).

## Why did an older version say JEV exceeded 60,000 characters?

That was an application request-sizing failure. Since v0.5, requests are checked by their serialized UTF-8 size and split by questions/candidates before sending. JEV receives compact voice context, not the raw training library. An indivisible oversized optional decision remains explicitly unscored rather than aborting completed writing. The 60 KB budget is GraphPaper's transport budget, not a universal JEV limit. [Request sizing](VOICE-GRAPHS.md#why-jev-no-longer-receives-the-whole-heap).

## Do I need to install Graphify separately?

Not for the Windows release. Select **Graphify (external process)** and leave **Custom Graphify executable** empty to use the included 0.9.80 runtime. **Check Graphify runtime** makes no model call. An explicit custom path takes precedence and must be compatible. [Setup](CONNECTIONS.md#external-graphify).

## What uses model allowance or API credit?

Extraction, learning a voice, generating angles/outlines/drafts, model review and prose-editing passes can make calls. Navigation, manual edits, applying a saved voice, exporting and local prose inspection do not. A connection test makes a small real call. URL fetching and database search are separate network operations. Missing provider cost is unknown, not free; cancellation cannot refund a submitted request.

## Where are my projects, voices and backups?

The normal Windows directory is `%LOCALAPPDATA%\GraphPaper`. SQLite holds project state and the global voice library; project folders hold imports and preserved originals. Project JSON exports include the project's applied compact voice snapshot, not the complete global training library or revision history. Close the application and back up its data directory for complete local history; protect credentials in that backup. [Storage and recovery](PROJECTS-AND-SOURCES.md).

## Does Science mode perform experiments or guarantee journal acceptance?

No. It supports scholarly search, screening, source appraisal and manuscript preparation. Do not represent a literature-based manuscript as an experiment the software conducted. APA formatting and an export checklist do not replace author verification, editorial peer review or ethics approval. [Science workflow](SCIENCE.md).

[Getting started](GETTING-STARTED.md) · [Visual tour](VISUAL-TOUR.md) · [Troubleshooting](TROUBLESHOOTING.md)
7 changes: 5 additions & 2 deletions docs/GETTING-STARTED.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,22 +28,25 @@ Leave reasoning at **Provider default** initially, or load the model catalog and
Give it a working title, a target length and a direction. Choose a mode deliberately:

- **Nonfiction:** source-linked articles and essays.
- **Polemic:** argument, satire and opinion that preserve your stated position.
- **Fiction:** stories, character decisions, scenes and canon.
- **Science:** scholarly searching, evidence appraisal and academic manuscripts.

Mode is chosen at project creation; the interface does not provide a conversion button for an existing project. A title can be changed without changing the project’s identity or folder.
For an existing project, choose **current mode · Change**, select the mode and apply it. Sources, graph, voice, angles, outline and manuscript remain stored. Check the Creative brief and refresh affected generated work afterward; changing modes does not silently rewrite it. A title can be changed without changing the project’s identity or folder.

## 4. Add useful material

In **Sources**, upload supported documents, paste text or import a public article URL. Choose the appropriate source role: **Evidence**, **Canon**, **Inspiration** or **Voice**. Review extracted text, especially PDFs and tables.

For fiction, a premise and canon in the **Creative brief** can be enough to begin. Science starts at the **Research** desk; include retrieved papers to turn them into project evidence sources.

For a reusable style, open **My voices** from the voice controls and use a saved voice, or add training pieces there and learn one. Existing learned profiles can be saved through **Your writing voice → Save as reusable voice** without retraining. [Voice graphs](VOICE-GRAPHS.md).

The **Project folder** button opens the workspace in Explorer. Files dropped into its Inbox are imported while the project is open and idle; that import alone does not run an AI task. [Sources and folders →](PROJECTS-AND-SOURCES.md)

## 5. Explore, choose and structure

For nonfiction or fiction, build the graph. Select concepts and relationships to inspect their source anchors. Pin ideas you want to emphasize; exclude distractions. Then **Discover angles**.
For nonfiction, fiction or polemic, build the graph once from your material. An existing graph needs no rebuild just to use the v0.6 interface. Drag the background to orbit, Shift-drag to pan and scroll to zoom, or choose **2D**. Select a node or line to inspect and edit it; **Focus here** reduces clutter. Pin ideas you want to emphasize; exclude distractions. Then **Discover angles**. [Graph navigation, editing and undo](GRAPH-STUDIO.md).

Choose a suggested direction, edit its thesis or write your own. Develop an outline and review each section’s purpose, source assignments and word allocation before generating a full draft.

Expand Down
10 changes: 7 additions & 3 deletions docs/GRAPH-AND-JEV.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ External Graphify nodes also retain source-file links. These pointers support re

## Navigate and guide discovery

Select nodes or relationships to inspect descriptions and evidence. Drag nodes, pan, zoom or fit the view. Search by label to find relevant concepts in a large graph.
Select nodes or relationships to inspect descriptions and evidence, or edit their wording. In 3D, drag the background to orbit, Shift-drag to pan, and scroll to zoom; 2D gives a flat pannable view. Search the whole graph by titles, notes or relationship names. **Focus here**, type filters and connection filters reduce clutter. [Full graph controls, editing and undo](GRAPH-STUDIO.md).

**Pin** concepts to emphasize them. **Exclude** distractions from candidate discovery. Edit the direction and the exploration/evidence-discipline settings beside the graph. These controls influence exploration; they do not permit unsupported reasoning.

**Find a path** highlights an undirected conceptual connection between two nodes. The highlighted sequence is not a causal proof. A graph can connect two concepts through a vague intermediate node while contributing little to a defensible article.

For responsiveness, the view displays at most 180 nodes at a time; the complete graph remains in the project. Imports are bounded to 5,000 nodes and 20,000 edges. The interface shows when it is displaying only part of a large graph.
The default overview displays 60 nodes; **Show** offers 40, 60, 100 or 180. At most 360 links are drawn. These are view limits: the complete stored graph remains available to search and downstream work. Imports are bounded to 5,000 nodes and 20,000 edges. The footer reports displayed versus stored data.

## How angles are discovered

Expand All @@ -51,6 +51,10 @@ This is more than a score attached to a finished article. It helps decide which

With JEV off, structural exploration still works and results are not given fabricated scores. With the optional automatic refinement enabled, an unconfirmed revision can be retained as a candidate version rather than replacing the original. A recommendation to research is a workflow signal; in ordinary nonfiction it does not mean a web search has secretly run.

## Request sizing and voice context

JEV receives compact style-graph context and relevant decision material, not raw voice-training articles. The complete serialized UTF-8 envelope is checked before sending; candidates and questions are automatically batched while preserving their IDs. The 60 KB limit is an application transport budget, not a general JEV capability limit. An indivisible oversized optional decision stays explicitly unscored; it does not abort completed writing or approve a revision by default. [Details](VOICE-GRAPHS.md#why-jev-no-longer-receives-the-whole-heap).

## When to rebuild

After adding, changing, excluding or reclassifying sources, rebuild before relying on graph coverage. Scientific screening can change the enabled evidence set as well. Inspect important connections again when their underlying material changes.
Expand All @@ -59,4 +63,4 @@ A stronger graph is useful only if it leads to a better argument or story. The [

## Argument-led angle discovery

Polemic generates alternative routes into your thesis, not alternative opinions on whether you may hold it. JEV now receives the author voice and editorial contract and scores stance/voice fidelity explicitly. Counterarguments are optional and must be directly consequential. Brief or voice changes mark old angles as stale; refresh them without re-running Graphify. [Authorial-intent controls](POLEMIC.md).
Polemic generates alternative routes into your thesis, not alternative opinions on whether you may hold it. JEV receives compact author-voice context and the editorial contract and scores stance/voice fidelity explicitly. Counterarguments are optional and must be directly consequential. Brief or voice changes mark old angles as stale; refresh them without re-running Graphify. [Authorial-intent controls](POLEMIC.md).
3 changes: 3 additions & 0 deletions docs/GRAPH-STUDIO.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# The graph studio: ink, paper and space

![Actual v0.6 graph workspace using the included illustrative example.](images/graph-studio-v0.6.webp)
*Actual v0.6 graph workspace using the included illustrative example. [Capture details](VISUAL-TOUR.md).*

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
Expand Down
Loading
Loading