The GitHub Actions job "Required Checks" on texera.git/main has failed.
Run started by GitHub user github-merge-queue[bot] (triggered by 
github-merge-queue[bot]).

Head commit for run:
b3ff4b7eda2b200f0c8a3c1f5b0a6884d7bd4855 / Tanishq Gandhi 
<[email protected]>
feat(frontend): add the Models page (#8068)

### What changes were proposed in this PR?

Adds the **Models** page: list, search, create, rename, delete.

To get there without adding a third `type === "..."` arm everywhere,
each resource kind now supplies a **descriptor** — icon, routes,
ownership, rename, description, filter sources — aggregated by
`ResourceRegistryService`. `card-item`, `list-item` and `filters` read
that instead of branching on the entry type. Workflow, dataset, project
and file behave exactly as before; models are just one more descriptor.

The page lists from `/model/list` and filters client-side, so models
stay out of global search until the hub backend lands. That endpoint is
now scoped to what the caller was granted: `ResourceAccess.listVisible`
takes an `includePublic` flag, defaulted so `/dataset/list` — whose
picker legitimately offers public datasets to read as workflow input —
is unchanged. Your Work → Models therefore shows your own and shared
models only, exactly like Your Work → Datasets.

The sidebar and cards use Material Symbols `hub` (Apache-2.0, attributed
in `LICENSE`), registered once through `NzIconService`. ng-zorro has no
icon that reads as an ML model, and the denser Material glyphs are
illegible at the sidebar's 15px.

<img width="629" height="444" alt="Admin settings"
src="https://github.com/user-attachments/assets/f3bdcfa3-452a-4291-8763-3de684e1abfc";
/>

<img width="1289" height="614" alt="Create model"
src="https://github.com/user-attachments/assets/7148eecf-0295-4321-9aa5-2d2c90bf9967";
/>

<img width="1849" height="659" alt="Models page"
src="https://github.com/user-attachments/assets/128d993e-a6d1-4606-b732-b75356c6fa6c";
/>

### Any related issues, documentation, discussions?

Groundwork for #6499; does not close it.

`models_enabled` ships **false** until the detail page lands.
`/user/model/:mid` has no component yet, so the model descriptor
deliberately carries no `privateRoute` — a model card does not navigate,
rather than hitting the `**` wildcard and landing on Workflows — and
creating a model refreshes the list instead. The flag is toggleable live
in Admin → Settings, and hides the sidebar entry, not the route, same as
`datasets_enabled`.

### How was this PR tested?

56 new tests across the registry, `ModelService`, the Models page and
the create modal.

```bash
cd frontend && npx ng test \
  --include 
src/app/dashboard/service/user/resource-registry/resource-registry.service.spec.ts
 \
  --include src/app/dashboard/service/user/model/model.service.spec.ts \
  --include 
src/app/dashboard/component/user/user-model/user-model.component.spec.ts \
  --include 
src/app/dashboard/component/user/user-model/user-model-creator/user-model-creator.component.spec.ts

sbt 'testOnly *ModelResourceSpec'
```

Regression: 417 frontend tests across 15 spec files covering card/list
items, filters, search and the sidebar, and 23 in `ModelResourceSpec`.
Plus `tsc --noEmit`, eslint, prettier and `scalafmtCheck`.

Four spec edits. Three are fixture or tab-count updates. The fourth is a
behavior change stated on purpose: `"listModels should include public
models owned by another user"` is inverted to `omit`, since that
assertion described the bug above; it now also checks the model is still
reachable through `getPublicModel`, so public discovery stays covered.

Manual: Admin → Settings → Models on, create a model, search it by
framework, switch card/list views, rename inline, delete.

### Was this PR authored or co-authored using generative AI tooling?

Generated-by: Claude Code Opus 5

Report URL: https://github.com/apache/texera/actions/runs/33211812558

With regards,
GitHub Actions via GitBox

Reply via email to