Skip to content

Add Augur wordmark with light/dark theme variants#5

Merged
willgitdata merged 1 commit into
mainfrom
feat/wordmark
May 8, 2026
Merged

Add Augur wordmark with light/dark theme variants#5
willgitdata merged 1 commit into
mainfrom
feat/wordmark

Conversation

@willgitdata
Copy link
Copy Markdown
Owner

Summary

  • Adds two pixel-art wordmark SVGs under assets/:
    • wordmark-light.svg — purple #5B2C8A for white/GitHub light backgrounds
    • wordmark-dark.svg — lighter #A878E0 for GitHub dark mode
  • Replaces the bare `# Augur` H1 with a <picture> element using `prefers-color-scheme`. GitHub auto-swaps the variant when users are in dark mode.

The wizard pixel art (left half) is identical in both — only the AUGUR letters and tagline color differ. The H1 semantics are preserved by wrapping the picture in <h1 align="center"> with proper alt text for screen readers and SEO.

Preview

Light Dark
assets/wordmark-light.svg assets/wordmark-dark.svg

Test plan

  • SVGs render at intended dimensions (220×48 viewBox, displayed 500px wide)
  • Verify in GitHub UI: switch GitHub light/dark theme and confirm the README header swaps
  • Verify on mobile (the `` element is supported in all major browsers and GitHub's renderer)

🤖 Generated with Claude Code

Two SVG wordmarks under assets/ — same wizard pixel art with the
"AUGUR" letters tinted for each theme:

  assets/wordmark-light.svg  — #5B2C8A purple, tagline #7A4AB5
  assets/wordmark-dark.svg   — #A878E0 lighter purple (readable on
                               GitHub's dark background)

Replaces the bare `# Augur` H1 with a <picture> element using
prefers-color-scheme media query, so GitHub auto-swaps the variant
for users in dark mode. The H1 semantics are preserved — the picture
is wrapped in <h1 align="center"> with the alt text "Augur — Seer of
Signals" for screen readers and SEO.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@willgitdata willgitdata merged commit ef4088b into main May 8, 2026
1 check passed
willgitdata added a commit that referenced this pull request May 8, 2026
Swaps the assets/wordmark-{light,dark}.svg from PR #5 for the canonical wordmarks at repo root:

  - augur-wordmark-light.svg
  - augur-wordmark-dark.svg

Dark variant is meaningfully better — wizard pixel art itself is brightened (purples shift #5B2C8A → #7A4AB5 / #6B3AA0 → #9359C9 / #7A4AB5 → #A878E0, browns to #A0522D / #C97A4F), not just the AUGUR text. Reads cleanly under GitHub dark mode now.

README header swapped to the minimal snippet:

  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="augur-wordmark-dark.svg">
    <img src="augur-wordmark-light.svg" alt="Augur">
  </picture>

The empty assets/ directory is gone.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
willgitdata added a commit that referenced this pull request May 8, 2026
Trim the README from 251 → 121 lines (-130). Single bundled-eval table, single BEIR comparison table, both showing the auto path's numbers. Working quickstart code example (the old one used new Augur() without an embedder, broken since PR #5).

Cuts: per-config NDCG progression table, BGE-large swap walkthrough, smarter-fusion deep-dive, MMR section, FiQA latency footnote — all moved/linked to EXAMPLES.md or ARCHITECTURE.md where they belong as detailed walkthroughs.

Self-reviewed via /code-review — APPROVE. Numbers cross-checked against eval baselines (0.920 bundled, 0.707 / 0.338 / 0.324 BEIR). Quickstart compiles. One suggestion applied inline: 'with default routing' → explicit 'recommended local stack' so the table doesn't imply the bundled NDCG comes from literal new Augur() defaults.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
willgitdata added a commit that referenced this pull request May 8, 2026
Caught from the prior commit's accidental git add -A. These were
working-draft logo iterations the user kept locally; the canonical
wordmarks are augur-wordmark-light.svg / augur-wordmark-dark.svg
(already tracked since PR #5).
willgitdata added a commit that referenced this pull request May 8, 2026
…ranker

Implements 10 fixes from a critical code review on the publish-ready
SDK. Each item is independently shippable; this lands them as one
coordinated bump because several feed each other (the eval smoke test
exercises the new fusion module; the explicit-reranker breaking change
needs MIGRATING.md to land at the same time).

  #1  Smoke eval harness — 16-doc / 12-query synthetic fixture with
      a regression floor (NDCG@10 > 0.65 on the stub stack). Runs in
      <50 ms as part of `pnpm test`. The full BEIR + 504-query eval
      stays where it already lives — git history — for "did this
      tweak win?" measurement.
  #2  Extract pure helpers to `fusion.ts` (composeFilter,
      pickVectorWeight, weightedRrfFuse, adaptWeightByConfidence,
      topGapNormalized, clamp) + 31 unit tests. Each empirical
      threshold is now annotated with what it was tuned against.
  #3  autoLanguageFilter integration tests — OFF default, ON for
      non-English, user-filter override wins, soft-fallback when the
      filtered pool empties.
  #4  Basic-search example wires the recommended stack: LocalEmbedder
      + LocalReranker + MetadataChunker(SentenceChunker) +
      InMemoryAdapter({ useStemming: true }). Matches the README's
      headline configuration so users copying from "hello world"
      land on the auto path that produces NDCG@10 = 0.920.
  #5  PineconeAdapter mocked-fetch tests (13 tests). Pins the wire
      format (URL, method, auth header, body shape, response decode)
      so refactors can't silently regress one of the three production
      adapters. Previously had zero coverage.
  #6  Ad-hoc scratch adapter cache — bounded LRU keyed by a
      deterministic fingerprint of (id, content). Repeat searches
      over the same `req.documents` skip re-chunking + re-embedding.
      Tunable via `adHocCacheSize` (default 8; set 0 to disable).
  #7  **BREAKING** Drop `HeuristicReranker` as silent default. The
      previous default did almost nothing while emitting a
      "yes I rerank" line in the trace. Default is now `null`;
      pass `new LocalReranker()` (or any provider's reranker)
      explicitly to keep cross-encoder voting on. Documented in
      MIGRATING.md.
  #8  MIGRATING.md — covers every BREAKING change in 0.2 with
      smallest-diff examples; non-breaking adoptions documented
      separately.
  #9  SemanticChunker tests (8 tests) — boundary detection, maxSize
      cap, async-only API, metadata propagation. Was the only
      chunker without coverage.
  #10 Magic-number provenance documented in `router.ts` and
      `fusion.ts`. Every threshold (≤2 / ≤6 word counts, 0.6
      ambiguity floor, 800 ms latency floor, k=60 RRF, ±0.20
      shift, 0.10–0.90 weight clamp, 0.3/0.4/0.5/0.7 priors) now
      records what it's tuned against and what's load-bearing
      vs negotiable.

Test count: 100 → 163. Build green; full eval still ships against
the published packages, not against the smoke fixture.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
willgitdata added a commit that referenced this pull request May 8, 2026
Round 1 left two critical lying-trace bugs and a handful of
architectural papercuts. This commit clears the table.

  #1 (critical) Router no longer lies about reranking when no
     reranker is configured. `Router.decide` gained an optional
     `hasReranker` parameter; `HeuristicRouter` plumbs it through to
     `shouldRerank` and forces `reranked: false` when absent. The
     trace now records "reranking skipped (no reranker configured)"
     instead of pretending the cross-encoder fired. Augur passes
     `this.reranker !== null`. Default is `true` so existing
     third-party Router implementations keep working.

  #2 (critical) `SearchTrace` declares the four fields that augur.ts
     attaches at runtime: `adHoc`, `adHocCacheHit`, `autoLanguageFilter`,
     `autoLanguageFilterDropped`. `Tracer.finish` opts widened to
     `Omit<SearchTrace, "id"|"query"|"startedAt"|"totalMs"|"spans">`
     so adding a SearchTrace field propagates automatically. Tests
     drop their `as unknown as` casts.

  #3 (high) PgVectorAdapter mocked-fetch tests (14 tests). Pin SQL
     shape, INSERT batching at 200/round-trip, parameter renumbering
     across filter clauses, identifier-validation guard against
     `; DROP TABLE`, **and a filter-key SQL-injection regression
     test** — the JSON-path quote-doubling defense gets explicit
     coverage.

  #4 (high) Adapter trace-string format change reverted. `trace.adapter`
     is always the bare adapter name; ad-hoc / cache-hit signals
     surface as the new structured boolean fields from #2. No more
     "in-memory (ad-hoc, cached)" string parsing.

  #5 (high) `fingerprintDocs` extracted to `fingerprint.ts` with 10
     direct unit tests covering reorder, byte-change, prefix-equal
     corpora, id|content boundary, doc-record boundary, empty list,
     unicode, and the output format contract.

  #6 (medium) Async chunkers no longer pretend to be `Chunker`s.
     Introduced an explicit `AsyncChunker` interface;
     `SemanticChunker`, `Doc2QueryChunker`, `ContextualChunker`
     implement it (no longer Chunker). The runtime traps in their
     throwing `chunk()` methods are gone — the type system catches
     misuse at compile time. APIs that accept either flavor
     (`AugurOptions.chunker`, all chunker `base` fields,
     `chunkDocument`) now use `Chunker | AsyncChunker`.
     `MetadataChunker` keeps its dual sync+async path with a runtime
     guard for the user-opted-in case where its base is async.

  #7 (medium) `StubEmbedder` consolidated into
     `packages/core/src/test-fixtures.ts`. Excluded from the
     published package via tsconfig. Three duplicated copies dropped.

  #8 (low) `eval-smoke.test.ts` header explicitly distinguishes the
     synthetic-fixture smoke test (structural) from the BEIR /
     504-query eval that produced the README's NDCG@10 = 0.920
     numbers (preserved at git `feffc73^`, runs in ~30 min).

  #9 (low) `BaseAdapter` JSDoc rewritten as the canonical
     "starting point for custom adapters" comment, including the
     RRF / capability / `searchHybrid` override guidance.
     `AsyncChunker` added to public exports.

  #10 (low) `examples/basic-search/index.ts` header documents the
      `npm i @huggingface/transformers` requirement for users
      copying the file out of the repo.

Test count: 163 → 191 (+28). Build green; published-package
contents verified clean (`find dist -name "test-fixtures*"` →
empty, `find dist -name "*.test.*"` → empty).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
willgitdata added a commit that referenced this pull request May 11, 2026
Two SVG wordmarks under assets/ — same wizard pixel art with the
"AUGUR" letters tinted for each theme:

  assets/wordmark-light.svg  — #5B2C8A purple, tagline #7A4AB5
  assets/wordmark-dark.svg   — #A878E0 lighter purple (readable on
                               GitHub's dark background)

Replaces the bare `# Augur` H1 with a <picture> element using
prefers-color-scheme media query, so GitHub auto-swaps the variant
for users in dark mode. The H1 semantics are preserved — the picture
is wrapped in <h1 align="center"> with the alt text "Augur — Seer of
Signals" for screen readers and SEO.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
willgitdata added a commit that referenced this pull request May 11, 2026
Swaps the assets/wordmark-{light,dark}.svg from PR #5 for the canonical wordmarks at repo root:

  - augur-wordmark-light.svg
  - augur-wordmark-dark.svg

Dark variant is meaningfully better — wizard pixel art itself is brightened (purples shift #5B2C8A → #7A4AB5 / #6B3AA0 → #9359C9 / #7A4AB5 → #A878E0, browns to #A0522D / #C97A4F), not just the AUGUR text. Reads cleanly under GitHub dark mode now.

README header swapped to the minimal snippet:

  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="augur-wordmark-dark.svg">
    <img src="augur-wordmark-light.svg" alt="Augur">
  </picture>

The empty assets/ directory is gone.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
willgitdata added a commit that referenced this pull request May 11, 2026
Trim the README from 251 → 121 lines (-130). Single bundled-eval table, single BEIR comparison table, both showing the auto path's numbers. Working quickstart code example (the old one used new Augur() without an embedder, broken since PR #5).

Cuts: per-config NDCG progression table, BGE-large swap walkthrough, smarter-fusion deep-dive, MMR section, FiQA latency footnote — all moved/linked to EXAMPLES.md or ARCHITECTURE.md where they belong as detailed walkthroughs.

Self-reviewed via /code-review — APPROVE. Numbers cross-checked against eval baselines (0.920 bundled, 0.707 / 0.338 / 0.324 BEIR). Quickstart compiles. One suggestion applied inline: 'with default routing' → explicit 'recommended local stack' so the table doesn't imply the bundled NDCG comes from literal new Augur() defaults.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
willgitdata added a commit that referenced this pull request May 11, 2026
…ranker

Implements 10 fixes from a critical code review on the publish-ready
SDK. Each item is independently shippable; this lands them as one
coordinated bump because several feed each other (the eval smoke test
exercises the new fusion module; the explicit-reranker breaking change
needs MIGRATING.md to land at the same time).

  #1  Smoke eval harness — 16-doc / 12-query synthetic fixture with
      a regression floor (NDCG@10 > 0.65 on the stub stack). Runs in
      <50 ms as part of `pnpm test`. The full BEIR + 504-query eval
      stays where it already lives — git history — for "did this
      tweak win?" measurement.
  #2  Extract pure helpers to `fusion.ts` (composeFilter,
      pickVectorWeight, weightedRrfFuse, adaptWeightByConfidence,
      topGapNormalized, clamp) + 31 unit tests. Each empirical
      threshold is now annotated with what it was tuned against.
  #3  autoLanguageFilter integration tests — OFF default, ON for
      non-English, user-filter override wins, soft-fallback when the
      filtered pool empties.
  #4  Basic-search example wires the recommended stack: LocalEmbedder
      + LocalReranker + MetadataChunker(SentenceChunker) +
      InMemoryAdapter({ useStemming: true }). Matches the README's
      headline configuration so users copying from "hello world"
      land on the auto path that produces NDCG@10 = 0.920.
  #5  PineconeAdapter mocked-fetch tests (13 tests). Pins the wire
      format (URL, method, auth header, body shape, response decode)
      so refactors can't silently regress one of the three production
      adapters. Previously had zero coverage.
  #6  Ad-hoc scratch adapter cache — bounded LRU keyed by a
      deterministic fingerprint of (id, content). Repeat searches
      over the same `req.documents` skip re-chunking + re-embedding.
      Tunable via `adHocCacheSize` (default 8; set 0 to disable).
  #7  **BREAKING** Drop `HeuristicReranker` as silent default. The
      previous default did almost nothing while emitting a
      "yes I rerank" line in the trace. Default is now `null`;
      pass `new LocalReranker()` (or any provider's reranker)
      explicitly to keep cross-encoder voting on. Documented in
      MIGRATING.md.
  #8  MIGRATING.md — covers every BREAKING change in 0.2 with
      smallest-diff examples; non-breaking adoptions documented
      separately.
  #9  SemanticChunker tests (8 tests) — boundary detection, maxSize
      cap, async-only API, metadata propagation. Was the only
      chunker without coverage.
  #10 Magic-number provenance documented in `router.ts` and
      `fusion.ts`. Every threshold (≤2 / ≤6 word counts, 0.6
      ambiguity floor, 800 ms latency floor, k=60 RRF, ±0.20
      shift, 0.10–0.90 weight clamp, 0.3/0.4/0.5/0.7 priors) now
      records what it's tuned against and what's load-bearing
      vs negotiable.

Test count: 100 → 163. Build green; full eval still ships against
the published packages, not against the smoke fixture.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
willgitdata added a commit that referenced this pull request May 11, 2026
Round 1 left two critical lying-trace bugs and a handful of
architectural papercuts. This commit clears the table.

  #1 (critical) Router no longer lies about reranking when no
     reranker is configured. `Router.decide` gained an optional
     `hasReranker` parameter; `HeuristicRouter` plumbs it through to
     `shouldRerank` and forces `reranked: false` when absent. The
     trace now records "reranking skipped (no reranker configured)"
     instead of pretending the cross-encoder fired. Augur passes
     `this.reranker !== null`. Default is `true` so existing
     third-party Router implementations keep working.

  #2 (critical) `SearchTrace` declares the four fields that augur.ts
     attaches at runtime: `adHoc`, `adHocCacheHit`, `autoLanguageFilter`,
     `autoLanguageFilterDropped`. `Tracer.finish` opts widened to
     `Omit<SearchTrace, "id"|"query"|"startedAt"|"totalMs"|"spans">`
     so adding a SearchTrace field propagates automatically. Tests
     drop their `as unknown as` casts.

  #3 (high) PgVectorAdapter mocked-fetch tests (14 tests). Pin SQL
     shape, INSERT batching at 200/round-trip, parameter renumbering
     across filter clauses, identifier-validation guard against
     `; DROP TABLE`, **and a filter-key SQL-injection regression
     test** — the JSON-path quote-doubling defense gets explicit
     coverage.

  #4 (high) Adapter trace-string format change reverted. `trace.adapter`
     is always the bare adapter name; ad-hoc / cache-hit signals
     surface as the new structured boolean fields from #2. No more
     "in-memory (ad-hoc, cached)" string parsing.

  #5 (high) `fingerprintDocs` extracted to `fingerprint.ts` with 10
     direct unit tests covering reorder, byte-change, prefix-equal
     corpora, id|content boundary, doc-record boundary, empty list,
     unicode, and the output format contract.

  #6 (medium) Async chunkers no longer pretend to be `Chunker`s.
     Introduced an explicit `AsyncChunker` interface;
     `SemanticChunker`, `Doc2QueryChunker`, `ContextualChunker`
     implement it (no longer Chunker). The runtime traps in their
     throwing `chunk()` methods are gone — the type system catches
     misuse at compile time. APIs that accept either flavor
     (`AugurOptions.chunker`, all chunker `base` fields,
     `chunkDocument`) now use `Chunker | AsyncChunker`.
     `MetadataChunker` keeps its dual sync+async path with a runtime
     guard for the user-opted-in case where its base is async.

  #7 (medium) `StubEmbedder` consolidated into
     `packages/core/src/test-fixtures.ts`. Excluded from the
     published package via tsconfig. Three duplicated copies dropped.

  #8 (low) `eval-smoke.test.ts` header explicitly distinguishes the
     synthetic-fixture smoke test (structural) from the BEIR /
     504-query eval that produced the README's NDCG@10 = 0.920
     numbers (preserved at git `4d52844^`, runs in ~30 min).

  #9 (low) `BaseAdapter` JSDoc rewritten as the canonical
     "starting point for custom adapters" comment, including the
     RRF / capability / `searchHybrid` override guidance.
     `AsyncChunker` added to public exports.

  #10 (low) `examples/basic-search/index.ts` header documents the
      `npm i @huggingface/transformers` requirement for users
      copying the file out of the repo.

Test count: 163 → 191 (+28). Build green; published-package
contents verified clean (`find dist -name "test-fixtures*"` →
empty, `find dist -name "*.test.*"` → empty).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@willgitdata willgitdata deleted the feat/wordmark branch May 11, 2026 19:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant