SPB Git

spb/metrika

Public

Stata-class statistics, GPU-accelerated by Apple Silicon. Native Swift — no Electron, no Python runtime, no compromises.

History of Metrika/Sources/SessionModel.swift Clear filter
page 1
  1. Wed, Aug 5, 2026 5

    1. feat: v1.0 features — sample datasets, docs site, Metal 2M-point renderer
      …
      - sysuse command with bundled samples (sales: 200-firm x 5-year panel;
        mtcars) shipped as ZQEngine resources, generated by
        scripts/make_samples.R
      - metrika-cli docs: static documentation site rendered from the shared
        command registry (docs/index.html, 38 commands, light/dark); CLI
        restructured with a default 'run' subcommand
      - Metal point-sprite renderer (CLAUDE.md §7 pane 4): packed 12-byte
        vertices, unified-memory buffer written once, scroll-pan /
        pinch-zoom / double-click-reset touching only a 24-byte uniform;
        takes over scatter plots past 100k points (METRIKA_METAL_THRESHOLD
        override for tests); verified rendering 2,000,000 points in-app
      - METRIKA_AUTORUN debug hook for headless app driving
      - MARKETING_VERSION 1.0.0
      - 116 kit tests + 4 UI tests green
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 1 file +8
    2. feat(plugins): harden the user-command protocol
      …
      - fix: script-command verbs were routed AFTER parsing, which rejects
        unknown verbs — .zyq commands could never run; they now route before
        the parser with raw macro arguments
      - .zyq scripts: ado-style 'args name…' declaration with backtick macro
        substitution (`0', `k', `name'); scratch-variable scripts verified
        end-to-end against the built-in path
      - ZQPluginRegistry: verb-keyed native plugin registry; verbs shadowing
        built-ins rejected at session start; parsed commands validated against
        the declared ZQSyntaxSpec (varlist/if/in/weights/options)
      - mutation gating: plugins return a replacement dataset via
        ZQResult.replacementFrame, installed only under 'mutates: true' — a
        non-mutating plugin returning one is an error and the dataset is
        untouched (ZQContext is now a plain value, no writable back-channel)
      - ZScorePlugin ships as the reference native plugin, registered by the
        app ('zscore varname' -> standardized z_varname)
      - CLAUDE.md: document the mlx-swift build quirks (xcodebuild for GPU
        tests, -skipPackagePluginValidation everywhere)
      - 87 tests green (swift test and xcodebuild with GPU suites); app builds
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 1 file +4 −1
    3. feat(ui): data browser and do-file editor panes
      …
      - DataBrowserPane (§7 pane 3): NSTableView bridge (natively virtualized),
        sortable columns with missing-last ordering, observation-number gutter,
        filter bar compiled to an if-expression through the real parser
        (ZQCommandParser.parseExpression + ZQSession.conditionMask are the new
        public entry points)
      - DoFileEditorPane (§7 pane 2): NSTextView bridge with ZQL highlighting
        (verbs resolved via ZQVerbTable, comments, strings), run selection or
        file with Cmd-R through the shared session path, open/save .zyq
      - ContentView: segmented Console / Data / Do-file switcher in the toolbar
      - UI smoke extended: pane switching, filter narrowing (2 of 5 obs),
        do-file run surfacing in the console and sidebar
      - 61 kit tests + 2 UI tests green
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 1 file +39
    4. test(ui): add XCUITest console smoke per CLAUDE.md §9
      …
      - MetrikaUITests target (xcodegen scheme test action)
      - launch-environment hook (DEBUG only): sandboxed app materializes the
        test CSV in its own container, since the runner cannot stage files
        across the sandbox boundary reliably
      - queries predicate on AX 'value' (SwiftUI Text exposes value, not label)
      - smoke: launch, auto-load dataset, type gen + reg robust, assert
        regression table and sidebar variable
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 1 file +11
    5. feat: bootstrap Metrika v0.1 skeleton with working ZQL vertical slice
      …
      - MetrikaKit SPM package: ZQParser, ZQPlanner, ZQEngine, ZQData, ZQStats,
        ZQGPU, ZQGraphics, ZQPlugins (Swift 6, strict concurrency)
      - ZQL parser: lexer, Pratt expressions, factor variables, prefix commands,
        column-cited errors with Levenshtein verb suggestions
      - ZQData: DuckDB-backed load/save (parquet, csv, json, arrow)
      - ZQStats: OLS via LAPACK QR, HC0-HC3 and cluster-robust SE, summarize,
        t/F distributions accurate in the far tails
      - ZQGPU: Philox4x32-10 reference RNG, counter-addressable bootstrap
      - ZQEngine: session actor with use/save/gen/replace/drop/keep/summarize/
        regress/count/list/graph/bootstrap/set seed/xtset/log
      - SwiftUI app (xcodegen): console with history, variables sidebar,
        Swift Charts plots; sandboxed + hardened runtime entitlements
      - Tests: 44 green (parser golden, R fixtures at 1e-10, Philox KAT,
        end-to-end engine); Tests/Fixtures/generate.R; Tests/Bench harness
      - scripts: check_headers.sh + pre-commit hook, make_icns.sh, release.sh
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 1 file +84
Menu

Theme