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
1 change: 1 addition & 0 deletions .github/workflows/quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ jobs:
- 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
- uses: actions/upload-artifact@v4
if: always()
with:
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ jobs:
- 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
windows:
needs: quality
runs-on: windows-latest
Expand All @@ -36,7 +37,7 @@ jobs:
GITHUB_TOKEN: ${{ github.token }}
run: ./scripts/build_release.ps1
- name: Exercise the actual Windows window, native dialogs and save-on-close
run: python scripts/native_smoke.py --science --executable dist/GraphPaper/GraphPaper.exe --out test-results/native-package
run: python scripts/native_smoke.py --science --graphify --executable dist/GraphPaper/GraphPaper.exe --out test-results/native-package
- uses: actions/upload-artifact@v4
with:
name: GraphPaper-Windows-x64
Expand All @@ -52,7 +53,7 @@ jobs:
$version = python -c "from graphpaper import __version__; print(__version__)"
if ($env:GITHUB_REF_NAME -ne "v$version") { throw 'Tag does not match application version.' }
gh release view $env:GITHUB_REF_NAME *> $null
if ($LASTEXITCODE -ne 0) { gh release create $env:GITHUB_REF_NAME --verify-tag --title "GraphPaper $env:GITHUB_REF_NAME" --notes-file docs/RELEASE-0.3.0.md }
if ($LASTEXITCODE -ne 0) { gh release create $env:GITHUB_REF_NAME --verify-tag --title "GraphPaper $env:GITHUB_REF_NAME" --notes-file docs/RELEASE-0.3.1.md }
$packageName = "GraphPaper-v$version-Windows-x64.zip"
$release = gh release view $env:GITHUB_REF_NAME --json assets | ConvertFrom-Json
if ($release.assets.name -contains $packageName) {
Expand Down
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# Changelog

## 0.3.1

- Repair external Graphify extraction with the configured provider, including official Codex OAuth and extraction-role reasoning.
- Bundle pinned public Graphify 0.9.80, SDKs, metadata, tokenizer cache and licences in Windows builds; publish explicit source requirements.
- Route job-scoped inference through an authenticated loopback adapter, with shared accounting, no API fallback and no duplicate Native extraction.
- Preserve source-file provenance into graph inspection and angle retrieval; reject malformed/partial graph results.
- Add runtime diagnostics, deadline/cancellation coverage, compatibility tests, actual external-worker tests and compiled-native release gates.


## 0.3.0

- Provider-native, model-aware reasoning effort for writer/editor/extraction roles, with Codex catalog support and explicit thinking budgets.
Expand Down
2 changes: 1 addition & 1 deletion GraphPaper.pyw
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ CONSOLE_PYTHON = RUNTIME / ("Scripts/python.exe" if os.name == "nt" else "bin/py
STAMP = RUNTIME / "graphpaper-requirements.sha256"
NO_WINDOW = subprocess.CREATE_NO_WINDOW if os.name == "nt" else 0
requirements = ROOT / "requirements-desktop.txt"
fingerprint = hashlib.sha256(requirements.read_bytes() + (ROOT / "requirements.txt").read_bytes()).hexdigest()
fingerprint = hashlib.sha256(requirements.read_bytes() + (ROOT / "requirements.txt").read_bytes() + ((ROOT / "requirements-graphify.txt").read_bytes() if (ROOT / "requirements-graphify.txt").exists() else b"")).hexdigest()


def launch():
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ GraphPaper is a **local-first writing studio for nonfiction, fiction and scienti

Use **Codex / ChatGPT sign-in** or your own model API. Keep control of the argument, the evidence and the final words.

**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)

## Three ways to write

| Mode | Start with | Build toward |
Expand Down
6 changes: 5 additions & 1 deletion docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ The optional automatic revision is bounded, not an open-ended agent loop. JEV ju

Graph view limits are distinct from stored-graph size. Character budgets are not exact tokenizer counts for every model. Source packs contain selected passages rather than a promise that every request sees the entire library. A voice profile is source-informed prompting, not fine-tuning.

Graphify is optional external execution with separate costs. Scholarly records, preprints and abstract-only sources are not automatically validated science. Citation matching samples support; it cannot prove every inference.
Graphify is an optional graph engine with a bundled public runtime in Windows releases. Its external worker calls a job-scoped loopback gateway; GraphPaper routes the selected extraction provider/model/effort and records the usage. There is no duplicate Native pass. Scholarly records, preprints and abstract-only sources are not automatically validated science. Citation matching samples support; it cannot prove every inference.

The application is not currently documented as a multi-user server, an MCP service or an installed agent plugin. Future integrations should preserve explicit project permission and avoid exposing credentials. [Development](DEVELOPMENT.md) and [Security](SECURITY.md) describe the corresponding checks.

## External Graphify runtime boundary

`graphify_worker.py` hosts the unmodified pinned public CLI in a separate process. `graphify_gateway.py` implements its authenticated, text-only loopback completion endpoint. `graphify_runtime.py` probes availability and prepares an isolated environment; `graphify_process.py` manages owned process lifetimes. The adapter validates the complete graph before the existing optimistic project save. File provenance remains a retrieval pointer, not a truth status. [Protocol and distribution](UPDATE-0.3.1.md).
4 changes: 4 additions & 0 deletions docs/CONNECTIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,7 @@ Cloud generation requires explicit permission to send project material. URL impo
Advanced settings include maximum requests per job, output-token cap, context budget in **characters**, candidate count and request timeout. A request limit is not a monetary cap. Provider-reported cost is displayed when supplied; missing cost stays unknown. Cancellation cannot undo a request already submitted.

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

## External Graphify in 0.3.1

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).
4 changes: 4 additions & 0 deletions docs/DEVELOPMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,3 +85,7 @@ Preserve user artwork and verify its path/hash when reorganizing README content.
Open a focused issue or pull request explaining the user-visible behavior, the change and the checks you actually ran. Include a non-confidential reproduction when useful. Do not commit runtime binaries, test environments, credentials, manuscript databases or real private source documents.

