Skip to content

Release 2026.3.1 - #752

Merged
bencap merged 41 commits into
mainfrom
release-2026.3.1
Oct 22, 2026
Merged

bencap merged 41 commits into
mainfrom
release-2026.3.1

Conversation

@bencap

@bencap bencap commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

Features

Bug Fixes

Documentation

Maintenance

Deployment

  • Deploy with Release 2026.3.2 mavedb-api#946; the settings page needs its access key changes.
  • Merge with a merge commit, not a squash, so the formatting commit in .git-blame-ignore-revs keeps its hash.
  • After merge: rebase release-2026.4.0 onto main.

bencap and others added 30 commits October 16, 2026 13:49
Claude Code doesn't load .github/instructions, and parts had drifted from
the code (it still says there's no test suite). AGENTS.md and
.claude/rules replace them later on this branch.
Vue compiles a handler as a function body only when it contains a
semicolon, and Prettier (semi: false) removes it, which breaks the
build. A comma expression survives formatting.
Mechanical: prettier --write . with the existing .prettierrc.json. No
behavior change; the unit tests and the production build pass.
- Chart accessors are now typed as get/set overloads, so chained setters
  type-check and the line chart and histogram chains no longer error.
- Add @types/jquery for the histogram's one jquery call.
- Keep auth.ts's vue-router import as a side-effect import; removing it
  drops the global component properties from about 100 components.
- Remove scoreSetHasCalibrationWithEvidenceStrengths, which had no
  callers and read the renamed functionalRanges field.
- Smaller fixes: null props passed as undefined so their defaults apply,
  the calibration suggestions prop takes external publications, a
  missing histogram score is NaN, SimpleDnaVariation no longer redeclares
  an inherited field with a wider type, and a typed mock parameter in a
  test.
58 lines in lib/heatmap.ts and ScoreSetHeatmap.vue, mostly d3 selection
generics and possibly-null SVG handles. Each marker fails the type check
once its line is fixed, so they come out one at a time.
Attribute order and prefer-const, from eslint src --fix.
eslint --suppress-all wrote eslint-suppressions.json with the 117
findings left after the autofixes (89 are no-explicit-any). New
violations fail; after fixing old ones, run
npx eslint src --prune-suppressions to shrink the file.
bin/check runs vue-tsc, ESLint and the Prettier check in about 12 s and
reports every failure in one pass. bin/t wraps vitest. CI gains a check
job; until now it ran only the unit tests.
AGENTS.md (CLAUDE.md imports it) holds setup, commands and the rules
that apply in every session. .claude/rules/ holds components, styling,
data and routing guidance, loaded only for matching paths. Both replace
the removed Copilot files, cut to what the code doesn't show, with two
corrections: there is a test suite, and the second beforeEach in main.js
redirects variant URNs, not legacy hash URLs. The README gains a checks
section.
Prettier (semi: false) can turn a two-statement inline handler into a
template that vue-tsc, ESLint and Prettier accept and only the Vue
build rejects, as with the handlers fixed earlier on this branch.
Deny --no-verify and reads of ~/.aws and ~/.pgpass. Ask before pushes,
AWS and Elastic Beanstalk commands, the prod-API dev server and
dependency changes. The same file lives in the workspace and in each
repo, because Claude Code reads settings only from the folder a session
starts in. These are guardrails, not a security boundary: a rewritten
command can get past them.
Serves on 127.0.0.1:8090 (or PORT) without the self-signed certificate,
which embedded browser panes reject, and skips the MkDocs build so it
starts without Python. ORCID sign-in does not work on that port.
Sessions get AWS_PROFILE=mavedb-agent-readonly, so aws commands use the
read-only role (see deployment/environments/aws/agent-access.md) and fail
rather than fall back to full credentials where the profile is missing.
Choosing another profile asks first, replacing the blanket prompt on
aws. Reading ~/.ssh is now blocked, alongside ~/.aws and ~/.pgpass.
Edits to AGENTS.md, CLAUDE.md and anything under .claude/ now ask first.
Those files shape every later session, and settings.json holds the
guardrails. The rules cover Edit and Write; a shell redirect into one of
these files is not caught.
Prompts now cover force pushes, pushes to main, mavedb-main, mavedb-dev
or release-*, AWS with an explicit profile, eb, adding a dependency and
edits to settings.json itself. Ordinary feature-branch pushes,
dependency updates and edits to AGENTS.md, CLAUDE.md and .claude/rules
no longer ask; the never rule in the workspace AGENTS.md still covers
those edits, and PR review sees the diffs.
The ui checks it with Prettier, so every copy uses that layout.
The lockfile listed only the darwin-arm64 builds of lightningcss and
@tailwindcss/oxide, a known npm bug when a lock is updated over an
existing node_modules. npm ci on Linux then installs neither, and
vite build fails with "Cannot find module
../lightningcss.linux-x64-gnu.node". Re-resolving those two packages
adds the missing platform entries at the same versions (1.30.2 and
4.1.16); nothing else in the lockfile changes.
Agent harness: AGENTS.md, bin/check, and a type, lint and format gate
Opening or pushing to a PR moves its linked issues to In review, and merging
it into a release branch moves them to Pending release. A release PR into the
default branch gets a Closes line for every issue its branch picked up, so
GitHub closes them when the release merges. Issues only ever move forward.

Adds a pull request template whose Closes line feeds the automation.
GitHub turns a Closes line into an issue link only on PRs into the default
branch. On a PR into a release branch it stays a plain mention, so the
workflow missed issues named that way. The script now reads closing lines
from PR descriptions as well as the sidebar links.
…s-automation

ci: move linked issues across the backlog board from PR events
Construct libraries use sequence-based targets even when the construct
matches a reference exactly; accession-based targets are for variants
edited into the genome at their native locus. Explain why on the targets
page, align Key Concepts and the FAQ, and reword the score set form's
target-type question and the edit-target help text to ask how the
variant library was built.

Closes #737
The base branch now runs bin/check, whose Prettier check flagged the
reworded help text and toggle.
Make mapping/forward-mapping.md the canonical mapping page and redirect
the old reference/variant-mapping URL to it (adds mkdocs-redirects).
Fix the broken search examples and pagination description in the API
quickstart, invalid and contradictory HGVS examples, the publish
instruction, contributor permissions, and overstated mapping and
reverse-translation claims.

Use one term for each concept (supersede; assay-level/reference-level
with the preMapped/postMapped field names), keep a single copy of the
required-fields checklist and other repeated explanations, and describe
the real experiment and score set form steps in the upload guide. Cut
filler, date hard-coded statistics, and extend the glossary.

Closes #738
… order

Replace "mapped variants" and the assay-level/reference-level wording with
submitted variants (as uploaded, on the target) and reference variants
(on the human reference), matching the rest of the app. Rename the
histogram note's "reference variants" to control variants so the term
isn't overloaded.

Document how the variant page orders measurements within each group and
that research-use-only calls never affect the ranking.
Replace Before You Start and the Upload Guide with Submitting a Dataset:
a single "what to have ready" table, then each step of the experiment and
score set forms. Move the rules for splitting a study into records out of
Key Concepts into a new Organizing Your Study page, leaving Key Concepts
as definitions, and fix its stale contributor permissions line. The
Submitting Data overview takes the prerequisites and workflow.

Redirect the old page URLs to the walkthrough, point the home page's
submission link and the score set form's experiment help at the new
pages, and fix "supercede" in that help text.

Closes #742
bencap and others added 8 commits October 20, 2026 11:46
Diagrams without their own styles now default to the brand sage through
Material's Mermaid variables. The data model, data standards, and
submission diagrams use the app's sage, orange, info, and help colors
instead of off-palette blues, greens, and purples; the publish step is
orange to match the Publish button.
Experiment sets don't affect how data is read, so describe them as a
container grouped however best organizes the data, such as by publication
or by target, instead of requiring one set per target.
Split the controls section into adding and reading controls. Explain the
Pathogenic and Benign control rows on calibration tables, their
agreement colors, and the concordance summary, and state that controls
are public once their calibration is published. Add the MONDO disease or
disorder to the calibration metadata, and note in the submission
walkthrough that controls are added by editing the calibration after
scores are processed.

Closes #747
…n-controls-docs

docs(calibrations): document calibration controls and the disease field
Reflects the api change that stores API keys as hashes: access key
listings carry id and keyHint instead of keyId, keyId appears only on
a newly created key, and keys are deleted by numeric id. Also picks up
description-only changes to the VRS lookup from api release-2026.3.2.
The API now stores keys as hashes and returns the full key only in the
response that creates it. The settings page keeps that key for the
session and shows it with a copy button and a note to save it. Listed
keys show only their last four characters, with no reveal or copy, and
are deleted by numeric id.

The accounts docs say the key is shown once, and no longer claim that
generating a key invalidates the previous one: the page only offers to
generate a key when none exists, so replacing one means deleting it
first.
Show a new key from the create response, so it appears even if the key
list is slow to reload, and only against the key it belongs to. Clear it
when that key is deleted. Wrap the key rather than truncate it, and say
so when copying fails. The docs now describe the settings page's limit,
which the API doesn't enforce.
…eys-as-hashes

feat: show a new API key once, at creation
@coveralls

coveralls commented Oct 21, 2026 •

Copy link
Copy Markdown

Coverage Status

coverage: 23.891% (+0.2%) from 23.731% — release-2026.3.1 into main

bencap and others added 2 commits October 21, 2026 14:30
MaveMD search results linked to the score set without naming the
variant, so the score set page opened with nothing selected and the
user had to find the variant again. Pass it as the `variant` query
parameter, which the score set page already reads to select a variant.
…rom-mavemd

fix(search): focus the measured variant when opening its score set
@bencap bencap added the core: release A release PR label Oct 21, 2026
@bencap bencap added this to the R2026.4 milestone Oct 21, 2026
@bencap bencap self-assigned this Oct 21, 2026
@bencap
bencap merged commit 64c6da4 into main Oct 22, 2026
4 checks passed
@bencap
bencap deleted the release-2026.3.1 branch October 22, 2026 06:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment