Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: memcode-ai/memcode
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: main
Choose a base ref
...
head repository: memcode-ai/memcode
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: audit-fixes
Choose a head ref
Checking mergeability… Don’t worry, you can still create the pull request.
  • 7 commits
  • 29 files changed
  • 1 contributor

Commits on Sep 13, 2026

  1. deps: clear the two dependency advisories

    grpc v1.82.0 (GO-2026-6061) and x/text v0.38.0 (GO-2026-5970), both indirect,
    both with fixes available. These ship regardless of which Go toolchain builds
    the release, unlike the stdlib advisories govulncheck also reports, which the
    CI toolchain already covers.
    timothyerwin committed Sep 13, 2026
    Configuration menu
    Copy the full SHA
    f797ad2 View commit details
    Browse the repository at this point in the history
  2. vxui: the permission mode actually persists now

    config.Mode has always documented itself as "persisted when the user cycles
    it", and cmd/interactive.go has always READ it at startup. Nothing ever wrote
    it back, so Shift+Tab and /mode silently reset on every restart — a setting that
    quietly forgets, which is the hardest kind of bug to notice.
    
    Both entry points now route through one setMode that changes the session and
    saves the config together, with a guard test that fails if a third call site
    skips the save.
    timothyerwin committed Sep 13, 2026
    Configuration menu
    Copy the full SHA
    bf39a40 View commit details
    Browse the repository at this point in the history
  3. config: a pin that cannot be recorded says so

    ResolvePin promised the seed was "persisted to BOTH stores before returning, so
    this is the only run that ever consults default_model". Both writes discarded
    their errors, and the user-store writer dropped four without returning anything.
    
    Best-effort persistence is right and stays: failing to remember a preference
    must never fail the operation. But silence was wrong. If neither store is
    writable, every run re-seeds from default_model, and because that value
    legitimately changes as models are added and retired, a user's model can drift
    between releases while everything here believes the pin is stable.
    
    ResolvePinSeeded reports that case so the caller can say it once; ResolvePin
    keeps the old signature for callers that cannot act on it.
    timothyerwin committed Sep 13, 2026
    Configuration menu
    Copy the full SHA
    cb32b93 View commit details
    Browse the repository at this point in the history
  4. test: cover the webhook token verifier and the explore helpers

    webjwt is the single verifier for platform-signed inbound webhook tokens (Bot
    Framework, Google Chat) and had no tests at all. "Fails closed" is a claim
    worth proving on an authentication boundary, so this exercises each way a token
    can be wrong: expired, unexpiring, wrong issuer, wrong audience, unknown signing
    key, unknown kid, alg-none, HMAC against an RSA key set, unconfigured verifier,
    and an unreachable JWKS. It also pins the stated flood defense — 25 forged kids
    must not become 25 outbound fetches — and the Bot Framework metadata path.
    
    87% coverage on a package that had none.
    
    explore covers the concurrency-cap resolution (0 means default, not zero
    readers) and the finding indenter.
    timothyerwin committed Sep 13, 2026
    Configuration menu
    Copy the full SHA
    85c17db View commit details
    Browse the repository at this point in the history
  5. setsim: one Jaccard instead of three

    The same function was written three times, in two map shapes, across prefs
    clustering, mood's repetition detector, and lesson dedup — and had already begun
    to diverge: the lessons copy had dropped a guard the other two kept.
    (Unreachable, as it happens, but divergence is the point.)
    
    A metric that decides whether two things are "the same" should have one
    definition and one set of tests. Generic over the value type so callers keep
    whichever set spelling they already use.
    timothyerwin committed Sep 13, 2026
    Configuration menu
    Copy the full SHA
    b2b0d41 View commit details
    Browse the repository at this point in the history
  6. clean: remove ten unreachable functions

    Reachability analysis across the module, tests included, found ten functions
    nothing can call. All are in internal/ packages, so there are no external
    consumers to consider.
    
    The interesting group was three package-level wrappers in autonomy whose comment
    said "used by cmd" — cmd never used them. The methods they wrapped are live and
    stay. deadcode now reports nothing.
    timothyerwin committed Sep 13, 2026
    Configuration menu
    Copy the full SHA
    4519d61 View commit details
    Browse the repository at this point in the history
  7. docs: describe the system that exists

    v0.29.0 removed automatic model routing. The code recorded that carefully, with
    a tombstone comment at every site explaining what went and why. The documents
    around the code were never given the same treatment, so they kept advertising
    the deleted system in the present tense.
    
    README
    - "Out of the box it uses cheap models for routine work and strong models when
      the task is hard or risky" described the deleted ladder. It was also the only
      false claim a prospective user reads before installing anything. Replaced with
      what is true and arguably the better pitch: one model, chosen by you, that
      does not change underneath you, with delegated work able to ride its own pin.
    - /plan no longer "gets a second model's review before you approve it" on its
      own; that review is a one-shot the user triggers from the approval card.
    
    ROUTING.md — rewritten. Every symbol it documented as current (decideLane,
    ResolveModel, SteerResolvedModel) has zero references in non-test code, and it
    carried its own warning that finding those names means something is stale. It
    now describes the pin chain, the two narrow exceptions (utility plumbing and
    infrastructure failure), why capability gaps refuse rather than substitute, and
    which error classes may walk a fallback chain.
    
    COMPACTION.md — the budget is window-relative (85% of learned capacity), not the
    ~45K constant this claimed. Worth correcting beyond accuracy: an absolute
    default is precisely what the current design rejects, so the stale number
    misrepresented a deliberate position as a tunable. The summarizer is the
    catalog's utility_model, not a forced Anthropic call.
    
    Two file headers contradicted correct comments lower in the same file:
    llm/lanes.go said Automatic selection prefers keyed vendors, and llm/resolve.go
    described steering as live policy while resolveHosted below it explained the
    deletion.
    timothyerwin committed Sep 13, 2026
    Configuration menu
    Copy the full SHA
    9891bee View commit details
    Browse the repository at this point in the history
Loading