Skip to content

MIP decisions

Generated by marola-devkit's decisions from each MIP's §1 first sentence, its "Alternatives considered" bullets and its **Decided YYYY-MM-DD:** lines (MIP-0085 §5.6). Edit the MIPs, not this file; route why "<words>" ranks these rows.

MIP § Status Kind Decision
MIP-0001 1 Implemented summary marola ranks beaches by waves, wind, temperature and a jellyfish heuristic, but says nothing about whether the water is fit to swim in, and in Santa Catarina that is published, per sampling point, by the state environment agency (IMA).
MIP-0001 9 Implemented alternative Do nothing (rejected): Leaves the Ponto 73 case unaddressed
MIP-0001 9 Implemented alternative Parse the PDF bulletins (rejected): Works, no coordinates
MIP-0001 9 Implemented alternative Let the LLM write the lore (rejected): Cheapest to build
MIP-0001 9 Implemented alternative Score RESULTADO directly (e.g. penalise 100-800 enterococci as "borderline") (rejected): Tempting, but it second-guesses the agency's own five-sample classification with a single number
MIP-0002 1 Draft summary Everything marola computes is reachable only from a terminal.
MIP-0002 9 Draft alternative WhatsApp (needs Business API approval) (rejected)
MIP-0002 9 Draft alternative A Telegram library (java-telegram-bot-api, TelegramBots) (rejected)
MIP-0003 1 Draft summary A marola answer today costs one 30-45s Overpass query, twelve sequential Open-Meteo calls and one IMA download, every time, for every user, even for the same beach twice in a minute.
MIP-0003 9 Draft alternative Self-hosted Overpass (rejected): the "proper" fix
MIP-0003 9 Draft alternative SQLite instead of files (rejected): nicer queries, one more dependency
MIP-0003 9 Draft alternative Redis (rejected): right tool for a multi-instance bot
MIP-0004 1 Draft summary A bot people query once is a novelty; a message that arrives at 18:00 saying "amanhã 07:00 na Joaquina: 82/100, água própria, baleias prováveis" is a habit.
MIP-0004 9 Draft alternative Push for everyone who ever shared a location (rejected): no consent, no
MIP-0004 9 Draft alternative Instagram/WhatsApp status cards (rejected): later
MIP-0004 9 Draft alternative Only SC forever (rejected): simpler, and caps the audience at one state
MIP-0005 1 Implemented summary Today every answer costs a live pipeline run per person.
MIP-0005 9 Implemented alternative Dynamic site (server + API) (rejected): Needs hosting, auth
MIP-0005 9 Implemented alternative Map inside Telegram (sendLocation/venue messages) (rejected): Useful for one beach
MIP-0005 9 Implemented alternative A native app on a friend's developer account (rejected): Store review, two codebases
MIP-0005 9 Implemented alternative Supabase as the data store (rejected): Not needed for read-only data
MIP-0006 1 Draft summary Forecasts say what the sea should be doing; a photo says what it is doing.
MIP-0006 9 Draft alternative Buy camera access / partner with a cam provider (rejected): Real cameras, real money
MIP-0006 9 Draft alternative Scrape public cams (rejected): No
MIP-0006 9 Draft alternative Photos only in the bot, not on the map (rejected): Halves the value
MIP-0007 1 Draft summary A pretrained time-series transformer (Nixtla's TimeGPT, or the open-weight models Chronos, TimesFM, Moirai) forecasts a numeric series from its history alone, zero-shot.
MIP-0007 9 Draft alternative Nixtla API from day one (rejected): Fast to try
MIP-0007 9 Draft alternative Hand-written rules only ("rain > 30 mm in 48 h → warn") (rejected): Cheaper, explainable, and probably the control that wins early
MIP-0007 9 Draft alternative Do nothing until the bot exists (rejected): The accumulation part (§4.2) must start now or there is no series when the models are ready
MIP-0008 1 Implemented summary Ship marola as container images, so anyone can run what nix develop + just run does without Nix: a lightweight JVM image (marola:jvm), a native binary image (marola:native, GraalVM native-image, JDK 25), a marola-ollama compose stack (marola + an Ollama sidecar with the model pre-pulled, the just run -- --summarize path), and marola-local: the same stack with the fine-tuned marola-llama3.2 model baked in (finetune/), versioned like code.
MIP-0008 9 Implemented alternative Nix-built images (dockerTools) (rejected): reproducible and small
MIP-0008 9 Implemented alternative A single fat marola-ollama image (Ollama + JRE + jar in one) (rejected): 4+ GB, rebuilt on every code change
MIP-0008 9 Implemented alternative Smoke workflow deploying Pages itself (rejected): races with site.yml
MIP-0008 9 Implemented alternative Do nothing (rejected): nix develop works
MIP-0009 1 Implemented summary Every beach on the map becomes a wave marker coloured by its score instead of a plain dot, and hovering it (tapping, on a phone) shows every aspect marola already knows for that beach at the selected hour: wind level with an emoji, whale-sighting likelihood, jellyfish risk, water temperature, waves, water-quality verdict: the numbers the CLI prints, without opening the card.
MIP-0009 9 Implemented alternative An emoji as the marker (🌊 in a divIcon) (rejected): cannot take the score colour
MIP-0009 9 Implemented alternative A heat/density layer (leaflet.heat) (rejected): explicitly not wanted
MIP-0009 9 Implemented alternative Permanent labels on every marker (rejected): unreadable at area zoom
MIP-0009 9 Implemented alternative Popups on hover (rejected): Leaflet popups close on mouse-out and steal the map's focus
MIP-0009 9 Implemented alternative MapLibre with data-driven symbols (rejected): richer, but a build step and a bigger vendor blob for one tooltip
MIP-0009 9 Implemented alternative Do nothing (rejected): the card works
MIP-0010 1 Implemented summary marola already measures itself: just benchmark scores three answer modes on 22 questions, the DSPy compile step optimises two prompts against a metric, and the fine-tune tiers produce model variants.
MIP-0010 9 Implemented alternative Do nothing (rejected): the Markdown ledger and regex gate work today
MIP-0010 9 Implemented alternative Langfuse (rejected): already optional in dspy/
MIP-0010 9 Implemented alternative Weights & Biases / hosted trackers (rejected): an account and a key for a personal project's ledger
MIP-0010 9 Implemented alternative Java client instead of REST (rejected): see §4.2
MIP-0011 1 Implemented summary marola already follows the parts of Anthropic's guidance that are habits: a CLAUDE.md that imports AGENTS.md, two in-repo skills, one session per feature, a cost line per PR, the agent in a sandbox.
MIP-0011 9 Implemented alternative Do nothing (rejected): the prose works most of the time
MIP-0011 9 Implemented alternative Managed settings (managed-settings.json) (rejected): organisation-level
MIP-0011 9 Implemented alternative ai-jail alone (rejected): filesystem/process containment, no notion of a paid API call or a test gate
MIP-0011 9 Implemented alternative One giant settings.json PR (rejected): harder to attribute a regression (a hook slowing sessions) to a change
MIP-0012 1 Draft summary Two changes, deliberately separable.
MIP-0012 9 Draft alternative Do nothing (rejected): Keeps two toolchains and the admitted skew for a three-example bootstrap
MIP-0012 9 Draft alternative Build ds4s as a library first (FUTURE-WORK.md §10) (rejected): Right scope for a general port
MIP-0012 9 Draft alternative Replace LlmClient with llm4s everywhere (rejected): Lost on churn and weight on the local default
MIP-0012 9 Draft alternative Adopt llm4s only for the compile step (rejected): Pointless
MIP-0012 9 Draft alternative Kyo's AI modules / sttp-ai instead of llm4s (rejected): Cheaper effect fit
MIP-0012 9 Draft alternative Make llm4s-ollama the default (rejected): Rejected until tools/JSON mode reach the local path (OQ1/OQ2)
MIP-0013 1 Accepted summary Try OpenCode (MIT, anomalyco/opencode, v1.18.29 on 2026-09-04, in nixpkgs at 1.18.28) as the day-to-day coding agent for this repository, for a bounded experiment: two MIP-0010-sized tasks delivered end to end under OpenCode, measured on the things this repo already measures (gates green, Cost: per PR, review findings), against the same two tasks' Claude Code figures.
MIP-0013 9 Accepted alternative Do nothing (rejected): Claude Code works and the subscription covers it
MIP-0013 9 Accepted alternative Other harnesses (Codex CLI, Gemini CLI, Aider) (rejected): none reads .claude/skills/ and AGENTS.md as OpenCode does
MIP-0013 9 Accepted alternative OpenCode for CI only (/oc in PR comments) (rejected): a paid run per mention with no reviewer
MIP-0013 9 Accepted alternative Replace outright, skip the tryout (rejected): would discard a working
MIP-0014 1 Draft summary marola has more written-down design and honesty than most personal projects (PHILOSOPHY.md, eleven MIPs, an effects map, a benchmarks ledger), but all of it is reference material, answering "what did we build" one file at a time, never "how would you build this, and why these specific choices, read start to finish." This MIP proposes turning that material into a real technical book, written in LaTeX, versioned in a git repository, built to PDF in CI on every push and released on every tag, the same production discipline this repo already applies to code, aimed at prose instead.
MIP-0014 9 Draft alternative Do nothing (rejected): the docs already serve developers who read docs/
MIP-0014 9 Draft alternative mdBook / Docusaurus (Markdown-native, like The Rust Programming Language) (rejected): lower authoring friction
MIP-0014 9 Draft alternative Pandoc, Markdown → LaTeX (rejected): see §4.5
MIP-0014 9 Draft alternative A book/ directory in this repo instead of a separate repo (rejected): see §5.4's trade-off paragraph
MIP-0014 9 Draft alternative Blog-post series instead of a book (rejected): lower effort, no PDF/CI story
MIP-0015 1 Draft summary Let a marola user say "I'm swimming at Beach X around Time Y" and see whether anyone else who said the same thing is going too; matching people to a shared swim, not broadcasting anyone's location.
MIP-0015 9 Draft alternative Full real-time presence, à la NomadTable's "see who's nearby now" (rejected): richer, but continuous location for a toy project with a handful of users is a much bigger privacy surface than an opt-in
MIP-0015 9 Draft alternative A public "who's here" layer on the map (rejected): deanonymizes immediately at marola's scale (§8) and breaks MIP-0005's "no cookies
MIP-0015 9 Draft alternative Do nothing until the audio is confirmed (rejected): the honest default given §11.1
MIP-0016 1 Draft summary The map gets one small marker per bathing-water sampling point: a green circle with a ✓ for PRÓPRIA, a red circle with a ✕ for IMPRÓPRIA, grey with a ?
MIP-0016 9 Draft alternative Draw the points where the agency puts them (rejected): measured to be on land for every fixture point (§2)
MIP-0016 9 Draft alternative Fixed bearing per area ("the sea is east of Florianópolis") (rejected): wrong for the south and west coasts of the same island
MIP-0016 9 Draft alternative Snap to the beach polygon's seaward edge (rejected): needs the coastline anyway to know which edge is seaward
MIP-0016 9 Draft alternative Colour the beach marker per worst point, no pins (rejected): is what exists
MIP-0016 9 Draft alternative Do nothing (rejected): the card lists the points
MIP-0017 1 Draft summary Two external sources were surveyed for agentic-workflow ideas transferable to marola's own Claude Code setup (not marola-the-product): MadsLorentzen/ai-job-search (a personal job-application automation framework built on Claude Code, ~13.8k★) and four repos from GitHub's trending-agentic-tooling crop of the week of 2026-09-04.
MIP-0017 9 Draft alternative Do nothing (skip this survey's ideas entirely) (rejected): loses two real efficiency/auditability ideas at zero-cost
MIP-0017 9 Draft alternative Adopt pacifio/atlas (a real dependency) instead of §5.1's plain-CSV tracker (rejected): rejected
MIP-0017 9 Draft alternative Adopt Graphify-Labs/graphify for codebase context (rejected): rejected
MIP-0017 9 Draft alternative Adopt eneskirca/nodeterm-style parallel-session tooling (rejected): rejected
MIP-0017 9 Draft alternative Mirror ai-job-search's numbered sub-file skill layout (01-…md, 02-…md inside one skill directory) for marola's own skills (rejected): considered for mip's multi-step template
MIP-0018 1 Draft summary Marola's own development already produces MIP design docs, PR bodies with Cost:/Tested: trailers, and (as of this session) a GH_POST_MORTEM.md operator log: raw material that's already close to storytelling content.
MIP-0018 9 Draft alternative Do nothing, keep reconstructing content manually each week (rejected): Real ongoing friction
MIP-0018 9 Draft alternative Auto-generate the post text itself (LLM-written draft, not just a planner) (rejected): Rejected per §4's own research finding
MIP-0018 9 Draft alternative A hosted/SaaS build-in-public tool (e.g. a Buffer/Hypefury-style scheduler) (rejected): Rejected
MIP-0018 9 Draft alternative Wix as the blog platform (rejected): Not rejected outright
MIP-0018 9 Draft alternative git subtree for the cross-repo mechanic (rejected): Rejected (§6 of docs/3-Working-on-the-repo/SELF-DOCUMENTING.md)
MIP-0019 1 Draft summary scripts/arxiv_digest.py (new, this MIP's companion change) queried the live arXiv API across seven oceanography/forecasting/jellyfish-prediction search terms and cached 40 papers.
MIP-0019 9 Draft alternative Do nothing (skip this survey) (rejected): Loses a real
MIP-0019 9 Draft alternative An LLM-based relevance re-ranker on top of the raw arXiv results (ask a model "is this paper actually about marine jellyfish, not personality psychology or astronomy") (rejected): considered, rejected for v1
MIP-0019 9 Draft alternative Scraping GitHub's actual Trending page instead of the search API (rejected): Rejected
MIP-0020 1 Draft summary marola gets an Instagram professional account whose first post is a picture of the live map with the GitHub Pages URL in the caption and the bio.
MIP-0020 9 Draft alternative Do nothing (rejected): The map stays a README link
MIP-0020 9 Draft alternative Post from a phone forever (v1 only) (rejected): Genuinely fine at one post a week
MIP-0020 9 Draft alternative Instagram API with Facebook Login (rejected): Needs a Facebook Page linked to the account and pages_read_engagement
MIP-0020 9 Draft alternative A third-party scheduler (Buffer/Later/Hootsuite) (rejected): Paid tiers for the useful parts
MIP-0020 9 Draft alternative Unofficial/private-API clients (rejected): Against Instagram's terms
MIP-0020 9 Draft alternative Threads instead (rejected): Has a publishing API too and is text-first
MIP-0020 9 Draft alternative A --cron flag on ig_publish.py that skips the typed yes (rejected): Removes the consent step instead of replacing it
MIP-0020 9 Draft alternative No gate at all (true autonomy) (rejected): The most literal reading of "autonomous daily posting agent"
MIP-0020 9 Draft alternative A Telegram channel post first (rejected): The same render + cron + approval shape with no Meta app
MIP-0021 1 Implemented summary An AccessibilityClient fetches, in one extra Overpass query per run, the amenities OpenStreetMap knows within 300 m of the beaches BeachFinder already found (parking, toilets, showers, lifeguard posts) and marola prints them as facts with counts ("parking nearby: 3, lifeguard post: yes").
MIP-0021 9 Implemented alternative Read tags on the beach elements (wheelchair=*, lifeguard=*) (rejected): §4 measured zero
MIP-0021 9 Implemented alternative Google Places / a paid POI API (rejected): Richer, costs money
MIP-0021 9 Implemented alternative Fold it into BeachFinder's query (rejected): One round trip instead of two
MIP-0021 9 Implemented alternative Ask the LLM to describe facilities (rejected): Unsourced text about safety-relevant facts
MIP-0021 9 Implemented alternative Do nothing (rejected): The reply keeps answering "when" and not "how do I get there and is anyone watching"
MIP-0022 1 Implemented summary When an --ask / ask_ocean_question / /perguntar answer was grounded in a document under knowledge/safety/, the rendered reply ends with a fixed two-line footer, who to call (guarda- vidas / Bombeiros 193, SAMU 192) and "this does not replace professional help", appended by the rendering code after the model's text.
MIP-0022 9 Implemented alternative Put the footer in the prompt ("always end safety answers with…") (rejected): The model can drop
MIP-0022 9 Implemented alternative Front-matter marker per document instead of a directory (rejected): Needs a Corpus parser change
MIP-0022 9 Implemented alternative Footer on every answer (rejected): Simpler, but turns the numbers into wallpaper on whale-season questions
MIP-0022 9 Implemented alternative Make the corpus part of this MIP (rejected): No
MIP-0022 9 Implemented alternative Do nothing (rejected): The first first-aid document ships answers with no "call 193/192"
MIP-0023 1 Draft summary marola has a real product surface today, the static map (MIP-0005, live at https://h0ffmann.github.io/marola/), and a real gap: no way for an interested visitor to leave contact info for the not-yet-built Telegram bot, no plan for where a hobby launch gets seen, and no written answer for keeping the site and eventual bot maintained without babysitting.
MIP-0023 9 Draft alternative Do nothing (keep asking friends by hand) (rejected): Free, but no durable signal or scale past the maintainer's own network
MIP-0023 9 Draft alternative Embed a Formspree/Tally form directly on index.html (rejected): Rejected as default
MIP-0023 9 Draft alternative Build a bespoke Cloudflare Worker sign-up form now (rejected): Rejected
MIP-0023 9 Draft alternative Launch on Product Hunt/BetaList immediately, wait-list as the "product." Rejected (rejected): a poor audience match for "not live yet," burning a one-shot slot on the weakest form of it
MIP-0025 1 Partially implemented summary Ship marola-sea-1.0: a 3B base model post-trained in three layers (marine-domain SFT, MCP tool-call SFT, safety DPO), merged and quantized to GGUF, served through Ollama exactly like today's marola-llama3.2 (finetune/README.md).
MIP-0025 9 Partially implemented alternative Prompt-only via DSPy (dspy/compile_recommendation_prompt.py) (rejected): Already built, already run live
MIP-0025 9 Partially implemented alternative A bigger untuned model (e.g., the 26GB dolphin-mixtral:8x7b already used in ARCHITECTURE.md §5a's DSPy compile run) (rejected): Better instruction-following observed live already
MIP-0025 9 Partially implemented alternative RAG only, no fine-tuning at all (rejected): The knowledge/*.md RAG path (ask_ocean_question) already exists and stays regardless of this MIP
MIP-0025 9 Partially implemented alternative Do nothing (rejected): finetune/'s Tier 2 stays "written
MIP-0029 1 Implemented summary marola is already, in substance, more than a swim-time answer: MIP-0001 grounds it in bathing-water quality and a sourced sea-lore corpus, MIP-0009/0016 put tides, wind, jellyfish and water-quality marks on the map, MIP-0021/0022 add accessibility and a safety footer, and FUTURE-WORK.md §1 already argues the scoring engine should generalize past swimming to surf, dive, sailing, fishing, whale watching.
MIP-0029 9 Implemented alternative Keep "swim" as the brand (rejected): Zero cost, maximum clarity
MIP-0029 9 Implemented alternative "Beach intelligence." Anchors to a place rather than the sea itself (which matters offshore, for divers and sailors who never touch the beach) (rejected): narrower than "ocean," not chosen
MIP-0029 9 Implemented alternative "Sea assistant." Duplicates AGENTS.md:8's existing "assistant" noun and undersells the deterministic-layer framing PHILOSOPHY.md argues for (rejected): not chosen
MIP-0029 9 Implemented alternative A separate product name per use case ("marola-swim," "marola-surf") (rejected): Multiplies the branding work FUTURE-WORK.md §1 explicitly designed against (one ActivityScoring object per activity, no other code touched)
MIP-0029 9 Implemented alternative Do nothing (rejected): Cheapest, and not wrong today since no second use case is built
MIP-0030 1 Partially implemented summary marola shows named trails from OpenStreetMap near any beach or lake it already found for an area: named highway=path/track ways and route=hiking/foot relations within 500 m of one.
MIP-0030 9 Partially implemented alternative Do nothing (rejected): Free, but it leaves facts that are already mapped off a map that exists to show what is near a beach
MIP-0030 9 Partially implemented alternative Overpass per area for good (rejected): one query per build
MIP-0030 9 Partially implemented alternative Overpass per state (rejected): a state-wide query goes far over [timeout:60] and against Overpass's fair use
MIP-0030 9 Partially implemented alternative Ways only misses the Transcarioca, and relations only misses almost every local trail (rejected)
MIP-0030 9 Partially implemented alternative ST_ReadOSM straight on the .pbf needs no extra tool, but it builds every way from its nodes over a whole region (§4.2) (rejected)
MIP-0030 9 Partially implemented alternative A shell and SQL ETL in marola-oods (rejected): smaller, but it gives that repo code of its own
MIP-0030 9 Partially implemented alternative The ETL in marola-site (rejected): the site would read extracts and write the lake (§2)
MIP-0030 9 Partially implemented alternative Wikiloc or AllTrails tracks (§4.3) (rejected): no reuse terms
MIP-0031 1 Partially implemented summary Two new WaterQualityClient implementations, IneaRjWaterQualityClient (Rio de Janeiro) and InemaBaWaterQualityClient (Bahia), extend AppConfig's Auto provider selection so beaches in those states get a real PRÓPRIA/IMPRÓPRIA verdict instead of "no data", matching what Santa Catarina already gets from ImaScWaterQualityClient.
MIP-0031 9 Partially implemented alternative Do nothing (rejected): Leaves the honest "no data" state MIP-0030 confirmed is not a bug
MIP-0031 9 Partially implemented alternative Brasil.IO's dataset anyway, ignoring staleness (rejected): Rejected outright (§4.1)
MIP-0031 9 Partially implemented alternative Geocode automatically (a geocoding API against each point's free-text description) instead of hand-curating coordinates (rejected): Considered and rejected for v1
MIP-0032 1 Draft summary just benchmark today answers one question, "is marola's RAG better than the plain prompt?", for one model (llama3.2, local).
MIP-0032 9 Draft alternative (a) An addendum to MIP-0010 (rejected): The ledger records runs
MIP-0032 9 Draft alternative (b) An addendum to MIP-0025 (rejected): Its §7 is the verification of one candidate model
MIP-0032 9 Draft alternative Promptfoo (FUTURE-WORK.md §10) (rejected): a YAML matrix runner over providers
MIP-0032 9 Draft alternative A "from-scratch" arm (rejected): Pretraining is off the table for cost and corpus reasons (the maintainer's own conclusion)
MIP-0032 9 Draft alternative Do nothing (rejected): MIP-0025 would compare three Markdown files by hand and the local-vs-hosted argument would stay prose
MIP-0033 1 Partially implemented summary Release 0 is the first public-facing bundle of marola: the repo goes public, marola.dev (already public, already static) gets a real chatbot widget backed by Ollama running on the maintainer's own machine (via a Cloudflare Tunnel, with a graceful "LLM unavailable" state when the tunnel or Ollama is down), and the first fine-tuned marola model is published to Hugging Face.
MIP-0033 9 Partially implemented alternative Keep the repo private, ship only the chatbot + model (rejected): Loses the outreach/transparency value the maintainer explicitly asked for ("release public")
MIP-0033 9 Partially implemented alternative A hosted (Hetzner) chatbot origin instead of the maintainer's own machine (rejected): Rejected per the maintainer's own explicit choice this session ("start with something on my personal computer") and because it reintroduces the cost questions the earlier hosting research already weighed against GitHub Pages' free baseline
MIP-0034 1 Draft summary Three separable things, deliberately not one pipeline.
MIP-0034 9 Draft alternative Do nothing (rejected): Costs nothing and loses nothing today
MIP-0034 9 Draft alternative Auto-ingest feed items into knowledge/ with an LLM summarisation + Reviewer pass (rejected): The obvious reading of "RSS feeds into the knowledge base"
MIP-0034 9 Draft alternative Store feed bodies in the index with a freshness decay instead of a hard corpus/alert split (rejected): Much more work
MIP-0034 9 Draft alternative A hosted aggregator (Feedly/Inoreader API) (rejected): An account, a key
MIP-0034 9 Draft alternative Scrape Marinha/CHM with a headless browser past Cloudflare (rejected): Rejected
MIP-0034 9 Draft alternative Only do the outbound feed, skip inbound (rejected): Genuinely viable and the cheapest subset
MIP-0035 1 Accepted summary A small, stable JavaScript hook (window.marola.registerPlugin) exposed by site/static/app.js, plus a committed site/static/plugins.json manifest of known plugin script URLs that app.js loads via <script> injection on page load, the same shape Windy's own plugin model uses (a JS bundle, loaded by URL, given access to the map instance), adapted to marola's plain Leaflet map (not Windy's LeafletGL) and to a static site with no backend, which changes how a plugin gets registered (a PR to a JSON file, not an upload API) but not how it gets loaded and run (still just a <script src>).
MIP-0035 9 Accepted alternative A Windy-style upload/marketplace service (rejected): Rejected for v1
MIP-0035 9 Accepted alternative Sandboxed <iframe> plugins with a postMessage API (rejected): Real isolation, but a much smaller and harder-to-design capability surface (no direct Leaflet access) for a repo with
MIP-0035 9 Accepted alternative Do nothing (rejected): every new layer stays a marola PR
MIP-0036 1 Draft summary Release 0 (MIP-0033) is a milestone with no audience: the repo goes public, a chatbot goes live, a model lands on Hugging Face, and by default nobody outside this repository ever finds out.
MIP-0036 9 Draft alternative Do nothing / a quiet release (rejected): Push the release tag
MIP-0036 9 Draft alternative Everything on launch day, simultaneously (rejected): The most literal reading of "as loud as possible"
MIP-0036 9 Draft alternative One post, one channel (Reddit or LinkedIn only) (rejected): Lowest risk, lowest cost
MIP-0036 9 Draft alternative Paid promotion (LinkedIn/Reddit ads) (rejected): Rejected
MIP-0036 9 Draft alternative Automating the posting (rejected): Rejected on this MIP's own §5.11 grounds and MIP-0018 §4's finding that most of these platforms have no usable API for an individual anyway
MIP-0036 9 Draft alternative Product Hunt / Hacker News as launch channels (rejected): Both are plausible and neither was researched here
MIP-0037 1 Draft summary A service worker (site/static/sw.js) caches the app shell (index.html, app.js, style.css, vendor/leaflet.*) and the last successfully fetched board JSON, so a visitor who loses signal mid-session (a real scenario at a beach) keeps a working, if stale, map instead of a blank error.
MIP-0037 9 Draft alternative Do nothing (rejected): The site already works when online
MIP-0037 9 Draft alternative A full PWA framework (Workbox, etc.) pulls in a build step this repo's site/static/ explicitly avoids (MIP-0005 §9) (rejected): a ~30-line hand-written service worker covers this MIP's actual scope (two file types, one JSON endpoint) without one
MIP-0038 1 Draft summary marola shows one wave height per beach-hour, from Open-Meteo's best_match model, and never says that other wave models disagree, sometimes by enough to move the hour across Swimability's own rough seas threshold.
MIP-0038 9 Draft alternative Do nothing (rejected): Keeps one clean number
MIP-0038 9 Draft alternative Show every model as a layer, Windy-style (rejected): Honest and free
MIP-0038 9 Draft alternative Average the models into one number (rejected): Tempting and wrong
MIP-0038 9 Draft alternative Score the roughest model (conservative) (rejected): Defensible for a safety product
MIP-0038 9 Draft alternative Use the Ensemble API instead (rejected): No marine variables (§4.2)
MIP-0038 9 Draft alternative A numeric confidence percentage ("72% confident") (rejected): A number marola cannot compute honestly from two models with no verification history
MIP-0039 1 Draft summary Everything marola computes is deterministic, and then one 3B model writes a sentence over it, a second 3B model checks that sentence, and whatever comes back is printed.
MIP-0039 9 Draft alternative Do nothing (rejected): The --summarize path keeps printing a contradicted jellyfish level to a swimmer
MIP-0039 9 Draft alternative Make the prompt stricter (rejected): Already tried
MIP-0039 9 Draft alternative Trust Reviewer and gate on its verdict (don't print when verdict=revise) (rejected): Cheaper, and it makes a 3B model the sole arbiter of whether a 3B model lied
MIP-0039 9 Draft alternative An LLM-as-judge grounding metric (Ragas-style, §4.2) (rejected): The right tool for prose-vs-prose
MIP-0039 9 Draft alternative Adopt llm4s's GroundingGuardrail (rejected): 154 jars for a model-backed check (MIP-0012 §4.1/§8)
MIP-0039 9 Draft alternative Slot-constrained generation only (§4.1/§5.3), skipping the guard (rejected): The intuitive answer
MIP-0039 9 Draft alternative A fine-tune that refuses better (MIP-0025 Layer 3, DPO) (rejected): A real complement
MIP-0040 1 Draft summary marola's second LLM pass grades the first one and prints Reviewer (score 72/100, verdict: approve) to the user.
MIP-0040 9 Draft alternative Do nothing (rejected): The reviewer keeps printing a number that moved 55 points on an unchanged input today
MIP-0040 9 Draft alternative Set temperature 0 and stop there (rejected): Cheap, real, and it buys reliability without validity
MIP-0040 9 Draft alternative Delete the reviewer (rejected): Defensible if kappa comes back at zero
MIP-0040 9 Draft alternative Use a frontier model as the judge (Claude/GPT via MIP-0032's paid arm) (rejected): It would likely agree with a human more often
MIP-0040 9 Draft alternative Reviewer-of-the-reviewer / debate (rejected): The intuitive scaling move
MIP-0040 9 Draft alternative Adopt promptfoo or DeepEval (rejected): Both run locally against Ollama
MIP-0040 9 Draft alternative Fold this into ROADMAP.md §5's proposed multi-agent eval harness (rejected): That item is about scoring per-agent contribution across summariser/reviewer/escalation with shared-run-id traces
MIP-0041 1 Draft summary marola's own dev-loop rules (AGENTS.md, .claude/rules/*.md, this session's own memory files) today only change reactively, one mid-session correction at a time, with no citation trail beyond "the maintainer said so." This MIP proposes a small, human-gated pipeline, soft ingestion, that takes a book the maintainer already owns, extracts short, page-cited candidate principles with a local LLM pass, and writes them to a plain-checklist file for review, never auto-applying anything to a rule file.
MIP-0041 9 Draft alternative Manual reading + manual AGENTS.md edits (status quo) (rejected): keeps full human judgment
MIP-0041 9 Draft alternative Auto-apply extracted agentic-behavior principles straight into AGENTS.md (rejected): rejected outright
MIP-0041 9 Draft alternative Treat the book like another knowledge/*.md RAG corpus entry (FUTURE-WORK.md §9.1) (rejected): rejected for this specific use
MIP-0041 9 Draft alternative A cloud LLM instead of local Ollama (rejected): available later as an opt-in
MIP-0042 1 Draft summary Freeze today's static map at marola.dev/v1/, same files, same 3-hourly build, permanently available, and start a second client at marola.dev/v2/ that computes a beach's score in the visitor's browser, at the moment they load the page, instead of reading a board baked hours earlier.
MIP-0043 1 Implemented summary This MIP adds docs/4-Research-and-plans/AWESOME-AGENTIC-ENGINEERING.md, a public curated list of agentic-engineering projects (agent frameworks, MCP tooling, DSPy/prompt-compilation, critic/reviewer-pattern pipelines, spec/RFC-driven agent dev-loops) in the sindresorhus/awesome "Awesome List" convention, verified live against github.com/sindresorhus/awesome itself, not guessed from memory, plus a companion script, scripts/awesome_agentic_digest.py, that queries the real GitHub Search API for candidate repos and caches them for a human to manually curate into the doc.
MIP-0043 9 Implemented alternative A GitHub Actions workflow that auto-opens a PR with digest results (rejected): rejected, this MIP's entire design principle (§5, following MIP-0041) is that nothing gets written into the curated doc unattended
MIP-0043 9 Implemented alternative A --write flag that appends candidates directly to the doc (rejected): rejected, this is exactly the failure mode §8's first bullet and MIP-0041's own risk section warn about
MIP-0043 9 Implemented alternative Do nothing (no such doc) (rejected): loses the community/outreach value and the discoverability the "top 10 similar repos" section provides for marola itself
MIP-0043 11 Implemented decided Decided 2026-09-28: yes, in this MIP's own implementation: it's a docs/*.md file like any other, and the doc index is meant to be complete.
MIP-0044 1 Partially implemented summary marola.dev is a map and nothing else: no page explains what marola is, who made it, how to reach them, what changed last week, or where the code documentation lives.
MIP-0044 9 Partially implemented alternative (a) Do nothing (rejected): The map stays the whole site
MIP-0044 9 Partially implemented alternative (b) A static-site generator (Hugo / Jekyll / Astro / 11ty) (rejected): Real tools, and each brings a toolchain
MIP-0044 9 Partially implemented alternative (c) Client-side markdown rendering (marked/markdown-it, vendored) (rejected): Less code
MIP-0044 9 Partially implemented alternative (d) GitHub Wiki as the docs surface (rejected): A separate repo
MIP-0044 9 Partially implemented alternative (e) A second Pages site (or Read the Docs) for /dev/ (rejected): Another host, another privacy surface
MIP-0044 9 Partially implemented alternative (f) sbt-unidoc for one merged Scala API site instead of four per-module sites (rejected): Nicer output, but another sbt plugin to keep working against Scala 3.9
MIP-0044 9 Partially implemented alternative (g) A hosted contact form (Formspree/Netlify Forms) (rejected): A third-party origin in the CSP
MIP-0044 9 Partially implemented alternative (h) Skip the /support/ page entirely and ship only .github/FUNDING.yml (rejected): Genuinely defensible and the least promotional option available
MIP-0045 1 Draft summary Six places in marola call (or are one step from calling) a language model for a job that is classification, ranking, matching, or extraction rather than generation.
MIP-0045 9 Draft alternative Do nothing (rejected): Defensible for §5.3/§5.4
MIP-0045 9 Draft alternative A better embedder instead (nomic-embed-text, free via Ollama) (rejected): Already tried
MIP-0045 9 Draft alternative sentence-transformers (rejected): §4.4
MIP-0045 9 Draft alternative An LLM-as-judge relevance filter (ask the model whether each passage is relevant) (rejected): Strictly more expensive than the thing it would replace
MIP-0045 9 Draft alternative Delete the embedding path entirely (rejected): Rejected
MIP-0046 1 Accepted summary Every emoji on the map is replaced by a small monochrome mark drawn from nautical- and weather-chart vernacular: a barb-derived wind shaft, the site's own wave, a sounding bulb, a whale and a jellyfish silhouette, four plain facility pictograms, defined once as SVG <symbol>s inside index.html and referenced by <use href="#…">.
MIP-0046 9 Accepted alternative Do nothing (rejected): The chrome is already clean and the emoji "work"
MIP-0046 9 Accepted alternative Emoji everywhere, but only "safe" ones (drop 🪼) (rejected): Keeps the platform-variance problem and the generated look
MIP-0046 9 Accepted alternative Sprite the markers too (rejected): 80 <use> per render
MIP-0046 9 Accepted alternative A CSS-only icon set (borders/masks) (rejected): No extra request either
MIP-0046 9 Accepted alternative Redesign the page (rejected): Out of scope and against the skill's own advice
MIP-0047 1 Draft summary marola's visual vocabulary becomes equation-drawn: a small set of illustrative motifs, a trochoidal swell, a right-whale silhouette, a jellyfish, a two-constituent tide curve, a rip-current streamline pair, designed by tuning real equations in Desmos's free graphing calculator, then brought home as the equations, not as the picture, and rendered by a small in-repo script into the same inline SVG <symbol> sprite MIP-0046 introduces.
MIP-0048 1 Draft summary marola-sea today is SmolLM2-360M fine-tuned on marola's corpus: a proof that the pipeline works end to end, explicitly not a quality bar.
MIP-0048 9 Draft alternative Do nothing (rejected): keep tiny
MIP-0048 9 Draft alternative Train Qwen3.8-27B as originally asked (rejected): Hardware allows it (§4.3)
MIP-0048 9 Draft alternative Llama-3.2-3B (base preset) (rejected): Works, but carries the naming obligation
MIP-0048 9 Draft alternative Grow the corpus and keep the 360M model (rejected): Genuinely competitive, and cheaper
MIP-0048 9 Draft alternative Skip fine-tuning (rejected): rely on RAG with a stock model
MIP-0049 1 Draft summary The map page is 32 KB of hand-written ES5-style JavaScript plus 13 KB of CSS.
MIP-0049 9 Draft alternative Do nothing (rejected): Entirely defensible
MIP-0049 9 Draft alternative Modernise the JavaScript instead (rejected): const/let, ES modules
MIP-0049 9 Draft alternative The strongest alternative to §5.2 and the one to compare against when the time comes (rejected)
MIP-0049 9 Draft alternative TypeScript (rejected): Real types, but adds a build step and a second language toolchain
MIP-0049 9 Draft alternative A game engine (Indigo) (rejected): §4.4
MIP-0050 1 Draft summary marola is a Brazilian product that answers in English, running a 360M English-centric model that demonstrably invents facts.
MIP-0050 9 Draft alternative Do nothing (rejected): Defensible
MIP-0050 9 Draft alternative A bigger general model (Llama-3.2-3B, the base preset) (rejected): Already available, already works
MIP-0050 9 Draft alternative Translate at the edges (rejected): keep an English model
MIP-0050 9 Draft alternative Sabiá-7B (rejected): §4.3
MIP-0051 1 Draft summary marola quotes a wave height for every beach and never says where it came from.
MIP-0051 9 Draft alternative Do nothing (rejected): Rejected on §2's numbers
MIP-0051 9 Draft alternative Pick the single best model and hard-code it (rejected): Cheaper, and it is what marola accidentally does today
MIP-0051 9 Draft alternative Average instead of median (rejected): Rejected
MIP-0051 9 Draft alternative Fold disagreement into the score (rejected): Rejected per §6 and MIP-0001's precedent
MIP-0051 9 Draft alternative Go straight to running WW3/WRF (rung C first) (rejected): Rejected as the sequencing
MIP-0051 9 Draft alternative Copernicus Marine (CMEMS) direct (rejected): A richer source than Open-Meteo
MIP-0052 1 Draft summary MIP-0051 found that public wave models disagree by up to 6.7× at marola's sheltered beaches because they cannot resolve them.
MIP-0052 9 Draft alternative Do nothing at all, don't write this MIP (rejected): Rejected
MIP-0052 9 Draft alternative Adopt the attached C++/Kokkos plan as written (rejected): Rejected on §4.1 and §5
MIP-0052 9 Draft alternative Port to one of the other candidate languages instead (§4.2) (rejected): Rejected for the same reason the Kokkos plan is
MIP-0052 9 Draft alternative Use MPAS for atmosphere instead of WRF (rejected): Not rejected, deferred
MIP-0052 9 Draft alternative Buy the data instead of computing it (rejected): Not seriously costed here
MIP-0052 9 Draft alternative AI surrogates for the source terms (rejected): Not rejected, deferred
MIP-0052 9 Draft alternative NLML (Ikuyajolu et al., JGR: Machine Learning and Computation, 2026, the same authors as the 2023 OpenACC WW3 paper) emulates WW3's exact nonlinear interactions at 136× the speed of WRT, 1.04× the cost of DIA and twice DIA's accuracy, stable through a year-long integration (rejected): That is the direction the E3SM wave group actually went after OpenACC
MIP-0053 1 Draft summary The question that prompted this MIP was whether a GPU model (XGBoost, a DNN, a transformer) can compete with WAVEWATCH III.
MIP-0053 9 Draft alternative Do nothing (rejected): ship MIP-0051 and stop
MIP-0053 9 Draft alternative Run our own 1.1 km nest (MIP-0051 §5.3 / MIP-0052) (rejected): The physically correct fix
MIP-0053 9 Draft alternative Aurora 0.25° Wave (rejected): §4.1
MIP-0053 9 Draft alternative XGBoost or an LSTM instead of a linear fit (rejected): §4.2 and §4.4
MIP-0053 9 Draft alternative Fine-tune marola-sea (MIP-0025/0048) to predict wave height (rejected): Rejected
MIP-0053 9 Draft alternative Buy a commercial nearshore forecast (rejected): Still uncosted, still the honest alternative to all of the above
MIP-0054 1 Accepted summary marola's users are Brazilian swimmers; its beach names, bulletins and CONAMA verdicts are Portuguese; everything marola itself says, site copy, CLI output, scoring notes, sea lore, corpus, prompts, the model's summary, is English.
MIP-0054 9 Accepted alternative Do nothing (rejected): Rejected by the release decision this MIP records and MIP-0050 §2's argument
MIP-0054 9 Accepted alternative Translate at the edges (English model, a translation pass after it) (rejected): a second model call on the safety-relevant path
MIP-0054 9 Accepted alternative Portuguese only, no toggle, wrong for a repo whose docs are English, and the catalog costs the same once it exists (rejected)
MIP-0054 9 Accepted alternative Language from location, rejected (§5.5) (rejected): a denied prompt must not cost the visitor their language
MIP-0054 9 Accepted alternative IP geolocation in the page, §4.5 (rejected)
MIP-0054 9 Accepted alternative Regex over the English notes client-side, hard-codes English as the wire format (rejected): codes are the contract
MIP-0055 1 Draft summary --ask and ask_ocean_question retrieve over knowledge/*.md through FileKnowledgeStore: a flat JSON file, every chunk scanned with cosine, one Ollama embedding call per question, and a relevance threshold that is 0.0 because the default embedder's scores carry no signal.
MIP-0055 9 Draft alternative Do nothing / keyword only (MIP-0045 §5.1's TF-IDF store) (rejected): loses PT↔EN and paraphrase matching
MIP-0055 9 Draft alternative Keep the JSON file, swap the embedder (rejected): MAROLA_LOCAL_EMBED_MODEL=bge-m3 today, with no code change
MIP-0055 9 Draft alternative Qdrant as default (rejected): a process, a port and Docker for no gain at this scale
MIP-0055 9 Draft alternative A bigger model at query time (rejected): costs on every request
MIP-0056 1 Draft summary Build data/oods/: a git-versioned, everyone-can-read store of Brazilian bathing-water samples, one adapter per monitoring institute, a common schema, and DuckDB SQL views that union every state into one table.
MIP-0056 9 Draft alternative Do nothing (rejected): keep the five-sample cache
MIP-0056 9 Draft alternative Python (oods/ package, DuckDB + pdfplumber), the natural ETL toolchain and the more familiar one for outside contributors (rejected): Lost on PHILOSOPHY.md's own rule
MIP-0056 9 Draft alternative Store the weekly PDFs as the primary, what the app parses today (rejected): 300 KB binary each
MIP-0056 9 Draft alternative A separate oods repository, cleaner licence story and a smaller marola tree (rejected): but the adapters reuse marola's parsers and the map is the first consumer
MIP-0056 9 Draft alternative SQLite / Delta / LFS, §4.4 (rejected)
MIP-0057 1 Draft summary marola's docs/2-Building-marola/ARCHITECTURE.md §5 treats several capabilities as pluggable behind traits, each with a free local default.
MIP-0057 9 Draft alternative Do nothing (stay local-only) (rejected): Loses nothing marola uses today
MIP-0057 9 Draft alternative Add GCP as a backend for every integration at once (rejected): Rejected
MIP-0057 9 Draft alternative Recommended path (rejected): add gcp/ as a fully opt-in backend module behind the existing core traits
MIP-0057 9 Draft alternative This MIP does not commit to building even that slice, it only says that if one integration is picked first, the evidence points here (rejected)
MIP-0057 9 Draft alternative A GCP-specific cost/deployment guard (guard-gcp.sh), built now, ahead of any GCP code (rejected): Rejected as premature
MIP-0058 1 Draft summary marola.dev gets its first credited human artist: Daniela Vicentini (@_danielavicentini), a visual artist and art therapist whose own portfolio already includes watercolors of Campeche, the same Santa Catarina coast marola's water-quality data (MIP-0056) covers.
MIP-0059 1 Draft summary Jev is a "System One" model from TypeSafe AI, launched 2026-09-15..18: it takes a block of program state plus a set of typed questions and returns typed answers, one of a fixed option set, an ordinal score, or a yes/no probability, with calibrated probabilities and a confidence, in 70-500 ms.
MIP-0059 9 Draft alternative Do nothing (rejected): Strongest option today
MIP-0059 9 Draft alternative Constrained decoding locally (grammar/JSON-schema-constrained Ollama) (rejected): Free, offline, no vendor
MIP-0059 9 Draft alternative This is the real competitor and should be benchmarked against Jev in the bootstrap ⚠ (not evaluated here) (rejected)
MIP-0059 9 Draft alternative A fine-tuned local classifier (MIP-0025 tiers) (rejected): Cheapest at runtime
MIP-0060 1 Partially implemented summary alibaba/open-code-review (OCR) is an Apache-2.0 Go CLI that reviews a git diff with an LLM agent constrained by deterministic file selection, rule matching and comment positioning, and emits line-level findings as JSON.
MIP-0060 9 Partially implemented alternative Upstream's Action as-is (uses: alibaba/open-code-review@<sha> + ocr_version) (rejected): Least work, and its incremental posting is better than ours
MIP-0060 9 Partially implemented alternative Upstream's Action inside a container: node:24 job (their self-hosted recipe) (rejected): Better isolation, but needs Docker on the runner path and host networking to reach Ollama
MIP-0060 9 Partially implemented alternative /code-review in CI (rejected): Already available, better recall
MIP-0060 9 Partially implemented alternative Automatic on ready_for_review/every push (this MIP's first draft) (rejected): Dropped 2026-09-19 on the maintainer's call
MIP-0060 9 Partially implemented alternative Do nothing (rejected): Reviews stay manual and late
MIP-0062 1 Draft summary A ressaca (heavy surf driven onto the coast, worst when a spring tide and a southerly wind coincide) is the event that erodes Florianópolis's beaches and the one condition under which the right advice is "do not go in".
MIP-0062 9 Draft alternative Scrape the Navy's warnings (rejected): Authoritative, and it refuses automated fetches
MIP-0062 9 Draft alternative Use the video's per-beach counts (rejected): Unsourced until the 2010–2024 study is found
MIP-0062 9 Draft alternative Sea-level-rise lore (rejected): True and irrelevant to tomorrow's swim
MIP-0062 9 Draft alternative Do nothing (rejected): marola keeps calling a ressaca "rough seas" and scoring it above zero
MIP-0063 1 Partially implemented summary marola already does spec-driven development: a MIP is the spec, MIP-NNNN.tasks.md is the plan, a stacked PR is the increment.
MIP-0063 9 Partially implemented alternative Do nothing (rejected): ROADMAP prose and tasks.md keep working for one maintainer with one agent
MIP-0063 9 Partially implemented alternative Adopt spec-kit wholesale, as brunogbv/cv does (rejected): .specify/, nine skills
MIP-0063 9 Partially implemented alternative Milestones as phases (this design's first draft) (rejected): Rejected by the maintainer during brainstorming
MIP-0063 9 Partially implemented alternative Epic issues as a separate object, milestones reserved for releases (rejected): The milestone is the epic
MIP-0063 9 Partially implemented alternative Status as a label family (status/triage, …) instead of a board field (rejected): That is what a board is for
MIP-0063 9 Partially implemented alternative A blocked label with the blocker named in prose, which is what this design carried until the maintainer's review of PR #413 asked how a contributor is supposed to know what is ready (rejected): Rejected once §4.2's native dependencies turned out to be GA on Free
MIP-0064 1 Implemented summary marola.dev's Docs tab lands on a hand-built index page that links out to GitHub for every Markdown file: no rendering, no search, no diagrams.
MIP-0064 9 Implemented alternative Do nothing (rejected): The index works and costs nothing
MIP-0064 9 Implemented alternative Nix-native mkdocs + public kroki.io (rejected): No Docker, a three-line CI step
MIP-0064 9 Implemented alternative mkdocs-material's built-in Mermaid (pymdownx.superfences, no Kroki at all) (rejected): Simplest possible diagrams
MIP-0064 9 Implemented alternative A hand-written nav: (rejected): Curated ordering and MIP grouping by status
MIP-0064 9 Implemented alternative Extending build_docs_index.py to render Markdown itself (rejected): A search index
MIP-0065 1 Implemented summary Every gate and both deploys already run in GitHub Actions, but nine jobs are routed to the maintainer's desktop through runs-on: ${{ vars.CI_RUNNER \|\| 'self-hosted' }}.
MIP-0065 9 Implemented alternative Flip CI_RUNNER=ubuntu-latest, change nothing else (rejected): One click, but both tool paths stay
MIP-0065 9 Implemented alternative Nix for every job (rejected): One mechanism, but a Nix install in front of every JVM job for parity the sbt jobs already have through setup-java
MIP-0065 9 Implemented alternative Keep CI_RUNNER as an escape hatch (rejected): Reopens the fork exposure whenever it is used
MIP-0065 9 Implemented alternative Unregister the desktop runner entirely (rejected): Loses GPU publishing
MIP-0065 9 Implemented alternative This MIP first, MIP-0064 rebased on top (rejected): Offered
MIP-0065 9 Implemented alternative Cross-MIP edges by hand (issues.sh deps add) (rejected): No code, but breaks "edges come from the depends on column" and a re-projection would not know the edge exists
MIP-0065 9 Implemented alternative Do nothing (rejected): CI keeps stopping when the desktop sleeps
MIP-0066 1 Draft summary A contributor who has Docker and VS Code (or JetBrains, or the devcontainer CLI, or GitHub Codespaces) opens the repo in a container and gets the toolchain nix develop gives today, from the same flake.lock, without installing Nix.
MIP-0066 9 Draft alternative Reuse the Dockerfile dev target (rejected): One image already exists
MIP-0066 9 Draft alternative A Dockerfile without Nix (apt, sdkman, pip) (rejected): Fastest to open
MIP-0066 9 Draft alternative The full default shell in the container (rejected): One shell to reason about
MIP-0066 9 Draft alternative Codespaces prebuilds (rejected): The fastest Codespaces start
MIP-0066 9 Draft alternative Do nothing (rejected): Nix remains the only door
MIP-0067 1 Draft summary MIP-0031 shipped one INEA parser and pointed it at one hardcoded June PDF.
MIP-0067 9 Draft alternative Do nothing (rejected): Rio keeps a frozen June verdict that reads as today's
MIP-0067 9 Draft alternative A parser per zone (rejected): Four near-identical files that drift apart
MIP-0067 9 Draft alternative Parse the historico PDFs instead (rejected): One file per zone-year and a third code format
MIP-0067 9 Draft alternative URL guessing from the -N suffix or the upload month (rejected): Rejected
MIP-0068 1 Implemented summary MIP-0064 put a self-hosted Kroki behind the docs site, and five Mermaid diagrams use it (CI-CD.md ×2, ARCHITECTURE.md, MIPs/README.md, the generated MIP graph).
MIP-0068 9 Implemented alternative Do nothing (rejected): The ASCII keeps misaligning
MIP-0068 9 Implemented alternative Mermaid only (rejected): Simplest, and everything renders on GitHub
MIP-0068 9 Implemented alternative Keep both themes, render each diagram twice (styles_light/styles_dark) (rejected): Doubles every render and every legibility check
MIP-0068 9 Implemented alternative Commit rendered SVGs (rejected): This would render on GitHub for every dialect
MIP-0068 9 Implemented alternative kroki.io instead of self-hosted companions (rejected): No 612 MB pull
MIP-0068 9 Implemented alternative Generate the task DAGs from depends on (rejected): It would be better than drawing them by hand
MIP-0070 1 Implemented summary marola-dev/marola becomes an umbrella: the team layer (ways of working, MIPs, the aggregated docs site) with every code repo as a git submodule.
MIP-0070 9 Implemented alternative Do nothing (rejected): It keeps the one-tree agent context
MIP-0070 9 Implemented alternative Full modularity (core/local as published libraries with semver) (rejected): This is the most SRP-pure option
MIP-0070 9 Implemented alternative Keep marola-dev/marola as the Scala app, with a new umbrella repo (rejected): Issues, MIP history and every #N reference would have to move or keep pointing at a code repo
MIP-0070 9 Implemented alternative Require the umbrella for shared tooling (../devkit/scripts) (rejected): A single-repo clone couldn't run just pr
MIP-0070 9 Implemented alternative A finer ML split now (marola-llm, marola-nlp, marola-ml, raised in discussion #522) (rejected): Today dspy/ and finetune/ are two small offline tools with one consumer
MIP-0070 9 Implemented alternative A GitHub App instead of a PAT (rejected): It is scoped per repo and has no personal owner
MIP-0070 9 Implemented alternative Issues all stay in the umbrella (rejected): Existing links wouldn't move
MIP-0070 9 Implemented alternative Vendor devkit files into each repo with a sync bot (rejected): This is the copy-and-drift model FUTURE-WORK.md §7 already hit
MIP-0070 9 Implemented alternative The umbrella owns marola.dev and pulls in the site's dist/ (rejected): URLs would be unchanged
MIP-0070 11 Implemented decided Decided 2026-09-30: in #522, a fine-grained PAT; the names marola-app and marola-site, as proposed (marola-backend/marola-frontend were weighed and dropped by the team); issues per repo on the org Project.
MIP-0072 1 Partially implemented summary Requesting the empty, visible org team marola-dev/gemini as a reviewer on any marola pull request starts a Gemini review.
MIP-0072 9 Partially implemented alternative Gemini Code Assist on GitHub (this MIP's first draft) (rejected): needs a GCP project with billing since the consumer app's shutdown
MIP-0072 9 Partially implemented alternative An agent loop (run-gemini-cli) (rejected): spent the day's quota on a single PR
MIP-0074 1 Implemented summary docs.marola.dev becomes the umbrella's site.
MIP-0074 9 Implemented alternative Do nothing (rejected)
MIP-0074 9 Implemented alternative A separate umbrella landing page besides its README (rejected)
MIP-0074 9 Implemented alternative Pinning code links to the umbrella's gitlinks while the prose tracks main (rejected)
MIP-0074 9 Implemented alternative A nav plugin to order the sidebar (rejected)
MIP-0074 9 Implemented alternative Renaming docs/MIPs/ to docs/6-MIPs/ in the tree (rejected)
MIP-0074 9 Implemented alternative Redirects all in the 404 page (rejected)
MIP-0074 9 Implemented alternative API docs committed to the default branch through PRs (rejected)
MIP-0074 9 Implemented alternative API docs from release assets only (today) (rejected)
MIP-0074 9 Implemented alternative The devkit as a docs-only submodule (rejected)
MIP-0074 9 Implemented alternative Per-repo mkdocs.yml (rejected)
MIP-0075 1 Draft summary A private Cloudflare R2 bucket, br-open-ocean-data-storage, holds marola's open ocean data as one DuckLake: tables whose rows are Parquet files under lake/, and a catalog, catalog/oods.ducklake, that records every table, file and snapshot.
MIP-0075 9 Draft alternative Do nothing (marola-site#20's site-data:water/ stopgap) (rejected): keeps the last fetch
MIP-0075 9 Draft alternative Supabase Postgres (this MIP's first draft, 2026-10-02) (rejected): constraints and upserts for free
MIP-0075 9 Draft alternative Backblaze B2 (this MIP from 2026-10-05 to 2026-10-07) (rejected): S3-compatible and no card for the free tier
MIP-0075 9 Draft alternative Cloudflare D1 (marola#667) (rejected): an HTTP query API
MIP-0075 9 Draft alternative Plain Parquet with a manifest, Delta Lake, a Postgres catalog (rejected): §4.4
MIP-0075 9 Draft alternative Parquet in git (MIP-0056 §4.4) (rejected): free and reviewable
MIP-0076 1 Implemented summary Two tools, split by the kind of question.
MIP-0076 5.1 Implemented decided Decided 2026-10-03: the wiring lives as a generated block inside REPOS.md.
MIP-0076 5.5 Implemented decided Decided 2026-10-03: every code repo sends submodule-updated on each push to main, as MIP-0070 described.
MIP-0076 9 Implemented alternative Do nothing (rejected): MIP-0017's call, which was right for the monorepo
MIP-0076 9 Implemented alternative Only a hand-written REPOS.md (MIP-0074 as accepted) (rejected): it answers the wiring questions
MIP-0076 9 Implemented alternative Wiring injected into graphify's graph (prototyped in spike 2) (rejected): path is exact (0.2–0.35 KB) once you know the labels
MIP-0076 9 Implemented alternative graphify's LLM pass over YAML and docs (rejected): about 0.6–0.7M tokens per pass
MIP-0076 9 Implemented alternative graphify's MCP server (rejected): the same answers plus about 6.6 KB of schemas
MIP-0076 9 Implemented alternative Per-repo graphs merged with merge-graphs (rejected): no repo-to-repo edges
MIP-0076 9 Implemented alternative Committing graph output (rejected): 5.9 MB that churns on every change
MIP-0076 9 Implemented alternative A PyPI/uv pin instead of nixpkgs (rejected): a second pinning mechanism beside the devkit's flake
MIP-0076 9 Implemented alternative The wiring as a separate generated file instead of a block in REPOS.md (rejected): a second place for the same facts
MIP-0079 1 Accepted summary Each GitHub release of the umbrella, and later of marola-app, marola-ml and marola-corpus, is archived on Zenodo with its own DOI through Zenodo's GitHub integration.
MIP-0079 5.8 Accepted decided Decided 2026-10-14: a submodule pointer move never makes a release or a Zenodo version.
MIP-0079 9 Accepted alternative Do nothing (rejected): A GitHub URL breaks when a repo moves and doesn't pin a version
MIP-0079 9 Accepted alternative CITATION.cff alone (the first draft) (rejected): Zenodo would read it
MIP-0079 9 Accepted alternative Both files kept by hand (rejected): ww3-gpu does this
MIP-0079 9 Accepted alternative The devkit first (rejected): A tool, a tag and a pin bump before one record exists
MIP-0079 9 Accepted alternative Software Heritage alone (rejected): It archives code but gives no DOI
MIP-0080 1 Draft summary Every byte-identical copy of a third-party Claude Code skill gets a row in a per-repo skills.lock: the upstream repo, path and commit, a git blob sha per file, the licence, and an optional patch for a local edit.
MIP-0080 9 Draft alternative Do nothing (the drift report alone) (rejected): it found R5 and R6 and nothing moved
MIP-0080 9 Draft alternative A blocking "must be latest" CI check (rejected): every upstream push breaks every consumer's main at once
MIP-0080 9 Draft alternative Install upstreams as plugins from their marketplaces (rejected): cloud sessions do not install project-enabled external plugins
MIP-0080 9 Draft alternative marola-skills as an umbrella submodule holding the copies (rejected): Claude Code loads project skills only from the started repo's .claude/skills/ and its parents
MIP-0080 9 Draft alternative git subtree (rejected): it pins a commit
MIP-0080 9 Draft alternative npx skills or a similar installer (rejected): no documented ref pinning
MIP-0080 9 Draft alternative The devkit sync bot MIP-0070 §9 rejected (rejected): that was a bot overwriting devkit files in every repo
MIP-0081 1 Accepted summary marola-sea is published to Hugging Face with no standard benchmark score, because running a harness needs GPUs marola does not have.
MIP-0081 9 Accepted alternative Take one provider's scores as they come (rejected): Fastest, but the numbers would be unreproducible and the relationship exclusive in practice
MIP-0081 9 Accepted alternative Rent GPUs and run everything locally (rejected): Reproducible, but paid every run
MIP-0081 9 Accepted alternative The Hugging Face Open LLM Leaderboard (rejected): Retired in 2025
MIP-0083 1 Accepted summary marola-app gains an experiment sbt module, written in Kyo, that every 4 hours (adjustable) samples 10 m wind and 2 m temperature forecasts at a registry of sampling points.
MIP-0083 9 Accepted alternative Do nothing / #723 alone (rejected): stale at the next model upgrade
MIP-0083 9 Accepted alternative A new repo (marola-eval) in Scala, Rust or Haskell (rejected): proposed earlier on 2026-10-09 and withdrawn by the owner
MIP-0083 9 Accepted alternative GCS for MLflow, with WIF and Besom (rejected): a second cloud for the one bucket B2 already provides
MIP-0083 9 Accepted alternative An always-on MLflow (rejected): Phase 2 (MIP-0057)
MIP-0083 9 Accepted alternative GRIB from the originals (rejected): §4.1
MIP-0083 9 Accepted alternative kyo-flow for durability (rejected): §4.9
MIP-0083 9 Accepted alternative A stacked blend of the providers for marola's forecast (the first version of §5.11) (rejected): its errors are a weighted average of the providers'
MIP-0083 9 Accepted alternative A regional model of marola's own (WRF) (rejected): paid compute every cycle
MIP-0083 9 Accepted alternative A learned post-processor (gradient boosting, a neural net) on the providers' output (rejected): more parameters than 2.5 years of 6-hourly pairs support
MIP-0084 1 Implemented summary MIP-0076 built the routing sources, but a session reaches them only if the person installed the devkit plugin, entered nix develop, initialised submodules and rebuilt the graph.
MIP-0084 9 Implemented alternative Do nothing (rejected): the plugin and nix develop stay prerequisites
MIP-0084 9 Implemented alternative Build locally everywhere (a portable graph, rebuilt on query) (rejected): always matches the working tree
MIP-0084 9 Implemented alternative Commit the graph (rejected): MIP-0076 rejected it
MIP-0084 9 Implemented alternative The bundle as a release asset (rejected): mints Zenodo versions (§5.3)
MIP-0084 9 Implemented alternative An Actions artifact (rejected): expires, and downloading it needs a token
MIP-0084 9 Implemented alternative docs.marola.dev (rejected): outside the cloud sessions' default network
MIP-0084 9 Implemented alternative The opt-out marker elsewhere (rejected): the committed settings turn the plugin off for everyone who pulls
MIP-0084 9 Implemented alternative Asking later (after the first request, or only when a plugin feature is needed) or a notice instead of a question (rejected): the first misses the hooks on the first task and gets skimmed
MIP-0084 9 Implemented alternative graphify's MCP server for cloud sessions (rejected): plugins and their MCP servers do not load there
MIP-0084 11 Implemented decided Decided 2026-10-10: either answer is fine.
MIP-0084 11 Implemented decided Decided 2026-10-10: nice to have, not a blocker: the umbrella is the workspace most sessions start in.
MIP-0085 1 Implemented summary MIP-0084 gives every session a bundle and a route tool, holding only the code graph and the wiring.
MIP-0085 5.4 Implemented decided Decided 2026-10-20: no committed DOC-CODE.md, since committing it meant pointer-sync.sh building the code graph on every pointer move, a --check against a bundle graph already behind the pointers, and one more file merged unread (§8).
MIP-0085 5.7 Implemented decided Decided 2026-10-20: BM25 ships, inside the bundle; no embedding (the meaning spike).
MIP-0085 9 Implemented alternative Do nothing (rejected): route answers symbols and wiring
MIP-0085 9 Implemented alternative graphify's Markdown pass for doc↔code (rejected): tried
MIP-0085 9 Implemented alternative graphify's LLM pass (rejected): about 0.6–0.7M input tokens per run
MIP-0085 9 Implemented alternative Ollama embeddings (rejected): a daemon and a ~300 MB pull per machine
MIP-0085 9 Implemented alternative A full embedding model through ONNX Runtime (rejected): better vectors, but a large native dependency on every machine that queries
MIP-0085 9 Implemented alternative mkdocs' search index (already built for docs.marola.dev) (rejected): full-text over docs only
MIP-0085 9 Implemented alternative One combined graph (rejected): docs in the code graph was exactly what MIP-0076's revision undid
MIP-0085 11 Implemented decided Decided 2026-10-20: bundle only (§5.4), the maintainer's call in task 10, once committing it turned out to need a graph build in every pointer-sync run.
MIP-0085 Meaning spike (task 7), 2026-10-20 Implemented decided Decided 2026-10-20: BM25 ships as route query --meaning, and no embedding does.
MIP-0086 1 Implemented summary Every GitHub write the org's automation makes moves to one of two org-owned GitHub Apps.
MIP-0086 9 Implemented alternative One App per need (#765's seven plus #740's) (rejected): smallest reach per key
MIP-0086 9 Implemented alternative Three Apps, marola-bump kept apart (rejected): the Workflows key would sit in marola-devkit only
MIP-0086 9 Implemented alternative One App for everything (rejected): a key readable by every repo would merge into every repo
MIP-0086 9 Implemented alternative An hourly git ls-remote poll instead of notify-umbrella (rejected): no notify credential at all
MIP-0086 9 Implemented alternative Do nothing (rejected): PRs keep appearing as the maintainer's and the PATs lapse within a year
MIP-0087 1 Draft summary marola is worked on from two Claude Code surfaces: the CLI on a contributor's machine (in ai-jail, inside nix develop, one repo per session) and a Claude Project on claude.ai/code (a coordinator that starts one cloud thread per task, every marola repo cloned side by side).
MIP-0087 9 Draft alternative Do nothing (rejected): Threads keep assuming the CLI's setup
MIP-0087 9 Draft alternative Fold it into AGENT-SKILLS.md (rejected): That page is about skills
MIP-0087 9 Draft alternative Make Project threads start inside one repo so its settings and hooks load (rejected): Not a setting a Project exposes today (the container clones every configured repo under /home/user)
MIP-0087 9 Draft alternative Vendor superpowers into each repo's .claude/skills/ (rejected): Fifteen skills times six repos
MIP-0091 1 Accepted summary marola will quote one wind and wave forecast for each beach.
MIP-0091 9 Accepted alternative Do nothing, rank only as OWB does (rejected): marola must still select one number for each beach
MIP-0091 9 Accepted alternative The forecaster first, trained on simulations (rejected): A bandit tuned on synthetic rewards learns the simulator
MIP-0091 9 Accepted alternative A marola-eval repository (rejected): The owner withdrew it on 2026-10-09 (MIP-0083 §9)
MIP-0091 9 Accepted alternative A marola-forecaster code repository now (rejected): If the forecaster is in its own code repository now
MIP-0091 9 Accepted alternative The forecaster inside experiment (rejected): This alternative loses the direction of R1 that the build enforces
MIP-0091 9 Accepted alternative The bandit in Python (marola-ml) (rejected): If the bandit is in Python
MIP-0091 9 Accepted alternative A blend of the arms (rejected): A blend averages the errors of the arms and hides which arm is quoted (MIP-0083 §9, §5.11)
MIP-0091 9 Accepted alternative One bandit over every arm (rejected): This alternative discards the losses of fetched arms that marola observes in all cases (policy note §4.5.1)
MIP-0091 9 Accepted alternative Live epsilon-greedy (rejected): This alternative shows swimmers a forecast selected at random (R11)