Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
cd6945b
test(browser): define cross-engine clipboard release oracle
seonghobae Aug 9, 2026
14bb2ae
feat(browser): implement cross-engine clipboard release oracle
seonghobae Aug 9, 2026
40bbeb6
fix(browser): remove unreachable consensus fallback
seonghobae Aug 9, 2026
525a6dc
build(browser): pin Playwright release harness
seonghobae Aug 9, 2026
25a6d74
build(browser): isolate browser-test dependency lock
seonghobae Aug 9, 2026
acabbcf
build(browser): lock Playwright 1.62.0 supply chain
seonghobae Aug 9, 2026
2771eb8
test(browser): cover clipboard resource ceilings
seonghobae Aug 9, 2026
7d719a3
test(browser): require resource-limit corpus coverage
seonghobae Aug 9, 2026
e2daadb
test(browser): add real-engine clipboard harness
seonghobae Aug 9, 2026
84795fe
test(browser): exercise supported paste pipeline in engines
seonghobae Aug 9, 2026
355383b
test(browser): define three-engine release projects
seonghobae Aug 9, 2026
d6e4a29
test(browser): execute SafeClipboard corpus in real engines
seonghobae Aug 9, 2026
124d441
test(browser): fail closed on cross-engine divergence
seonghobae Aug 9, 2026
1d4e12d
ci(browser): require Chromium Firefox WebKit clipboard evidence
seonghobae Aug 9, 2026
b3b61e4
fix(browser): bind evidence to exact source head
seonghobae Aug 9, 2026
f9f8b81
fix(browser): verify exact PR head evidence
seonghobae Aug 9, 2026
fb031ed
chore(browser): ignore local browser evidence artifacts
seonghobae Aug 9, 2026
69f2253
test(docs): bind cross-engine release-assurance documentation
seonghobae Aug 9, 2026
024ffcd
docs(browser): record cross-engine release-assurance evidence
seonghobae Aug 9, 2026
5d457a0
docs(browser): bind active three-engine release gate
seonghobae Aug 9, 2026
58fc1bf
docs(browser): define divergence recovery operations
seonghobae Aug 9, 2026
913bad2
docs(browser): reconcile protected and active assurance status
seonghobae Aug 9, 2026
6dc6b8b
ci(browser): self-validate three-engine clipboard gate
seonghobae Aug 9, 2026
2aeb86b
ci(browser): keep one self-validating browser gate
seonghobae Aug 9, 2026
161a193
fix(ci): use runner-safe browser cache path
seonghobae Aug 9, 2026
5b0c0af
docs(browser): reconcile SafeClipboard engine assurance
seonghobae Aug 9, 2026
4e4a1a4
docs(browser): record cross-engine release gate
seonghobae Aug 9, 2026
d855a79
test(browser): use a standards-valid CSS escape fixture
seonghobae Aug 9, 2026
4a3d7fe
test(ci): include browser evidence in exact-head contract
seonghobae Aug 9, 2026
411840a
docs(fitness): reconcile protected envelope routing
seonghobae Aug 9, 2026
731dc2b
docs(changelog): reconcile protected envelope routing
seonghobae Aug 9, 2026
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
27 changes: 27 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,33 @@ jobs:
- name: Build demo
run: pnpm build:demo

browser-release-evidence:
name: Cross-engine Clipboard / Playwright 1.62.0
runs-on: ubuntu-24.04
timeout-minutes: 30
env:
PLAYWRIGHT_BROWSERS_PATH: /tmp/inkspan-playwright-browsers
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 22
cache: pnpm
- name: Install root dependencies from the immutable lock
run: pnpm install --frozen-lockfile
- name: Install browser-test dependencies from the isolated immutable lock
run: pnpm --dir tests/browser install --frozen-lockfile
- name: Install Playwright browser revisions pinned by 1.62.0
run: pnpm --dir tests/browser exec playwright install --with-deps chromium firefox webkit
- name: Verify real-engine rich clipboard release evidence
env:
INKSPAN_EXPECTED_HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
run: pnpm --dir tests/browser exec playwright test --config playwright.config.ts

office:
name: Office / Python ${{ matrix.python-version }}
runs-on: ubuntu-24.04
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ coverage/
.eslintcache
*.tsbuildinfo

# Browser release evidence is ephemeral exact-head CI output.
tests/browser/.browser-evidence/
tests/browser/test-results/

# Python build, test, and environment artifacts
__pycache__/
*.py[cod]
Expand Down
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ Historical release entries from **0.1.0 through 0.5.27** are preserved verbatim
- Kept collaborative Yjs document content out of server markup until the host-owned client collaboration lifecycle is bound

### Added
- Added bounded `inspectDocumentEnvelopeIdentity()` and `inspectDocumentEnvelopeIdentityBytes()` routing metadata plus the framework-independent `envelope-identity` package subpath so hosts can select explicit schema migrations without exposing document bodies, weakening the strict current-schema parser, or moving migration/persistence authority into Inkspan
- Added one optional construction-time `onSnapshotChange` callback to the framework-free autosave queue and durable autosave session so hosts can observe saving, pending, blocked, recovery, idle, and shutdown state without polling or introducing a subscriber collection
- Added privacy-minimized revision-scoped selection evidence through `getSelectionRevisionEvidence()`, binding frozen ProseMirror coordinates to the SHA-256 strong revision of the exact same immutable editor state before asynchronous hashing begins
- Added privacy-minimized document transition evidence for validated previous and resulting canonical revisions through the framework-independent `revision-evidence` subpath, with object/JSON and strict UTF-8 entry points, deterministic previous-then-resulting SHA-256 derivation, frozen revision-only results, and no document body, actor, tenant, time, authorization, signature, transport, model, or durable-write claim
Expand All @@ -31,10 +32,12 @@ Historical release entries from **0.1.0 through 0.5.27** are preserved verbatim
- Added deterministic regression and documentation contracts plus APA 7th doctoring for exact `Control`/`Meta` shortcut alternatives, the descriptive-only accessibility boundary, repository-level shortcut verification, and omission of unsupported shortcut claims

### Tests
- Added a dependency-locked Chromium/Firefox/WebKit **cross-engine rich-clipboard release gate** using Playwright 1.62.0, one versioned synthetic adversarial corpus, the actual TipTap/ProseMirror paste path, exact-source-head/lock/browser evidence, hostile-DOM and resource-ceiling cases, bounded performance alarm evidence, and fail-closed three-engine consensus without generic normalization
- Added test-first Node `renderToString` evidence for the missing SSR native value, controlled-over-default selection, escaping, external form ownership, no ProseMirror server construction, and opt-out non-disclosure
- Added browser-DOM handoff tests proving the field retains and updates the selected value before TipTap exists while reset-only unnamed fields remain empty

### Documentation
- Added browser-assurance doctoring, operability, test-strategy, clipboard-security, and documentation-fitness coverage for the **dependency-locked Chromium/Firefox/WebKit** release boundary, including Playwright 1.62.0 provenance, exact-head/corpus identity, standards-backed difference policy, evidence minimization, fail-closed behavior, and rollback
- Added a canonical acquisition documentation spine covering product requirements, technical requirements, public interface/integration contracts, Mermaid UML, a conceptual data/evidence model, a threat model, test strategy, operability/recovery, standards/evidence traceability, and seventeen linked architecture decision records without inventing Inkspan-owned persistence or host authority; the newest decisions make envelope schema identity/host-owned migration routing, cross-engine browser-semantic release assurance, and the protected security-disclosure lifecycle first-class while keeping unimplemented capabilities explicitly planned
- Added machine-checkable canonical-documentation decision coverage that keeps required files, ADR index links and completeness, migration-routing and browser-assurance UML/data-model/traceability evidence, physical-ERD non-applicability, browser-security evidence, offline font provenance/no-runtime-font-egress, standards references, rollback sections, host-vs-Inkspan authority boundaries, implemented-vs-active-PR status, and work-conserving autonomous-maintenance guidance synchronized
- Documented work-conserving autonomous-maintenance governance in `AGENTS.md` and `CLAUDE.md`: a blocked PR blocks only its lane, status/report/prompt/documentation milestones are intermediate while safe work remains, and the external scheduler owns cadence rather than becoming an Inkspan runtime capability
Expand Down
Loading
Loading