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 @@ -40,6 +40,7 @@ jobs:
- 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
- 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 @@ -20,6 +20,7 @@ jobs:
- 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
windows:
needs: quality
runs-on: windows-latest
Expand All @@ -37,7 +38,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 --graphify --executable dist/GraphPaper/GraphPaper.exe --out test-results/native-package
run: python scripts/native_smoke.py --science --graphify --polemic --executable dist/GraphPaper/GraphPaper.exe --out test-results/native-package
- uses: actions/upload-artifact@v4
with:
name: GraphPaper-Windows-x64
Expand All @@ -53,7 +54,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.1.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.4.0.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
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# Changelog

## 0.4.0

- Add Polemic and a reversible writing-mode switch for existing projects.
- Separate thesis, writing purpose, rhetorical force and evidence detail; remove unconditional neutrality/counterargument pressure.
- Supply author voice and intention to angle selection, JEV scoring, outlining, review, revision and prose polishing.
- Draft short argumentative pieces as coherent wholes rather than restarting the same disclaimers for each section.
- Track stale angle/outline/review context; refresh angles without rebuilding the graph; flag stance drift as a meaning change.
- Preserve source checks, native Windows fixes, Graphify/Codex, Science/APA, project folders and existing manuscripts.


## 0.3.1

- Repair external Graphify extraction with the configured provider, including official Codex OAuth and extraction-role reasoning.
Expand Down
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,18 @@
<a href="CHANGELOG.md">Changelog</a>
</p>

GraphPaper is a **local-first writing studio for nonfiction, fiction and scientific manuscripts**. Upload your material, explore its knowledge graph, choose a direction, shape the outline and refine the draft—all in a Windows desktop interface.
GraphPaper is a **local-first writing studio for nonfiction, fiction, polemic and scientific manuscripts**. Upload your material, explore its knowledge graph, choose a direction, shape the outline and refine the draft—all in a Windows desktop interface.

Use **Codex / ChatGPT sign-in** or your own model API. Keep control of the argument, the evidence and the final words.
Use **Codex / ChatGPT sign-in** or your own model API. Keep control of the argument, the evidence and the final words. **Polemic and argument-led nonfiction preserve your thesis and voice across angle selection, outlining and review.** [Continue an existing project in Polemic](docs/POLEMIC.md).

**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
## Four ways to write

| Mode | Start with | Build toward |
|---|---|---|
| **Nonfiction** | Articles, documents, notes and a question | A distinctive, source-linked essay or article |
| **Polemic** | A position, your reasoning and your own writing voice | An argument with conviction, wit and factual precision—not compulsory balance |
| **Fiction** | A premise, characters and the rules of your world | Scene-driven writing with a continuity ledger |
| **Science** | A research question and an explicit search protocol | An evidence-led manuscript, APA references and an auditable research package |

Expand Down
4 changes: 4 additions & 0 deletions docs/GRAPH-AND-JEV.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,7 @@ With JEV off, structural exploration still works and results are not given fabri
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.

A stronger graph is useful only if it leads to a better argument or story. The [quality protocol](QUALITY.md) separates that editorial question from the fact that the software tests passed.

## 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).
10 changes: 5 additions & 5 deletions docs/NONFICTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

Use Nonfiction for essays, reports, cultural analysis and source-led articles. Choose [Science](SCIENCE.md) instead when you need scholarly database searching, a recorded screening process and academic manuscript exports.

## Start with a question, not a compulsory conclusion
## State the purpose: argue or explore

In the Creative brief, specify the audience, format, voice, target length and the issue you want to investigate. A productive direction leaves room for the sources to surprise you:
Nonfiction is not automatically a neutral survey. State what the piece should do in the Creative brief: investigate an open question, develop an interpretation, defend a position or make a criticism. **Writing purpose** can follow the brief, explicitly preserve your position, or explore without a predetermined verdict.

> Explore when public lighting serves safety and when it intrudes on private rest. Address the strongest argument for brighter streets.
Use **Core thesis** for a proposition you want preserved, or leave it blank to use Direction. Your enabled voice samples now guide angle selection and outlining as well as prose. Factual checks can correct a premise without deciding that the author should hold a more moderate opinion.

This is a suggested brief, not a factual claim about lighting research. The included nonfiction demo uses invented illustrative notes; replace them with real evidence before publication.
For explicitly polemical essays, satire and opinion, choose [Polemic](POLEMIC.md). An existing project can switch modes without replacing its sources or graph. The distinction is the job you are asking the writer to do, not permission to invent facts.

## Prepare the source library

Expand All @@ -34,7 +34,7 @@ Read the thesis, counterargument, evidence links and unresolved questions. Use *

Each section should change what the reader understands. Edit its purpose, beats and planned word count, and reorder sections before drafting. Source IDs make it possible to return to the material behind a section.

The writer produces sections sequentially and then reviews the whole draft. The context contains selected relevant passages and prior prose, not necessarily the whole corpus on every call. Avoid interpreting a complete-looking article as evidence that every source was read in full at every stage.
Explicitly argument-led outlines up to 3,000 words are drafted as one coherent piece, then reviewed. Other nonfiction uses sequential sections followed by a whole-draft review. The context contains selected relevant passages and prior prose, not necessarily the whole corpus on every call. Avoid interpreting a complete-looking article as evidence that every source was read in full at every stage.

## Edit, verify, export

Expand Down
58 changes: 58 additions & 0 deletions docs/POLEMIC.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Polemic, argument and authorial intent

Use **Polemic** for an essay that argues a position: moral criticism, satire, cultural argument, an opinion piece or a sharply reasoned indictment. It is the fourth writing mode, alongside Nonfiction, Fiction and Science.

The mode does not choose an opinion for you. It develops yours. Factual precision remains necessary; automatic neutrality does not.

## Continue an existing project

You do **not** have to create a new project, re-upload your writing samples or rebuild the graph.

1. Open the project and click **Nonfiction · Change** (or the current mode name) near the top.
2. Select **Polemic** and apply the change.
3. Open **Creative brief**. Set your **Core thesis / position to preserve** and **Rhetorical force**. The thesis is optional: when blank, the writer follows your existing Direction field.
4. In **Angles**, click **Refresh angles with my voice**. This reuses the current graph and enabled voice samples. It does not run another graph extraction.

Sources, source IDs, graph, voice profile, draft, outline, previous angles and draft versions stay in the same project when you change its mode. Old generated angles are not silently rewritten by moving a slider. The interface marks angles or outlines made under an earlier brief/voice as out of date and offers an explicit refresh. Existing manually chosen work remains yours to retain or edit.

## Three different controls

**Writing purpose** determines the task. Polemic develops and defends the stated position. Ordinary Nonfiction now also supports **Develop and defend my position**, **Investigate an open question**, or **Follow the brief**. A question-led article need not conclude in the center either: its conclusion should follow its reasoning and evidence.

**Rhetorical force** controls delivery: understated, pointed or uncompromising. It does not increase factual certainty, mechanically add swear words, or replace your voice with a generic aggressive style.

**Evidence detail** controls how extensively the piece develops its factual basis and directly relevant limits. It is not a politeness, neutrality or permission-to-invent slider. Lower detail keeps the presentation lean; higher detail supports a fuller treatment without demanding a yes-but paragraph after every judgment.

A precise brief names the proposition, not only the tone. For example:

> Argue that the policy rewards appearances instead of results. Make the case through its incentives, its language and the experience of the people subjected to it. Preserve the satire and end with the judgment. Check factual claims, but do not turn the argument into an open question about whether criticism is permissible.

## What changed in 0.4

Previous versions supplied the author voice to drafting/revision but omitted it from angle generation, outline generation and the initial editorial review. At the same time, shared prompts repeatedly emphasized counterarguments and moderation-adjacent phrasing. Those two choices could select a neutralized thesis before the writer ever encountered the author's voice.

The editorial pipeline now receives a common **authorial contract** and the voice context at angle generation, JEV candidate evaluation, final angle scoring, outlining, drafting, review, revision and prose polishing. Voice samples remain stylistic evidence, not factual sources.

The angle stage generates different routes into the requested argument rather than different degrees of retreat from it. A counterargument is optional metadata and must be relevant; an empty field is better than a manufactured objection. Candidate scoring considers **stance fidelity** and **voice fidelity** alongside factual support and editorial potential. Without JEV, the same authorial contract still goes to the language model.

The critic distinguishes factual assertions, inferences, moral judgments, analogies, satire and deliberate hyperbole. A moral description of conduct is not automatically a clinical diagnosis. Conversely, an invented diagnosis or factual allegation is not excused by choosing Polemic. The editor should identify the actual problem and suggest a local repair, not replace the entire position with something milder.

## Avoiding repeated disclaimer openings

Short polemics and explicitly argument-led nonfiction with an approved outline of **up to 3,000 words** are drafted as one coherent piece. Section-by-section generation could repeatedly reopen the same uncertainty because every section saw the same cautionary instructions afresh.

Longer pieces retain section-wise drafting, with the same authorial contract and prior prose. Fiction keeps its scene/continuity workflow; Science keeps its scientific research workflow. The whole-piece writer still receives the approved outline and selected source passages and is followed by the usual evidence review.

## Voice and editing

Enabled current writing samples reach the angle stage even when a learned profile needs refreshing. A stale learned profile is not treated as current, and turning voice influence off is still respected. Voice learning now explicitly attends to rhetorical moves, willingness to conclude, analogy, comic timing, indignation and argument structure—not just sentence length and punctuation.

The review panel can report **authorial fidelity** separately from source support. It can flag an irrelevant caveat or a softened conclusion as editorial drift. Automatic revision acceptance is asked to preserve thesis, force and voice; a more moderate or polite result is not automatically a better result.

Humanize and Deslop follow the same intent. Their fidelity critic also sees the brief and voice. A changed stance counts as a meaning warning, and a candidate prepared under an earlier brief or voice cannot silently overwrite the current draft.

## Scope

This is an editorial-workflow change, not a switch that rewrites a provider's behavior or guarantees a particular style from every model. Inspect the proposed angles and choose your own when appropriate. The release includes wiring, preservation, UI and native regression tests plus separately labelled live Codex examples using original synthetic material. The fixtures are not a user's private articles and are not empirical findings about AI consciousness.

[Nonfiction workflow](NONFICTION.md) · [Author voice](VOICE-AND-PROSE.md) · [Graph and JEV](GRAPH-AND-JEV.md) · [Validation](QUALITY.md)
10 changes: 10 additions & 0 deletions docs/QUALITY.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# Validation and quality

## Version 0.4.0 validation

**252 automated Windows tests passed**; 1 permission-related test skipped. All **54 real-HTTP browser checks** passed, with no JavaScript page errors. The actual compiled Windows application passed **17 native checks**, including mode conversion, thesis/force controls, external Graphify, native Save As and pending-edit save before normal exit.

The packaged Python code for the changed modules was compared with the final source as semantic code objects; all UI assets were compared byte-for-byte. The Windows package includes the previously verified public Graphify and official Codex runtimes. No installed user project was changed.

A live Codex test generated argumentative angles from original synthetic evidence and voice samples, then drafted and reviewed a complete short argument. A separate opposing-position test confirmed the editorial policy does not choose which side the author should support. The first outline response was malformed JSON and was rejected; the successful continuation was a manually restarted test using the saved angles. No live JEV call or new user sign-in ceremony was performed. Deterministic tests inspect JEV voice/stance inputs separately.

The tests validate behavior and handoff, not a universal promise of perfect style or zero caveats. Source, browser, native, package and live-test evidence is under [validation/v0.4.0](validation/v0.4.0/). Other-platform results, when available, are the actual hosted CI results rather than inferred Windows coverage. Earlier reports below are historical.

## 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.
Expand Down
3 changes: 2 additions & 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.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).
These guides describe **GraphPaper 0.4.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).

## Start here

Expand All @@ -12,6 +12,7 @@ These guides describe **GraphPaper 0.3.1**. The [release page](https://github.co
| Upgrade Windows or use the source edition | [Windows installation](WINDOWS.md) |
| Use ChatGPT sign-in, API models or deeper reasoning | [Models and reasoning](CONNECTIONS.md) |
| Write an essay or researched article | [Nonfiction workflow](NONFICTION.md) |
| Make a forceful argument without forced neutrality | [Polemic and authorial intent](POLEMIC.md) |
| Develop a story and preserve its canon | [Fiction workflow](FICTION.md) |
| Search scholarly literature and write a manuscript | [Science workflow](SCIENCE.md) |

Expand Down
Loading
Loading