For application releases, continue with [Packaging](PUBLISHING.md). For sensitive disclosures, use a private route to the maintainer and read [Security](SECURITY.md).

## External Graphify in 0.3.1

The full developer/test requirements include the public pinned Graphify distribution. Run `python scripts/prepare_graphify.py` for tokenizer/licence assets, `python scripts/check_graphify.py` for an isolated real-worker test with synthetic inference, and `python scripts/ui_graphify_smoke.py` for its graphical workflow. Windows builds also test the frozen worker. Opt-in live Codex testing is documented in the check script and requires an explicitly selected existing official account profile. [Detailed setup and distribution](UPDATE-0.3.1.md).
4 changes: 2 additions & 2 deletions docs/GRAPH-AND-JEV.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ The graph is an inspectable map of ideas and possible relationships. It helps di

**Import graph** accepts Graphify/NetworkX-style node-link JSON with `nodes` and either `edges` or `links`. Imported relationships remain unverified. External confidence values are not promoted to evidence.

**Graphify CLI** is optional for an existing trusted installation. It runs separately, with its own model requests, and native extraction adds source checking. It is not bundled with the Windows release. [Technical integration details →](INTEGRATIONS.md#graphify)
**Graphify (external process)** uses the public Graphify 0.9.80 runtime included with the Windows release. It builds the graph separately, while GraphPaper supplies your selected extraction model and reasoning setting, including Codex OAuth, and accounts for the requests. No second Native pass runs. Leave the custom executable path blank for the bundled runtime. [Setup and public dependency strategy](UPDATE-0.3.1.md)

## Read the status, not only the picture

Expand All @@ -20,7 +20,7 @@ The graph is an inspectable map of ideas and possible relationships. It helps di
| **Proposed** | A possibility to develop or examine |
| **Imported** | External graph content that has not been verified against this project’s sources |

Quoted text is checked for occurrence in the imported source. It can still be misleading, disputed or insufficient to support the claim. Read the surrounding passage.
External Graphify nodes also retain source-file links. These pointers support retrieval for angle evaluation without pretending the file proves a relationship. Quoted text is checked for occurrence in the imported source. It can still be misleading, disputed or insufficient to support the claim. Read the surrounding passage.

## Navigate and guide discovery

Expand Down
16 changes: 7 additions & 9 deletions docs/INTEGRATIONS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Integration reference

This page describes the interfaces implemented in GraphPaper 0.3.0. User-facing setup is in [Models and reasoning](CONNECTIONS.md). External endpoints, model IDs and capability vocabularies can change independently; consult the linked primary documentation and test a connection before a large job.
This page describes the interfaces implemented in GraphPaper 0.3.1. User-facing setup is in [Models and reasoning](CONNECTIONS.md). External endpoints, model IDs and capability vocabularies can change independently; consult the linked primary documentation and test a connection before a large job.

## Writing providers

Expand Down Expand Up @@ -46,19 +46,17 @@ Primary references: [NCBI](https://www.ncbi.nlm.nih.gov/home/develop/api/), [Sem

## Graphify

Native extraction does not require Graphify. Imported Graphify/NetworkX JSON supports `nodes` and either `edges` or `links`; relationships are not accepted as factual evidence merely because the JSON supplies a confidence value.
Native extraction remains independently available. External extraction runs the unmodified public `graphifyy[openai]==0.9.80` CLI. The Windows package includes its dependencies, metadata, tokenizer cache and upstream licences; source environments use [requirements-graphify.txt](../requirements-graphify.txt).

The optional CLI adapter invokes a user-selected executable without a shell, prepares enabled non-voice source text in a temporary folder and selects the configured provider backend. Its command contract includes:
The worker receives only an isolated non-voice text corpus and a per-job loopback credential. It calls Graphify's OpenAI-compatible backend, but the authenticated local gateway routes inference through **GraphPaper's selected extraction provider, model and reasoning setting**. This includes official Codex OAuth, OpenRouter, API-compatible and Anthropic connections. No real provider/OAuth credential is passed to Graphify, and no API-key fallback is introduced.

```text
graphify extract <temporary-source-folder> --backend openai --mode deep --no-viz --no-cluster --token-budget 4000 --max-concurrency 2
```
Graphify requests share GraphPaper's budget and receipts. Extraction is serial; upstream retry layers are disabled to avoid multiplying requests. The total deadline and cancellation cover owned workers. A previously submitted cloud request can still consume allowance after cancellation. Invalid, missing, oversized, empty or dangling graph output does not replace the previous graph. No second Native extraction is run.

For direct Anthropic it selects the corresponding Claude backend. The adapter looks for `graphify-out/graph.json` or `graph.json` and adds native evidence extraction. Version compatibility must be checked against the installed Graphify executable. Graphify is not bundled, and the external process has not been validated by a live run in the recorded GraphPaper release tests.
The output remains an external interpretation. Source-file IDs are retained as retrieval pointers, not truth labels; exact quotation anchors are checked separately. The native graph UI and angle discovery use the completed result.

Graphify’s calls and retries are outside GraphPaper’s internal request/cost meter. Codex subscription sign-in is not a drop-in API credential for this external adapter; use native extraction with Codex or provide the external process with its supported API connection.
A custom executable is an explicit trust choice and must match the supported upstream version. Its version check is not a full audit of that custom environment. [Complete protocol, runtime and distribution guide](UPDATE-0.3.1.md)

Project references: [Graphify repository](https://github.com/Graphify-Labs/graphify), [Graphify documentation](https://docs.graphify.com).
Primary references: [public Graphify distribution](https://pypi.org/project/graphifyy/0.9.80/), [upstream source](https://github.com/Graphify-Labs/graphify), [Codex non-interactive execution](https://developers.openai.com/codex/noninteractive).

## Local API and desktop bridge

Expand Down
8 changes: 8 additions & 0 deletions docs/QUALITY.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Validation and quality

## Version 0.3.1 validation

217 automated Windows tests passed (1 platform-permission skip). All 44 browser workflow checks passed, all 10 native-source checks passed, and all 15 checks against the actual compiled executable passed. The compiled-native checks include a real public Graphify worker with synthetic model transport, source provenance, native Save As and save-on-close.

Real Codex-backed extraction was verified separately with synthetic documents and the packaged Graphify worker, using the explicitly selected `gpt-6-luna` model at `low` reasoning. It used 1 model request(s), with no duplicate Native pass or API-key fallback. Exact outcomes, dependency versions and platform results are recorded in `docs/validation/v0.3.1`. This is not a claim of paid API testing for every provider or a macOS desktop build.

The legacy native-test waits were too short on some cold Windows runs. The harness now waits for actual extraction readiness and records export diagnostics while retaining bounded cancellation and shutdown checks. Earlier reports below are historical.

Passing software tests and producing a better article are different questions. This page keeps recorded release checks, live service checks and editorial evaluation separate.

## Recorded validation: GraphPaper 0.3.0
Expand Down
2 changes: 1 addition & 1 deletion docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

**A studio for connected thought.** GraphPaper brings source material, graph exploration and a writing desk into one local-first Windows application.

These guides describe **GraphPaper 0.3.0**. The [release page](https://github.com/AronAxe/GraphPaper/releases/latest) provides the current Windows download; [CHANGELOG](../CHANGELOG.md) records version history. The same guides are published in the [GitHub wiki](https://github.com/AronAxe/GraphPaper/wiki).
These guides describe **GraphPaper 0.3.1**. The [release page](https://github.com/AronAxe/GraphPaper/releases/latest) provides the current Windows download; [CHANGELOG](../CHANGELOG.md) records version history. The same guides are published in the [GitHub wiki](https://github.com/AronAxe/GraphPaper/wiki).

## Start here

Expand Down
33 changes: 33 additions & 0 deletions docs/RELEASE-0.3.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# GraphPaper 0.3.1 - external Graphify with Codex

## Fixed

- The external Graphify action now works with **Codex / ChatGPT OAuth** and the configured GraphPaper provider, extraction model and reasoning setting.
- Graphify runs as the real public upstream command in a separate process. There is **no duplicate Native extraction pass**, no requirement for an additional Codex API key and no automatic switch to API billing.
- The Windows application includes **Graphify 0.9.80**, its public dependencies, metadata, tokenizer cache and licences. Source dependencies are pinned in `requirements-graphify.txt`; no private fork or unpublished backend is needed.
- A temporary, authenticated loopback adapter routes Graphify's bounded text requests through GraphPaper. Provider/OAuth credentials are not passed to Graphify. The extraction shares the job's request accounting and honours configured reasoning.
- Missing backends, malformed/empty graph output, dangling edges, cancellation and timeouts leave the previous graph and source documents intact.
- External source-file provenance is preserved in the graph inspector and downstream angle retrieval without treating it as proof of a claim.
- Added graphical runtime diagnostics, total extraction timeout and chunk-budget controls, plus release gates that actually exercise the bundled worker rather than merely checking the window's HTTP assets.

The existing author-voice, project-folder, humanizer/deslop, Science/APA and native Windows freeze fixes remain in place.

## Download and use

Extract **GraphPaper-v0.3.1-Windows-x64.zip** into a new folder and run **GraphPaper.exe**. Keep `_internal` beside it. The binary is unsigned; no separate Python or Graphify installation is required for this Windows package.

In **Connections & settings**, keep or select your provider, choose the extraction model and reasoning depth, and select **Graphify (external process)** under **Advanced limits & Graphify**. Leave **Custom Graphify executable** blank for the included runtime. An old explicit custom path is not silently overridden; clear it when switching to the bundled runtime. **Check Graphify runtime** makes no model call.

## Testing and scope

Validation separates implementation tests, real upstream Graphify execution, a real Codex-backed extraction, and compiled Windows/native checks. Model fixtures are explicitly synthetic. The real Codex test uses synthetic documents in an isolated project, not an existing manuscript. Versioned reports record the exact platforms, outcomes and archive checksum.

Cancellation cannot refund a provider request that was already submitted. File attribution and quote matching do not prove scientific validity. macOS compatibility is not presented as a tested desktop build. Existing local installations are not modified by publishing this release.

[Integration and distribution guide](https://github.com/AronAxe/GraphPaper/blob/main/docs/UPDATE-0.3.1.md) · [Public Graphify distribution](https://pypi.org/project/graphifyy/0.9.80/)

## Verified build

217 automated Windows tests passed (1 platform-permission skip). All 44 browser workflow checks passed, all 10 native-source checks passed, and all 15 checks against the actual compiled executable passed. The compiled-native checks include a real public Graphify worker with synthetic model transport, source provenance, native Save As and save-on-close.

Real Codex-backed extraction was verified separately with synthetic documents and the packaged Graphify worker, using the explicitly selected `gpt-6-luna` model at `low` reasoning. It used 1 model request(s), with no duplicate Native pass or API-key fallback. Exact outcomes, dependency versions and platform results are recorded in `docs/validation/v0.3.1`. This is not a claim of paid API testing for every provider or a macOS desktop build.
Loading
Loading