Skip to content

Spikes

# Title Lead Mode Status
Spike 1 KMaps field type on Drupal 11 Yuji ● Proven
Spike 2 Solr index read-only integration Yuji Team candidate ● Proven
Spike 3 Group module collections architecture Than Team candidate ● Proven
Spike 4 ~~CKEditor 5 footnotes + Tibetan Unicode~~ Than Individual ◇ Split (2026-07-10) — see 4a/4b
Spike 4a Tibetan Unicode round-trip (NFC/NFD fidelity, cross-cutting) Than Individual ● Proven (2026-07-22)
Spike 4b CKEditor 5 footnotes (Texts-specific) Than Individual ✅ Complete (2026-08-07) — Option 1+3, feasibility proven + prototype; production transform tracked for the Texts migration (deferred note)
Spike 5 bibcite for Sources site Than Individual Partial (started 2026-08-24) — 2 of 6 pass criteria met on evidence: bibcite 3.1.2 is stable on core ^10.1 \|\| ^11 \|\| ^12, and reference-type coverage is 94.2% because bibcite ships biblio's own type list near-verbatim. Gap is exactly Mandala's 7 custom types (1,477 rows); 3 collapse into book, and the 4 Than wants kept (Review/Dictionary/Obituary/Block Print) are config-only to add — a reference type is one YAML, and bibcite's CSL mapping has exact targets (review-book, entry-dictionary, article-newspaper, manuscript). The "critical type missing" fail criterion does not fire. Zotero criterion reframed: modules are enabled and ~12.8k tag rows were imported, but there is only one zotero_feed node. Style gap found: Sources runs biblio_style=cse, which bibcite does NOT ship (it ships APA/Chicago/AMA/MLA/MLA-8) — solvable by importing a CSE CSL file, but D7 biblio styles are PHP plugins and bibcite is CSL-only, so output will not be byte-identical. Credentials and output comparison not started; nothing installed yet
Spike 6 API compatibility for React application Than Team candidate Proven (closed 2026-08-21) — Option A (generalized same-origin proxy) decided 2026-08-12 and browser-verified; D11 endpoint live for Images; all 8 D7 response formats live-verified (AJAX side is 6 routes, not 4). Per-site controllers handed to the per-site migration checklist; 3 deferred notes carried forward
Spike 7 Kaltura AV integration on Drupal 11 Yuji Individual Partial (started 2026-09-04) — the D7-only kaltura module confirmed a dead end (7.x-3.2, no D9/10/11 release, Unsupported); drupal/kaltura_media (1.0.4) verified installable on live Drupal 11.4.5 with a one-line core_version_requirement patch, and its embed output confirmed structurally identical to Spike 6's live production Kaltura evidence using the real partner/uiconf/entry IDs. 3 minor non-blocking issues found (upgrade_status-verified). Upload/ingest path and a real migration source plugin remain open
Spike 8 reindeer_x consolidation as managed sync subsystem Yuji Individual ◐ Partial
Spike 9 Documentation hosting & access control (mkdocs → public + Confluence) Yuji Individual ○ Pending (low priority) — partially superseded 2026-08-13: two private docs repos now exist (uvalib/mandala-legacy-docs, uvalib/mandala-navina-docs), scoped to sensitive material only; submodule + Confluence sync still open
Spike 10 SAML + OAuth2 coexistence on D11 (simplesamlphp_auth + simple_oauth) Yuji Individual ● Proven — 1b.1 unblocked (2026-07-09)
Spike 11 AV time-synced transcript replication on D11 (data model + sync + search + migration) Than Individual ○ Pending — backlog (AV / Phase 4); relates to Spikes 7, 4a, 6
Spike 12 Authenticated asset-fetch identity forwarding (design only) — Sprint 2 D2 Than Individual Complete (design only, 2026-09-04) — recommends resolving sid→uid via a new Redis key in the same shared instance ADR 014 already uses (reuses mandala_solr_visibility's live write pattern), over a new synchronous cross-service HTTP call. Not recommended to build now — low priority per the existing deferred note; implementation explicitly out of scope for this spike

Status key: ● Proven · ✅ Complete · ◐ Partial / in progress · ○ Pending · ◇ Split into sub-spikes

  • ● Proven — the theory under test was demonstrated true; the pass criteria were met.
  • ✅ Complete — the spike's question is resolved, a direction is chosen and there are no open blockers, but the original hypothesis did not pass. Used when a fail criterion fired and the spike closed on an alternative approach instead. Spike 4b is the case: footnotes 4.x could not bridge D7's citation/definition field split unaided, so the spike closed on Option 1 + 3. Marking it Proven would imply the module worked, which is the opposite of what was found.
  • ◐ Partial / in progress — under way, not yet resolved.
  • ○ Pending — not started.
  • ◇ Split into sub-spikes — superseded by lettered children; see the child spikes.

Neither Proven nor Complete means "no work left" — both routinely hand downstream implementation to docs/deferred/ or a per-site checklist. What they describe is the state of the question, not the state of the code.

See docs/planning/spikes-plan.md for full spike definitions and pass/fail criteria.


Each file records the outcome of a time-boxed technical spike. The purpose is to document what was proven (or disproven), what the demo shows, and what the spike explicitly does not establish — so downstream decisions are made on accurate evidence.

Template

# Spike N: Title
**Status:** Proven / Complete / Not proven / Partial
**Date:** YYYY-MM
**Branch/commit:** (link or SHA)

## Theory
One sentence: what we were trying to prove.

## Demo
How to see the result. URLs, drush commands, screenshots if needed.

## Findings
What was demonstrated. Be precise about scope.

## What this does NOT establish
Explicit statement of boundaries — what future work still needs to prove.

## Deferred notes
Links to docs/deferred/ items generated during this spike.