Skip to content

The wrapper, and the store that will not take it - #84

Merged
omars-lab merged 2 commits into
mainfrom
track-b-scoping
Aug 7, 2026
Merged

The wrapper, and the store that will not take it#84
omars-lab merged 2 commits into
mainfrom
track-b-scoping

Conversation

@omars-lab

Copy link
Copy Markdown
Owner

PLAN.md §Track B says "Capacitor iOS, then Android". On the licences this repo actually vendors, that order inverts: Android is reachable and the App Store is the blocked one. This PR is the scoping doc that says so, plus the four register rows that keep it honest. No code, and none should be written until ⑦ ② is settled.

Why the order cannot hold

A GPL'd binary on Apple's store needs a §7 additional permission from every copyright holder. Signal, OsmAnd and VLC's eventual settlement all ship that way. Hifth cannot assemble one:

  • QAC (packages/etl/data/roots/) grants the GPL and then says copies may be distributed but "CHANGING IT IS NOT ALLOWED". SOURCES.md already records how the repo satisfies both readings for a website — vendor verbatim, derive at build time. That resolution does not extend to a §7 grant, because a §7 additional permission is a change to the terms and only the holder can make it.
  • quran-tajweed (assets/skins/**) is CC BY 4.0; §2(a)(5)(B) forbids the Effective Technological Measures FairPlay applies. Narrower — the skin is one edition among several and could be dropped from a store build. The QAC-derived data cannot.
  • KFGQPC terms are still unread (board item The bar that drew 604 marks half a pixel apart, and four blockers that had already arrived #55). A store submission is precisely where that stops being deferrable.

Three things that fell out of writing it down

None of them are fixed here, and each one says why.

LICENSES.md:17 names one of two upstreams. assets/adj/** is bucketed under Waqar144's mutashabihat terms alone. build-adjacency.mjs:45 imports sharedRuns from morphology.mjs (QAC morphology), spansOf (:287) calls it, and :342 writes the result into every shard as span/toSpan. Under the same strict reading of "derivative" this repo applies to itself elsewhere, those shards are a GPL derivative. Wrong today, independent of Track B — registered as confirmed.

Track B's payload has narrowed to one promise. Corpus-bundling was done by Loop 6b's juz packs; the iPad spread became a web concern (PLAN.md:1038); navigator.share exists. What survives is iOS deep links into an installed PWA — on the platform whose store is blocked. PLAN.md:1297 also cites research §5 for that caveat; §5 is the eviction section and §6 is the deep-link one.

ShareSheet.tsx would emit unopenable links. It builds the share URL from window.location.origin + pathname, which under a wrapper is capacitor://localhost/. Every shared hop link would fail for the recipient — including in the sender's own browser. Small fix, written down rather than made, because a change with no caller is a change nobody will test.

Measured, not estimated

pnpm gate:assets on this tree: 27.87 MB gz across 1,584 files. Under every store threshold that would have forced staged delivery, which retires the delivery plan's On-Demand-Resources concern outright.

The registers

id status owner
adj-shards-have-two-upstreams confirmed / defect agent
gpl-and-the-app-store open / risk user
track-b-order-is-unachievable open / defect agent
track-b-payload-has-narrowed open / question user

gpl-and-the-app-store is user-owned deliberately: everything above is argued from licence text by a non-lawyer, and "I read the licence" is not the standard gate:* holds anything else to. docs/map.json points provenance at the doc — that feature's gates discharge a static site's obligations by construction, and a store binary is a different distribution under the same licences.

Deliberately not done here: editing LICENSES.md:17 or PLAN.md's order and citation. A roadmap edit that changes a loop's stated order should be its own decision with its own record, not a footnote to a scoping doc.

make ci green — gate:issues OK (83 indexed across 12 registers, the new doc being the twelfth), gate:map OK (22 features, 150 pointers), gate:budget 117.9 KB gz / 150 KB, +0.0.

🤖 Generated with Claude Code

https://claude.ai/code/session_01EuhvbUKjGesE3uMhjCzBGt

omars-lab and others added 2 commits August 7, 2026 07:56
PLAN.md §Track B says "Capacitor iOS, then Android". On the licences this
repo actually vendors that order inverts: Android is reachable and the App
Store is the blocked one.

A GPL'd binary on Apple's store needs a §7 additional permission from every
copyright holder. Hifth cannot assemble one. The Quranic Arabic Corpus grants
the GPL and then says CHANGING IT IS NOT ALLOWED — a §7 grant is a change to
the terms and only Kais Dukes can make it. quran-tajweed is CC BY 4.0, whose
§2(a)(5)(B) forbids the technological measures FairPlay applies. KFGQPC's own
terms are still unread (board item #55), and a store submission is exactly the
context where that stops being deferrable.

Three things fell out of writing it down, none of them fixed here:

  - assets/adj/** carries span/toSpan values computed by sharedRuns out of the
    GPL'd QAC morphology (build-adjacency.mjs:45, :287, :342). LICENSES.md:17
    names only Waqar144's terms. Wrong today, independent of Track B.
  - Track B's payload has narrowed to one load-bearing promise. The corpus
    bundling is done by Loop 6b, the iPad spread became a web concern, and
    navigator.share exists. What survives is iOS deep links into an installed
    app — on the platform whose store is the blocked one.
  - ShareSheet.tsx builds share URLs from window.location.origin, which under
    a wrapper is capacitor://localhost/. Every shared hop link would be
    unopenable by the recipient.

Measured while here: the whole corpus is 27.87 MB gz across 1,584 files, which
retires the delivery plan's On-Demand-Resources concern outright.

Nothing is built and nothing should be until §⑦ ② is settled by someone
qualified. This file is the scoping of record and the reason for the gate.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EuhvbUKjGesE3uMhjCzBGt
docs/issues.json gains the four rows from the new doc's §⑦, so the register
and the document agree the way gate:issues requires:

  adj-shards-have-two-upstreams   confirmed  defect    — LICENSES.md:17
  gpl-and-the-app-store           open       risk      — needs a lawyer
  track-b-order-is-unachievable   open       defect    — blocked on the above
  track-b-payload-has-narrowed    open       question  — blocked on web v1.0

The first is confirmed rather than suspected because the code path is cited and
checkable: build-adjacency.mjs imports sharedRuns from morphology.mjs and writes
its output into every shard. The second is owned by the user, not the agent —
a non-lawyer reading licence text is not the standard the rest of this repo
holds itself to, and saying so is the honest form of the finding.

docs/map.json points provenance at the doc. That feature's gates all satisfy
the obligations of a static site, where the browser is handed the whole bundle
and §4–6 are discharged by construction. None of them says anything about a
store binary, which is a different distribution under the same licences — so
the pointer is where a reader learns the gates stop.

docs/issues.md is generated (pnpm issues:doc).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EuhvbUKjGesE3uMhjCzBGt
@omars-lab
omars-lab merged commit 6157752 into main Aug 7, 2026
6 checks passed
@omars-lab
omars-lab deleted the track-b-scoping branch August 7, 2026 13:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant