Skip to content

chore: quick wins from OSS audit (#203, #204, #211, #212)#214

Merged
JonnyTran merged 8 commits into
developfrom
chore/quick-wins-203-204-211-212
Jun 9, 2026
Merged

chore: quick wins from OSS audit (#203, #204, #211, #212)#214
JonnyTran merged 8 commits into
developfrom
chore/quick-wins-203-204-211-212

Conversation

@JonnyTran

Copy link
Copy Markdown
Member

Summary

Bundles four low-risk quick wins from the OSS audit (filed in #203#213). Targets the items the handover called out as "low risk, high signal."

  • [ci] Fix uv cache path in extralit-server Dockerfile #203 — Dockerfile uv cache path. Moves the build-time uv cache mount in extralit-server/docker/server/Dockerfile from /root/.cache/uv to /home/extralit/.cache/uv and sets UV_CACHE_DIR explicitly so the path is consistent with the runtime user.
  • [docs] Onboarding documentation cleanup pass #204 — Onboarding docs. Fixes the broken ```base fence in README.md, fills in the SDK README.md "Create an extraction schema" / "Add documents and start extraction" TBDs with a runnable Settings + Dataset snippet, points root AGENTS.md at the existing per-component CLAUDE.md files (since per-component AGENTS.md files don't exist), adds examples/README.md, and adds a "Choose a dev environment" section to CONTRIBUTING.md. The Python version claim in AGENTS.md already matches pyproject.toml (>=3.10 server / >=3.9.2 SDK), so no change there.
  • [frontend] Finish Argilla → Extralit rebrand sweep #211 — Argilla → Extralit frontend rebrand. Renames BackendEnvironment.argilla.extralit in v1/infrastructure/types/environment.ts, Environment.ts, and EnvironmentRepository.ts to match the server schema, which already returns extralit: (the previous code was silently falling back to defaults). Renames the argillaDatasets i18n key across all four locales + DatasetList.vue. Swaps docs.argilla.iodocs.extralit.ai in ja.js. Replaces the 84 Copyright 2021-present, the Recognai S.L. team headers across the frontend with the Copyright 2024-present, Extralit Labs, Inc. convention used in extralit-server. NOTICE already preserves Argilla attribution.
  • [repo] Untrack editor and cache directories #212 — Untrack editor/cache dirs. Already satisfied; .cursor/, .vscode/, .ruff_cache/ are not tracked and are in .gitignore. No change.

Intentionally retained Argilla references

  • how-to-configure-argilla-on-huggingface/ doc paths in nuxt.config.ts and translations — verified the renamed how-to-configure-extralit-on-huggingface/ paths 404 on docs.extralit.ai, so renaming would break links.
  • argilla-dev localStorage key in extension/popup.js and useFeatureToggle.ts — would break installed dev extensions.
  • argilla.imglab-cdn.net in useShareViewModel.ts — external CDN with no Extralit equivalent.
  • E2E mock fixtures (argilla.span_marker_conll, argilla-other, recognai workspace) — historical test data; cosmetic.
  • CHANGELOG.md [Argilla] version entries — historical.

Test plan

  • cd extralit-frontend && npm run lint && npm run test — lint passed in pre-commit hook; unit tests not run locally.
  • cd extralit-frontend && npm run build — Nuxt build still succeeds with the rebranded type/key.
  • Smoke test: load the dataset list page and confirm extralitDatasets i18n key resolves and the BackendEnvironment.extralit settings (HF persistent storage warning, share-progress flag) light up correctly. Previously these were always falling back to defaults due to the type mismatch.
  • docker build extralit-server/ — succeeds with the new uv cache path.

🤖 Generated with Claude Code

- #203: Move uv build cache mount in extralit-server Dockerfile to a
  user-owned path and set UV_CACHE_DIR explicitly.
- #204: Onboarding docs cleanup — fix `bash` fence in README, fill in
  TBD sections of SDK README with a runnable Settings/Dataset example,
  point root AGENTS.md at the existing per-component CLAUDE.md files,
  add `examples/README.md`, and add a "Choose a dev environment"
  section to CONTRIBUTING.md.
- #211: Argilla → Extralit rebrand sweep on the frontend. Renames
  the BackendEnvironment.argilla key to .extralit (matches the server
  schema, which was already returning extralit:), updates the
  argillaDatasets i18n key, swaps docs.argilla.io → docs.extralit.ai
  in ja.js, and replaces 84 Recognai S.L. copyright headers with
  the Extralit Labs convention used in extralit-server. Working
  /how-to-configure-argilla-on-huggingface/ doc URLs and the
  argilla-dev localStorage key are intentionally retained — the
  former because the renamed paths 404 on docs.extralit.ai today,
  the latter to avoid breaking installed dev extensions.
- #212: Already satisfied — .cursor/, .vscode/, .ruff_cache/ are
  not tracked and are listed in .gitignore. No change required.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@JonnyTran
JonnyTran requested review from a team as code owners May 10, 2026 00:44
@strix-security

strix-security Bot commented Jun 9, 2026

Copy link
Copy Markdown

Strix is installed on this repository, but we could not run this PR security review because this workspace does not have an active plan. If you'd like to continue receiving code reviews, you can add a payment method or manage billing here.

JonnyTran and others added 6 commits June 9, 2026 00:15
- Deleted AGENTS.md and replaced it with a new CLAUDE.md file containing the same content.
- Updated the project setup documentation to improve clarity and organization.
- Ensured that component-specific setup instructions are now centralized in CLAUDE.md.
useImportFileUploadViewModel.spec.ts was committed empty in #200, which
fails Jest ("Your test suite must contain at least one test") and broke
the frontend CI test step on develop. Add an it.todo placeholder so the
suite is green until real tests are written.

Also prune HANDOVER.md to reflect PR #214 verification (lint/tests/build
green for the PR's changes; #203/#204/#211/#212 confirmed).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
All checks pass on 6c7c48a; build (3.9) flake was a transient registry
timeout, green on re-run. PR ready to merge.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Modified .gitignore to exclude all VSCode settings except for settings.json and extensions.json.
- Updated CLAUDE.md to run `uv sync` in development mode.
- Adjusted CI workflows to use `uv sync --dev` for installing dependencies.
- Added VSCode configuration files for Python development.
- Updated pyproject.toml files to include the new 'ty' dependency and set Python version requirements.

These changes enhance the development setup and ensure consistency across environments.
- Removed the installation command for `uv` from the Quick Setup section.
- Added commands for Python formatting and type checking using `ruff` and `ty`.
- Introduced a new section on Git worktrees with guidelines for branch naming conventions.

These changes enhance the clarity of the setup instructions and improve the development workflow.
- Modified the extralit.yml workflow to exclude the docs directory and mkdocs.yml from triggering builds on push and pull request events.
- Reintroduced a scheduled job in scorecard.yml to run weekly, ensuring regular updates for the Maintained check.

These changes streamline the CI process by preventing unnecessary builds for documentation changes while maintaining regular checks.
@JonnyTran
JonnyTran merged commit 9e50151 into develop Jun 9, 2026
7 of 8 checks passed
@JonnyTran
JonnyTran deleted the chore/quick-wins-203-204-211-212 branch June 9, 2026 18:07
JonnyTran added a commit that referenced this pull request Jul 20, 2026
The HANDOVER.md file has been deleted as it contained outdated information regarding PR #214 and its verification results. This cleanup helps maintain the repository's documentation relevance.
JonnyTran added a commit that referenced this pull request Jul 20, 2026
* fix(v2-ui): inject the resolved store into schema/review use cases, not the hook

GetSchemasUseCase and GetReferenceReviewUseCase were typed as `typeof useXxx`
and called `this.storage()`, but ts-injecty resolves a hook dependency by
*calling* it and injecting the returned store object (same contract as v1's
GetWorkspacesUseCase). At runtime `this.storage()` threw
"this.schemasStorage is not a function", which the empty catch swallowed and
surfaced as "Could not load schemas." on a 200 response.

Use the injected value as an object (drop the `()`) and type it as
ReturnType<typeof useXxx>. The unit tests passed the raw hook function —
bypassing the DI contract — so they missed this; update them to pass the
resolved store (useXxx()) as DI does.

Verified live: the seeded e2e_v2_slice schema now renders in the table.
Surfaced by the first end-to-end run of the v2 frontend e2e.

* feat(v2-ui): add workspace-hydration and breadcrumb composables for v2 pages

* feat(v2-ui): add V2Empty and V2StatusBadge presentational components

* feat(v2-ui): integrate schemas list into app shell; hydrate workspaces on direct load

* feat(v2-ui): shell + design-system controls on schema detail; status badges in records table

* feat(v2-ui): integrate schema settings into app shell with breadcrumbs

* feat(v2-ui): integrate reference review into app shell; BaseButton actions

* fix(v2-ui): correct BaseButton `to` prop type; avoid reference/breadcrumb strict-mode collision

- BaseButton `to` prop was declared `type: String | Object` (bitwise-OR evaluates to 0),
  a malformed prop type that threw 'Right-hand side of instanceof is not an object' during
  Vue dev-mode prop validation whenever a :to value was passed. This broke the schema-detail
  page render (stuck spinner, no records) and was latent in DatasetCard/UserSettingsHeader/
  QuestionsForm. Fixed to [String, Object].
- Reference-review breadcrumb rendered the bare reference, colliding with the page <h1>
  'Review — {reference}' so getByText(reference) matched two nodes (e2e strict-mode
  violation). Leaf is now the static 'Review' label; the <h1> still carries the reference.

Unblocks e2e/v2 auth-smoke + slashed-reference (both green).

* fix(v2): accept non-urllib3 S3 streaming bodies in FileObjectResponse

v2 record bulk-upsert reads the pandera schema body from S3 via
FileObjectResponse.response, which was annotated urllib3.HTTPResponse
(from the old minio client, PR #149). aiobotocore returns the body as a
StreamingChecksumBody, so pydantic's is_instance_of check rejected it and
every v2 upsert 422'd. Relax the annotation to Any (consumers only stream
the body via .read(); the existing validator still guards None) and add a
regression test.

Surfaced by the first end-to-end run of the v2 frontend e2e seed.

* polish(v2-ui): drop dead #c00 fallback on --color-danger token (ReviewRecordCard)

* fix(v2): drop unsupported prefilter kwarg in async LanceDB FTS+filter search

Combining an FTS query with a scalar filter called
AsyncFTSQuery.where(clause, prefilter=True), but async LanceDB (0.34) where()
takes only the predicate — the sync-only prefilter= kwarg raised TypeError, so
every text+filter search 500'd. Scalar filters over an FTS match set apply as a
postfilter, correct for the materialize-then-page model. Add a regression test
covering FTS+filter narrowing and the non-matching-token empty case.

Surfaced by the v2 search-roundtrip e2e (status filter + query).

* fix(v2-ui): use native search input on schema detail; BaseSearchBar drops fill()

BaseInput debounces its update:modelValue emit (lazyEventEmitter, 100ms) while
re-rendering a controlled :value, so the DOM value resets to the stale model on
each keystroke — losing characters under fast typing and dropping Playwright
fill() entirely (the emitted value arrives as ''). A tokenized native input with
v-model + @keyup.enter is immediate and lossless, and matches the search-roundtrip
spec's fill + press('Enter') contract. Styled with design tokens for visual parity.

* chore: remove outdated HANDOVER.md file

The HANDOVER.md file has been deleted as it contained outdated information regarding PR #214 and its verification results. This cleanup helps maintain the repository's documentation relevance.

* chore: docs
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