Skip to content

feat(editor): insert XLS/XLSX worksheets into document body - #318

Draft
seonghobae wants to merge 166 commits into
mainfrom
agent/318-spreadsheet-body-import
Draft

feat(editor): insert XLS/XLSX worksheets into document body#318
seonghobae wants to merge 166 commits into
mainfrom
agent/318-spreadsheet-body-import

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Problem

Inkspan needs a bounded, local-only path for inserting visible XLS/XLSX worksheet contents into the current document without granting workbook bytes network, credential, persistence, model, transport, macro, link, or formula-execution authority.

Current exact boundary

Implemented active-PR boundary

This branch contains the bounded spreadsheet product slice only: exact official SheetJS CE 0.20.3 provenance and frozen lock integrity; source-envelope and byte ceilings before parser materialization; framework-neutral XLS/XLSX parsing; descriptor-safe workbook/sheet/range/row inspection; worksheet/name/row/column/cell/text ceilings; inert displayed/cached cell-value projection; real XLSX and BIFF8 fixtures; bounded BIFF8 visibility metadata preflight; editor toolbar insertion; spreadsheet package/export verification; and active-PR product documentation.

Macros, formulas, hyperlinks and hidden sheets receive no executable/editor authority. The adapter adds no network, credentials, persistence, tenant, transport, durable-audit or model authority.

Source-ownership convergence

Two older PR-body claims are superseded by the live diff:

  1. PR docs: reconcile protected capability maturity #156 remains the earlier canonical owner of the already-shipped Markdown package-maturity documentation contradiction. This spreadsheet lane does not own that correction; after docs: reconcile protected capability maturity #156 integrates, this branch must inherit the protected-main result rather than reintroducing its own competing contract.
  2. PR fix(a11y): repair editor contrast and keyboard focus #362 / release issue release: reconcile Office and npm versions before next stable registry publication #118 now own the release-blocking canonical correction from stale three-file draft-release prose to the protected release workflow's four-file inventory (npm tarball, Office wheel, inkspan.spdx.json, SHA256SUMS). Current feat(editor): insert XLS/XLSX worksheets into document body #318 no longer carries src/releaseContractCanonicalConsistency.test.ts or docs/OPERABILITY.md as PR-owned files. Any still-inherited protected-main three-file wording in feat(editor): insert XLS/XLSX worksheets into document body #318's overlapping documentation must be inherited from the eventual protected-main fix(a11y): repair editor contrast and keyboard focus #362 result after that release blocker integrates, not repaired independently here.

The current changed-file inventory is therefore interpreted by product responsibility, not by the stale former body: overlapping canonical docs such as docs/CONTRACTS.md, docs/TEST_STRATEGY.md, docs/PRD.md, docs/TRD.md, docs/TRACEABILITY.md, README/CHANGELOG and package metadata are changed here only where required to describe or package the spreadsheet active-PR slice. Do not use this branch to re-own #362's release correction or #156's maturity correction.

Exact-current-head evidence

For unchanged fce8fe72ebf4d438c17a7c889dd37c92118c6204:

  • CI 32144783586: completed / success;
  • SAST Semgrep 32144783644: completed / success;
  • Security Scan 32144783558: completed / failure;
  • exact failing job: OSV 95735816267; base/head scans completed successfully and failure occurs at Report PR-introduced OSV findings;
  • same run: Trivy 95735816261 success, Scorecard 95735816309 success, dependency-review 95735816431 success with unsupported action step skipped;
  • exact osv-scan-debug artifact: 9328396543, digest sha256:594d8a8551017a78c98a33b6574bfbb9ce945f8b202988788ab96b224c3cfd3d, bound to this exact head/run;
  • formal submitted review: one GitHub Advanced Security COMMENTED review, non-approving;
  • the sole inline thread is resolved/outdated;
  • qualifying approving reviews: 0.

Security failure is non-passing. Repository CI/SAST do not override it.

Foreign central OSV owner boundary

The current OSV failure remains owned by existing central .github#1158, not by an Inkspan-local dependency suppression. The existing owner path must preserve genuine affected-version fail-closed behavior while distinguishing official SheetJS CE 0.20.3 provenance from incorrect npm-registry advisory attribution. Do not rename the dependency, suppress advisories, weaken Security Scan, or create a competing central writer.

Inkspan-side GREEN after the central owner repair is a fresh Security Scan on the then-unchanged #318 head whose OSV comparison no longer reports fixed official xlsx@0.20.3 as a PR-introduced vulnerable npm package; any genuine applicable advisory must still fail closed.

Remaining acceptance

  1. Keep docs: reconcile protected capability maturity #156 as sole owner of the Markdown protected-main maturity correction and fix(a11y): repair editor contrast and keyboard focus #362/release: reconcile Office and npm versions before next stable registry publication #118 as sole owner of the release-inventory correction.
  2. Require a fresh passing Security Scan after the .github#1158 owner repair; predecessor results do not transfer.
  3. Revalidate exact head/live base, ancestry, formal reviews/threads, required central workflows and live governance after any movement.
  4. Obtain the qualifying independent latest-push approval required by live governance before any future lifecycle transition.
  5. Keep this PR Draft/unmerged while release: reconcile Office and npm versions before next stable registry publication #118 owns the release freeze.

No force push, destructive rebase, self-approval, gate weakening, predecessor-evidence transfer or fabricated release authority is permitted.

Copy link
Copy Markdown
Contributor Author

Implementation lane: agent/318-spreadsheet-body-import, exact protected base main@e8109ec2a17de8bd6594487aa12c8c8a93cb2c03. The first test-only/product-placeholder commit is faf7c2fd4bb2ce021a22506838ad44786115fefb; it adds only the executable RED contract, repository plan, and a temporary read-only workspace snapshot workflow. No protected-main, release, registry, credential, persistence, or deployment mutation is intended.

@coderabbitai

coderabbitai Bot commented Aug 13, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: eea551cf-2a3a-4fc5-99a8-b8985f096e6f

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch agent/318-spreadsheet-body-import

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

A returned file body can expose a throwing byteLength getter after
the ArrayBuffer brand check. Normalize that trap to the same
payload-redacted UNSUPPORTED_OR_CORRUPT contract.

Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
@seonghobae

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

seonghobae and others added 2 commits August 18, 2026 02:37
Check the returned file-body brand first. Only a proven ArrayBuffer
may expose byteLength, so a hostile non-buffer getter cannot run or
leak a private cause.

Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
@seonghobae

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 17, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

seonghobae and others added 3 commits August 18, 2026 02:46
CONTRACTS, OPERABILITY, and TEST_STRATEGY still described a three-file
draft set. The protected release workflow and release-security record
already require the npm tarball, Office wheel, inkspan.spdx.json, and
SHA256SUMS. Reconcile the stale three-file wording so product CI can
prove the existing four-file inventory.

Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
@seonghobae

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

1 similar comment
@seonghobae

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 17, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@opencode-agent opencode-agent Bot added priority: medium Normal-priority or P2 work status: draft Draft pull request type: feature New or expanded product capability labels Aug 22, 2026
@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head OSV triage — fce8fe7

The exact current head fce8fe72ebf4d438c17a7c889dd37c92118c6204 is blocked by the osv-scan job in run 32144783558 / job 95735816267. Build, dependency-review, Trivy, Scorecard, Semgrep, and the separate osv-scanner check passed, but the canonical PR-introduced comparison reported two High findings for the direct xlsx@0.20.3 CDN tarball in pnpm-lock.yaml:

The OSV records document CDN releases in their affected-range notes, but this exact workflow still reports the exotic tarball as affected with no fixed version. Because this PR parses user-selected spreadsheet files, I am not waiving or bypassing the failing security gate; the dependency provenance/fix must be resolved and re-run at the same head before readiness can be claimed.

Evidence: https://github.com/ContextualWisdomLab/inkspan/actions/runs/32144783558/job/95735816267
OSV records: https://osv.dev/vulnerability/GHSA-4r6h-8v6p-xvw6 and https://osv.dev/vulnerability/GHSA-5pgg-2g8v-p4x9

@seonghobae

Copy link
Copy Markdown
Contributor Author

Fresh downstream revalidation (2026-08-28): no local dependency mutation is authorized for this finding.

  • Inkspan feat(editor): insert XLS/XLSX worksheets into document body #318 remains unchanged at exact head fce8fe72ebf4d438c17a7c889dd37c92118c6204, with canonical osv-scan still failing at job 95735816267 in run 32144783558.
  • The existing owner boundary is live: .github#1158 is now head 54f5bbe73a292aa11d920efc263f88870acde4b9, based on central main@f6c2a2702b7b7578b2d1fc5f2f9a5125a0390d33, but its materialized checks are all cancelled. Its cancelled owner evidence cannot authorize a consumer rerun or be transferred as green proof.
  • The committed official SheetJS CDN URL, version, and integrity remain the active branch contract. Renaming to a mirror, suppressing the two advisories, or weakening the scanner would bypass the central provenance owner and is intentionally not done.

Consumer acceptance remains: central #1158 must reach protected-main under its own exact-head governance, then #318 needs a fresh Security Scan on this unchanged/descendant head showing the official immutable xlsx@0.20.3 exception while affected and unknown/conflicting provenance stays fail-closed. No waiver, ready, or merge action was taken.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request priority: medium Normal-priority or P2 work status: draft Draft pull request type: feature New or expanded product capability

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants