Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
e75a003
test(ci): require stacked pull request gates
seonghobae Aug 13, 2026
3ea5538
fix(ci): gate stacked pull requests
seonghobae Aug 13, 2026
1c597b0
test(ci): require bounded job timeouts
seonghobae Aug 14, 2026
479847a
fix(ci): bound canonical job runtimes
seonghobae Aug 14, 2026
85572a5
test(ci): require runtime exact-head verification
seonghobae Aug 14, 2026
58ef727
fix(ci): verify runtime checkout head
seonghobae Aug 14, 2026
89aecf1
chore(ci): synchronize stacked-pr exact-head gate with protected main
seonghobae Aug 17, 2026
a74e150
test(ci): reproduce browser evidence timeout exhaustion
seonghobae Aug 18, 2026
b7e9bb8
fix(ci): allow browser evidence through slow package mirrors
seonghobae Aug 18, 2026
a084733
docs: add product technical gap baseline
seonghobae Aug 20, 2026
8c01c13
docs: refresh gap baseline evidence
seonghobae Aug 20, 2026
1199b68
docs: refresh live commercialization baseline
seonghobae Aug 20, 2026
2c4a315
docs: refresh live gap baseline
seonghobae Aug 20, 2026
d7fbbcd
docs: correct baseline version query
seonghobae Aug 20, 2026
97a3be3
docs: refresh gap baseline evidence
seonghobae Aug 20, 2026
8aeee24
docs: align baseline with current head
seonghobae Aug 20, 2026
baf2f14
docs: preserve npm lookup failures
seonghobae Aug 20, 2026
0f45b4d
test(docs): reject self-invalidating baseline head
seonghobae Aug 20, 2026
39927a7
revert(test): preserve dated snapshot semantics
seonghobae Aug 20, 2026
2c10e94
docs: add editor completion research evidence
seonghobae Aug 20, 2026
d089783
docs: register research-backed buyer completion gaps
seonghobae Aug 20, 2026
9b54a1b
docs: refresh live buyer gap baseline
seonghobae Aug 21, 2026
c1c9fe3
docs: map buyer gap implementation lanes
seonghobae Aug 21, 2026
cfd612f
docs: make gap refresh evidence reproducible
seonghobae Aug 21, 2026
6411a19
docs: refresh buyer lane heads
seonghobae Aug 21, 2026
102a2cb
docs: track maturity ownership lane
seonghobae Aug 21, 2026
25b699f
test(docs): reject stale merged feature states
seonghobae Aug 22, 2026
3e97273
docs(architecture): reconcile merged package and print truth
seonghobae Aug 22, 2026
1efbd63
test(ci): bind exact-head assertions to each workflow job
seonghobae Aug 23, 2026
7d21685
merge: synchronize stacked CI gates with protected main
seonghobae Aug 25, 2026
a2f6ced
docs(gap-baseline): harden refresh queries per current-head review
seonghobae Aug 25, 2026
500e56f
Merge pull request #299 from ContextualWisdomLab/fix/stacked-pr-ci-ga…
seonghobae Aug 25, 2026
fd75c83
Merge pull request #372 from ContextualWisdomLab/docs/product-technic…
seonghobae Aug 25, 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
23 changes: 21 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ on:
push:
branches: [main]
pull_request:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Info: pull_request trigger no longer filters base branch

Dropping branches: [main] from the pull_request: trigger (ci.yml) makes CI run for PRs against any base branch, not just main. A dedicated test asserts this is intended (workflowExactHead.test.ts), so it is a deliberate broadening for stacked PRs.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

branches: [main]

permissions:
contents: read
Expand All @@ -19,11 +18,18 @@ env:
jobs:
build-and-test:
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false
- name: Verify exact checkout
env:
INKSPAN_EXPECTED_HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
run: |
actual_head="$(git rev-parse HEAD)"
test "$actual_head" = "$INKSPAN_EXPECTED_HEAD_SHA"
# pnpm version comes from the package.json "packageManager" field
# (pnpm 10+), which is required to read `overrides` from
# pnpm-workspace.yaml consistently with the committed lockfile.
Expand All @@ -47,14 +53,20 @@ jobs:
browser-release-evidence:
name: Cross-engine Clipboard / Playwright 1.62.0
runs-on: ubuntu-24.04
timeout-minutes: 30
timeout-minutes: 60
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
- name: Verify exact checkout
env:
INKSPAN_EXPECTED_HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
run: |
actual_head="$(git rev-parse HEAD)"
test "$actual_head" = "$INKSPAN_EXPECTED_HEAD_SHA"
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand All @@ -74,6 +86,7 @@ jobs:
office:
name: Office / Python ${{ matrix.python-version }}
runs-on: ubuntu-24.04
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
Expand All @@ -88,6 +101,12 @@ jobs:
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false
- name: Verify exact checkout
env:
INKSPAN_EXPECTED_HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
run: |
actual_head="$(git rev-parse HEAD)"
test "$actual_head" = "$INKSPAN_EXPECTED_HEAD_SHA"
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ matrix.python-version }}
Expand Down
18 changes: 9 additions & 9 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ flowchart TB
Selector[Protected text-position-selector subpath]
Autosave[Protected autosave subpath]
Converter[Protected converter subpath]
Markdown[Proposed markdown subpath\nactive PR #114]
Markdown[Protected markdown subpath]
SharedPolicy[Shared deterministic URI / inline-image policy]
Serializers[Shared deterministic serializers]

Expand All @@ -58,23 +58,23 @@ flowchart TB
Markdown --> Serializers
```

The active `@contextualwisdomlab/cwl-editor/markdown` work in PR #114 is governed by Proposed ADR 0020. Its purpose is dependency isolation, not a second serializer authority. Until that PR or a verified successor integrates, the proposed subpath is unshipped and the protected root package remains the public authority for those serializers.
Protected `main` includes the framework-independent `@contextualwisdomlab/cwl-editor/markdown` subpath under Accepted ADR 0020. It isolates dependency topology without creating a second serializer authority: the root package and the subpath share the same deterministic serializer and URI/inline-image policy modules. Packed ESM, CommonJS, and strict-TypeScript consumers are required evidence that the subpath remains browserless and independent of React, TipTap UI, Yjs, network, credential, and model authority.

A framework-independent subpath must prove its declared dependency boundary from the packed npm artifact under ESM, CommonJS, and strict TypeScript consumers. Source-level import shape alone is insufficient release evidence.

## Presentation and print authority

Inkspan owns the CSS rules it ships for its editor. It does not own the operating system print spooler, printer, browser's pagination implementation, downstream PDF storage, or host disclosure policy.

Protected `main` currently remains the stylesheet authority. Proposed ADR 0021 and active PR #116 define a CSS-only `@media print` boundary intended to:
Protected `main` includes the CSS-only `@media print` presentation boundary governed by Accepted ADR 0021. The shipped boundary:

- remove Inkspan-owned screen-only scroll/max-height clipping;
- hide toolbar, collaboration status, remote caret/cursor-label, and placeholder UI from printed document output;
- preserve authored document structures and links;
- use conservative paged-fragmentation hints; and
- keep links distinguishable without relying on color alone.
- removes Inkspan-owned screen-only scroll/max-height clipping;
- hides toolbar, collaboration status, remote caret/cursor-label, and placeholder UI from printed document output;
- preserves authored document structures and links;
- uses conservative paged-fragmentation hints; and
- keeps links distinguishable without relying on color alone.

This proposed presentation line does **not** create a JavaScript print mode, PDF service, page-number/header/footer authority, timestamp/signature claim, persistence layer, network requirement, credential, or model dependency. Until #116 integrates, the new print behavior is not shipped.
This protected presentation line does **not** create a JavaScript print mode, PDF service, page-number/header/footer authority, timestamp/signature claim, persistence layer, network requirement, credential, or model dependency. Browser print output remains a presentation representation; durable print/PDF authorization, storage, provenance, retention, and distribution remain host responsibilities.

## Modular MSA composition

Expand Down
1 change: 1 addition & 0 deletions docs/DOCUMENTATION_FITNESS.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ Document fitness and implementation maturity are independent. A `present_current
| TRACEABILITY | `docs/TRACEABILITY.md` | `present_current` | Protected requirements/standards/evidence mapping | Acquisition reviewers can distinguish protected evidence from active or planned work. |
| Contributor/agent authority | `AGENTS.md`, `CLAUDE.md`, `docs/README.md` | `present_current` | Protected-main-first decision discipline | Agents are directed back to the same canonical graph rather than parallel private memory. |
| Autonomous maintenance governance | `AGENTS.md`, `CLAUDE.md` plus the external scheduler | `present_current` | `out_of_scope` as Inkspan runtime behavior | Work-conserving execution, user-redirection incident recovery, lane-local waiting and external scheduler authority are reconstructable without pretending automation is an Inkspan API. |
| Product/technical gap baseline | `docs/product-technical-gap-baseline.md` | `present_current` | Dated operational snapshot; protected-main authority remains separate | Buyer-visible gaps, active PR lanes, release blockers, and the next executable loop are discoverable without promoting active-PR work to shipped behavior. |

## Conversation-to-GitHub reconciliation

Expand Down
1 change: 1 addition & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ This directory is the discoverable index for Inkspan's product, technical, secur
| [`../ARCHITECTURE.md`](../ARCHITECTURE.md) | Current protected-main implementation architecture and bounded-context ownership |
| [`../SECURITY.md`](../SECURITY.md) | Protected-main private vulnerability reporting, supported security lines, coordinated disclosure, and claim limits |
| [`DOCUMENTATION_FITNESS.md`](DOCUMENTATION_FITNESS.md) | Acquisition completeness matrix, implementation maturity, deliberate non-applicability and remaining canonical gaps |
| [`product-technical-gap-baseline.md`](product-technical-gap-baseline.md) | Dated protected-main product/technical gap register, live PR lanes, release blockers, and executable maintenance loop |
| [`assessments/2026-08-10-conversation-documentation-reassessment.md`](assessments/2026-08-10-conversation-documentation-reassessment.md) | Dated whole-conversation reassessment, protected/operational deltas, and scheduler-control remediation |
| [`PRD.md`](PRD.md) | Product users, jobs, buyer outcomes, non-goals, acceptance and claim boundaries |
| [`TRD.md`](TRD.md) | Technical invariants, runtime boundaries, failure semantics and release evidence |
Expand Down
Loading
Loading