Skip to content

[Product Completion] Establish the Clearfolio GA closure program and consolidate the live PR queue #484

Open

Description

@seonghobae

Purpose

This is the coordination and closure authority for taking Clearfolio from its current MVP/buyer-demo state to a commercially releasable document-viewer product. It does not duplicate the implementation issues listed below. It defines the order, evidence, queue discipline, and release boundary needed to finish them.

The canonical repository baseline will live at:

docs/product-technical-gap-baseline.md

Exact live snapshot

Observed at 2026-08-20 22:00 KST against protected main@06633a25109c62e24a7015ae04fb9f6e0a246f7e:

  • 85 open pull requests;
  • 25 draft pull requests;
  • 76 pull requests targeting main;
  • 9 stacked or non-main-base pull requests;
  • 18 open issues before this coordination issue;
  • no existing docs/product-technical-gap-baseline.md on protected main.

This inventory is evidence of substantial engineering activity, but it is also a release blocker: multiple parallel PRs cover the same authority boundary, many PRs explicitly ship value types only, several child PRs depend on unmerged parents, and current-head review/approval cannot converge while equivalent replacements remain open.

Current shipped truth

Protected main still describes and behaves as an MVP rather than a GA product:

  • README.md calls the repository an MVP backend;
  • / is a buyer-demo shell with static demo data and screenshot/diligence evidence;
  • production OIDC/JWT verification is not shipped; tenant headers/HMAC remain a scaffold;
  • conversion jobs are process-local by default and are lost on restart;
  • artifact and analytics continuity use single-process append-only files rather than a durable multi-instance store;
  • PDF.js is the only currently qualified renderer metadata; Office support is not production-qualified;
  • stated SLOs are targets, not yet release evidence from a representative deployment;
  • tagged release acceptance, reproducible provenance, supported-format fidelity, backup/restore, DR, and a complete operator/customer workspace are not yet jointly proven.

Release-blocking workstreams

P0 — Queue and governance convergence

  1. Classify every open PR as exactly one of:
    • MERGE_CANDIDATE_CURRENT_MAIN;
    • STACKED_DEPENDENT;
    • SUPERSEDED_OR_DUPLICATE;
    • BLOCKED_EXTERNAL_REVIEW;
    • REQUIRES_RECONSTRUCTION.
  2. Keep one canonical writer for each semantic/path boundary.
  3. Close redundant generated PRs after preserving any unique tested behavior.
  4. Do not treat predecessor-head checks or automated/model comments as current-head independent approval.
  5. Resolve the independent reviewer route in [Governance Gap] Establish an observable independent-review and CODEOWNERS route #321 and orphaned workflow identities in [Fleet incident] Disable orphaned one-shot and PR-specific workflow identities #423/test(automation): detect orphaned workflow registry identities #424.
  6. Prefer buyer-complete vertical slices over additional disconnected value-type PRs.

Immediate duplicate/convergence groups requiring explicit disposition include:

P1 — Production product authority

P1 — Production identity, tenancy, and credentials

P1 — Durable execution and lifecycle

Complete #312 and #263 as integrated runtime behavior rather than a collection of disconnected records:

  • PostgreSQL-backed 3NF job/attempt/lease/retry/dead-letter/outbox/inbox/idempotency state;
  • transactional acceptance and dispatch;
  • generation-fenced worker publication;
  • bounded admission/backpressure with explicit retry guidance;
  • durable cancellation and cancellation-versus-completion race semantics;
  • restart, duplicate-delivery, stale-worker, and multi-instance tests;
  • object-store artifact metadata, checksums, retention, tombstones, deletion receipts, retryable cleanup, and tenant-safe recovery;
  • hot-partition-resistant key/partition strategy;
  • backup, restore, point-in-time recovery, and disaster-recovery rehearsal.

All new database object names must use two-or-more-word snake_case names and preserve third normal form.

P1 — Conversion security and fidelity

Complete #5 / #306 before advertising Office support:

  • sandboxed sidecar or authenticated remote converter outside the API process trust boundary;
  • strict MIME/signature/package/active-content/embedded-object/external-resource limits;
  • no macro execution or external fetch;
  • CPU, RAM, file, page, process, queue, and wall-clock budgets;
  • malware/quarantine and controlled CDR policy where applicable;
  • immutable converter/runtime version, license, SBOM, provenance, and policy identity;
  • authorized Korean/English DOCX/XLSX/PPTX fidelity corpus with layout, fonts, tables, charts, pagination, accessibility, and failure taxonomy;
  • source-to-PDF evidence, deterministic regression thresholds, and clear unsupported-format behavior.

PDF output and viewer behavior must be assessed against WCAG 2.2 / ISO/IEC 40500:2025 and, where an accessible-PDF claim is made, ISO 14289-2:2024 (PDF/UA-2). Passing conversion or process exit alone is not fidelity or accessibility evidence.

P2 — Viewer correctness and accessibility

P2 — Versioned API and CWL ecosystem integration

Complete #315 as a release contract, not isolated checks:

  • one canonical OpenAPI document and route/DTO/error/security parity;
  • stable unique operationId values, explicit version negotiation, compatibility/breaking-change gate, and schema provenance;
  • generated and tested JavaScript/TypeScript, Python, and/or Java clients where consumers require them;
  • standalone deployment and naruon-module compatibility through versioned APIs/events rather than direct database coupling;
  • idempotency, pagination, rate-limit, retry, and error semantics documented and exercised;
  • upgrade/deprecation policy bound to tagged releases.

Use the latest published OpenAPI Specification (3.2.0 at this snapshot) unless an implementation-tooling compatibility ADR deliberately pins an earlier revision.

P2 — Observability, SLOs, and operations

  • Turn telemetry value objects into real privacy-safe OpenTelemetry traces, metrics, logs, and exemplars.
  • Measure request latency, submit-to-first-frame latency, queue depth, worker lag, conversion duration by qualified format, saturation, retry/DLQ, artifact delivery, storage failures, and tenant-safe audit outcomes.
  • Define and prove SLI/SLO/error-budget semantics in a representative multi-instance deployment.
  • Add startup/readiness dependencies, capacity signals, graceful shutdown, rolling-upgrade, incident response, runbooks, and restore drills.
  • Do not place tenant IDs, subject IDs, filenames, document content, tokens, or uncontrolled exception text into telemetry.

P2 — Release, supply chain, and commercial operations

  • Complete tagged release acceptance under test(release): require tagged acceptance on current main #427 and bind exact source, OpenAPI bytes, dependency graph, SBOM, provenance, checksums, and release artifact.
  • Produce SPDX 3.0.1/CycloneDX-compatible SBOM evidence and SLSA 1.2 provenance/attestation where the toolchain supports it.
  • Rehearse clean install, upgrade, rollback, backup/restore, and dependency/license policy.
  • Publish a versioned CHANGELOG and support matrix; do not represent Unreleased or buyer-demo evidence as GA.
  • Define supported deployment profiles, SLA/support boundaries, vulnerability response, retention/deletion policy, data residency, SOC 2/CSAP control evidence, and customer onboarding/migration.

Canonical evidence states

Every item in the baseline must use one of these states:

SHIPPED_ON_MAIN
ACTIVE_PR
OPEN_GAP
EXTERNAL_BLOCKER
SUPERSEDED
NOT_APPLICABLE

A document, issue, PR body, generated value object, or passing predecessor build is not SHIPPED_ON_MAIN until the corresponding behavior and current exact-head evidence are on protected main.

GA exit criteria

Clearfolio is not GA until all of the following are true on one tagged source revision:

  • open PR queue has no duplicate/superseded candidates and every remaining stack has an explicit dependency order;
  • required exact-head CI, Security Scan, SAST, fuzz, coverage, Javadoc, review, and branch-protection gates are terminal-success;
  • production OIDC/JWT, KV/KMS credential authority, and storage-level tenant isolation are operational;
  • accepted jobs, outbox/inbox, worker leases, retries, cancellation, artifacts, audit, analytics, and deletion survive restart and multi-instance races;
  • every advertised file type has sandbox, security, fidelity, performance, accessibility, licensing, and provenance evidence;
  • PDF viewer behavior is generation-safe and WCAG 2.2 AA evidence is complete;
  • API, generated-client, standalone, and naruon integration contracts pass compatibility tests;
  • OpenTelemetry-backed SLO evidence, capacity tests, backup/restore, rollback, and DR rehearsal pass;
  • versioned release artifact, SBOM, provenance, checksums, CHANGELOG, deployment guide, support matrix, and security response policy are published;
  • README/PRD/TRD/ADR/architecture/operability documents describe shipped truth rather than active-PR intent;
  • docs/product-technical-gap-baseline.md contains no unresolved P0/P1 release blocker.

Standards and primary references

Customer next action

Review completion by workstream, not by raw PR count. The next operational action is to classify and collapse the live PR queue, land the production authority/durability/identity foundations in dependency order, and then qualify file-format fidelity and the tagged release on the same integrated revision.

Activity

  1. seonghobae commented on Aug 20, 2026

    @seonghobae
    CollaboratorAuthor

    Canonical baseline PR opened: #485 (docs/product-technical-gap-baseline.md).

    Exact baseline identity:

    • protected source: main@06633a25109c62e24a7015ae04fb9f6e0a246f7e;
    • document head: e7d9ff1295edfa1828cdcbaf16343916f8193825;
    • one new file, 592 lines;
    • PR is Draft while CI, Security Scan, SAST Semgrep, documentation gates, review findings, and qualifying independent approval remain unresolved.

    Issue #484 remains open as the product-completion coordination authority; merging the documentation baseline alone does not close any runtime GA blocker.

  2. seonghobae commented on Aug 20, 2026

    @seonghobae
    CollaboratorAuthor

    Queue convergence receipt — 2026-08-20 22:46 KST

    Protected main remains 06633a25109c62e24a7015ae04fb9f6e0a246f7e. The live queue is now 70 open PRs, of which 61 target main, 9 are stacked/non-main, and 25 are Draft. This is a reduction from the baseline's pre-PR snapshot of 85 open PRs without weakening any protected merge requirement.

    Canonical landing paths established

    Current blockers are not completion

    #482, #455, and #485 have new exact-head workflows queued. #432 has exact-head quality/security gates green but no qualifying independent current-head approval. No pending or predecessor evidence is represented as passing, and no branch protection or review requirement was bypassed.

    The canonical docs/product-technical-gap-baseline.md remains a timestamped initial snapshot on Draft #485. It must be regenerated from the then-live queue after the next convergence pass and before #485 can leave Draft or merge.

  3. seonghobae commented on Aug 20, 2026

    @seonghobae
    CollaboratorAuthor

    Queue convergence receipt — 2026-08-20 23:20 KST

    Protected main remains 06633a25109c62e24a7015ae04fb9f6e0a246f7e. The live queue is now 58 open PRs, of which 49 target main, 9 are stacked/non-main, and 22 are Draft. Compared with the baseline's pre-PR snapshot of 85 open PRs, this is a net reduction of 27 while preserving every ordinary protection and counted-review requirement.

    Durable execution convergence

    Thirteen parallel issue-#312 value-type PRs were replaced by one exact current-main Draft:

    #486 preserves the exact production and focused-test blobs from the actual current heads of those PRs. It additionally executes one cross-type authority regression covering idempotency, admission, outbox dispatch, duplicate delivery, worker lease, attempt completion, controlled telemetry/audit, capacity rejection, recovery, retry, cancellation race, and dead-letter evidence.

    Evidence boundary

    The consolidated head's CI, Security Scan, SAST Semgrep, and fuzz workflows are queued. No source-PR check/review was transferred or represented as passing for #486. #486 remains Draft, and no local Maven result is claimed because the execution environment could not resolve github.com for a clone; GitHub exact-head workflows remain authoritative.

    The independent counted-review defect remains separately reproduced under Clearfolio #321 and central .github#772. The intended independent-reviewers` team still receives HTTP 422 because it is not a collaborator on this repository. No self-approval, bot/model substitution, bypass, or ruleset weakening was attempted.

    Draft #485's docs/product-technical-gap-baseline.md is now materially stale relative to this queue and must be regenerated before it can leave Draft.

  4. seonghobae commented on Aug 20, 2026

    @seonghobae
    CollaboratorAuthor

    Queue convergence receipt — 2026-08-20 23:48 KST

    Protected main remains 06633a25109c62e24a7015ae04fb9f6e0a246f7e. The live queue is now 51 open PRs, of which 43 target main, 8 are stacked/non-main, and 22 are Draft. This is a net reduction of 34 from the baseline's pre-PR snapshot of 85 without bypassing review, checks, or protection.

    Federated identity convergence

    Four issue-#314 foundations were replaced by Draft #487:

    #487 preserves the actual current-head blobs for the verifier seam, controlled failure, issuer/audience/algorithm allowlist, generation-fenced key snapshot, token validity window, and the completed server-owned tenant/role mapping. Its integrated regression proves the chain produces one fixed-tenant TenantContext while untrusted token role strings cannot become application permissions.

    Versioned API and tagged release convergence

    Five issue-#315/release candidates were replaced by Draft #488:

    The consolidated work preserves operation IDs, runtime v1 negotiation, a breaking-change baseline, exact OpenAPI provenance, and tagged release acceptance. It also fixes a real integration gap: the former tagged workflow did not generate or package #426's OpenAPI provenance. #488 now runs hash-locked script acceptance, packages the raw OpenAPI plus source-bound provenance JSON, and covers both in the release SHA-256 manifest.

    Evidence boundary

    #487 and #488 exact-head CI, Security Scan, SAST Semgrep, and fuzz workflows are queued. The source PRs' historical checks/reviews were not transferred. Both candidates remain Draft; no local Maven/Python result is claimed because the execution environment could not resolve github.com for a clone. GitHub exact-head evidence remains authoritative.

    The independent counted-review blocker remains unchanged under Clearfolio #321 and central `.github#772: the intended team is not a repository collaborator, and review requests fail with HTTP 422. No bypass or substitute approval was attempted.

    Draft #485's baseline file is increasingly stale and must be regenerated from the final converged live queue before review.

  5. added
    area: accessibilityAccessibility and assistive-technology support
    area: authAuthentication, authorization, identity, or tenant isolation
    area: ci-cdCI, GitHub Actions, checks, release, or supply chain
    area: securitySecurity boundary, hardening, or vulnerability prevention
    scope: commercial-readinessProduction, enterprise, release, or commercial readiness
    status: blockedBlocked by conflict, dependency, or required prerequisite
    type: featureNew or expanded product capability
    on Aug 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: accessibilityAccessibility and assistive-technology supportarea: authAuthentication, authorization, identity, or tenant isolationarea: ci-cdCI, GitHub Actions, checks, release, or supply chainarea: securitySecurity boundary, hardening, or vulnerability preventionmaintenancepriority: mediumNormal-priority or P2 workscope: commercial-readinessProduction, enterprise, release, or commercial readinessstatus: blockedBlocked by conflict, dependency, or required prerequisitetype: featureNew or expanded product capability

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions