Skip to content

feat!: take Hub entity types from @privateaim/core-kit and move Hub fields to camelCase - #401

Open
tada5hi wants to merge 2 commits into
developfrom
feat/hub-camelcase-core-kit-types
Open

feat!: take Hub entity types from @privateaim/core-kit and move Hub fields to camelCase#401
tada5hi wants to merge 2 commits into
developfrom
feat/hub-camelcase-core-kit-types

Conversation

@tada5hi

@tada5hi tada5hi commented Jul 30, 2026

Copy link
Copy Markdown

FLAME Hub 0.13.0 renamed every entity/HTTP-API field from snake_case to camelCase (PrivateAIM/hub#1806). node-ui's copies of the Hub entities came from app/services/Api.ts — generated by swagger-typescript-api from a checked-in snapshot of the hub-adapter's OpenAPI document — so they went stale without a single error.

This PR does two things: takes the Hub entities from the Hub's own packages, and moves every Hub field reference to camelCase.

Why the Hub's packages rather than the generated copies

The hub-adapter does not re-model Hub entities — it forwards them. hub_adapter/routers/hub.py declares response_model=list[Project] where Project is flame_hub.models.Project, so the adapter's wire shape is flame-hub-client's model. The Hub is therefore the source of truth for these types, and @privateaim/core-kit is versioned in lockstep with the API that produces them, whereas the checked-in swagger.json is a snapshot that drifts whenever the adapter lags a release.

  • Hub entities and their enums are imported directly from @privateaim/core-kit, and the shared ProcessStatus from @privateaim/kit, at each of the 26 sites that needs one — no re-export layer.
  • app/types/analysis.ts and app/types/node.ts are deleted. Their ProcessStatus and ApprovalStatus were hand-copies of the Hub's — analysis.ts was even annotated "As defined by the Hub". Enum members move to SCREAMING_CASE.
  • ApprovalStatus resolves per call site. The Hub declares the same two members twice (AnalysisNodeApprovalStatus / ProjectNodeApprovalStatus) as nominally distinct enums. The analyses table and analysis controls take the analysis one, the project proposals table the project one, and ApproveRejectToggle — which serves both — takes the shared value union, exported as ApprovalStatusValue from the severity helper. That helper is typed on the template-literal form of both enums, which is what lets one function serve two nominal types that happen to share their members.
  • Everything the node genuinely owns stays generated — kong, pod-orchestrator, event log, container logs, node settings, health, auth — and keeps its snake_case fields.

@privateaim/core-kit ships zod + validup as runtime deps, but node-ui imports only types and a few enums: verified fully tree-shakengrep -rl "ZodError\|validup" .output/public/_nuxt/*.js is empty after pnpm build.

Hub vs node-local, in the mixed files

Several field names exist on both sides. Each was decided by the type of the object, and by reading the adapter's source where the wire contract was ambiguous:

Site Decision Why
useDataStoreList.ts entry.display_namedisplayName, but DATA_ROW_UNIX_COLS stays snake buildProjectNameMap walks a Hub Project; the same file's formatDataRow array is applied to kong DetailedService/Route rows
DetailedDataStoreTable.vue untouched kong all the way down — type members, filter keys, field props
AnalysisControlButtons.vue analysis_id / project_id stay that FormData posts to the adapter's own /analysis/initialize, whose InitializeAnalysis model is snake_case
ApproveRejectToggle.vue form key approval_status stays, response guard "approvalStatus" in … moves hub.py:160,218 declare approval_status as a FastAPI Form(...) parameter — renaming it would 422 every approval. The response it reads back is a Hub entity.
DataStoreProjectInitializer.vue proj.project?.displayName / proj.projectId move; the project_id: body key stays the reads are a Hub ProjectNode; the key belongs to a kong request body
test/mockapi/handlers.ts only /analysis-nodes/{id} moves the /po, /analysis/initialize, /logs, /history and /kong/* handlers are node-local
server/routes/flame/api/auth/[...].ts untouched profile.display_name is the OIDC userinfo claim

The parts with no compiler coverage

Api.ts is @ts-nocheck, and the rest of the rename lives in strings. These moved too:

  • rapiq query stringssort: "-updated_at""-updatedAt" (×5), fields: "id,name,display_name""id,name,displayName". include values are relation names (project, node, analysis) and are single words, so unchanged.
  • PrimeVue column propsfield / sortField / filterField / globalFilterFields across AnalysesTable.vue and ProjectProposalTable.vue.
  • filter-state keys — must match the field props exactly or the dropdown renders and filters nothing.
  • the composite "group::status" values the hub-status filter splits at runtime and uses to index HubStatuses — those move as one unit with the interface keys.

This matters because rapiq drops an unknown sort / filter / include key silently rather than rejecting it: a missed rename returns a wrongly-ordered or unfiltered result set, with nothing in the logs. Same for a stale field prop — the column just renders blank.

The guard

An eslint no-restricted-imports rule now errors on importing a Hub entity name from **/services/Api, pointing at @privateaim/core-kit instead, so the generated copies cannot creep back in. pnpm build-api still regenerates them; they are simply unusable.

A guard that never runs is decoration, and CI ran only build + test:ci. So this also adds a lint script and a CI step — which required fixing six pre-existing lint errors in otherwise unrelated files (one unused import in DarkModeToggle.vue, one unused loop parameter, four as any casts). Happy to drop that part if you'd rather keep the CI change separate.

Verification

Gate Result
pnpm build passes
pnpm lint clean (was 6 errors before this PR)
npx vitest run 211 passed / 0 failed
tsc --noEmit 10 errors, the same 10 as before this PR

About those four test fixes

develop is red at 3f2801d, independently of this PR — data-store-name.test.ts ×2 and DataStoreProjectInitializer.spec.ts ×2 fail there too. Verified by checking out 3f2801d clean and running the suite: 4 failed / 207 passed, the same four. 3f2801d ("fix(kong)!: harden data store name generation") appended a four-character hex suffix to generateRandomDataStoreName without updating the four patterns it is matched against. CI never caught it because the workflow only triggers on pull_request, so it has never run against develop itself. This PR updates the patterns; happy to split that into its own PR if you'd rather.

On test-suite blind spots

Two migration bugs were caught by the suite rather than by a compiler, and both are worth knowing about:

  • ApproveRejectToggle.spec.ts used ApprovalStatus.Approved, which became undefined under SCREAMING_CASE.
  • status-tag-severity.test.ts imported the deleted ~/types/analysis, so the whole file failed to collect.

Neither was visible to eslint (it does not resolve module paths) or to tsc (test/** is outside the tsconfig program). The second is the nastier shape: a file that fails to collect reports no individual test results, so it does not move the failure count and is invisible to any comparison based on it — only the total collected count moves (207 → 211). Wiring up vue-tsc would close this, though it will first surface the 10 pre-existing errors above.

Merge order

This assumes PrivateAIM/node-hub-api-adapter picks up the updated client. It pins flame-hub-client==0.4.1 today, and its FastAPI response_models are those models, so bumping it is what turns its wire shape camelCase — no model changes needed on the adapter's side, only the core_client.*(…) keyword arguments it passes (project_node_id=projectNodeId=, approval_status=approvalStatus=, …).

Ship order:

  1. PrivateAIM/hub-python-client#129 — camelCase + record envelope
  2. PrivateAIM/node-hub-api-adapter — bump flame-hub-client, fix its call-site kwargs
  3. this PR

Against an adapter still on 0.4.1 every Hub field here reads as undefined, so this should not go out ahead of step 2.

Not included

@privateaim/core-http-kit's Client is deliberately not adopted. The adapter strips the Hub's { data, meta } envelope — GET /projects answers with a bare array — so the client's EntityCollectionResponse / EntityRecordResponse contract does not describe what node-ui receives. @privateaim/client-vue is likewise out: node-ui is PrimeVue 4 + Tailwind 4 and client-vue is @vuecs with its own theme and an @authup/client-web-kit install prerequisite, so adopting it would mean two component libraries and two theme systems in one app.

Summary by CodeRabbit

  • Enhancements

    • Updated analysis, project, approval, and execution status handling to use consistent camelCase fields.
    • Improved compatibility with current Hub data and status values across tables, filters, controls, logs, and project selectors.
    • Refreshed the dark-mode toggle presentation.
  • Developer Experience

    • Added linting commands and integrated lint checks into CI.
    • Updated documentation for Hub API types and data sources.
  • Bug Fixes

    • Corrected sorting, filtering, pagination, status indicators, progress displays, and project name resolution.

…ields to camelCase

The Hub renamed its entity/HTTP-API vocabulary from snake_case to camelCase in
0.13.0 (PrivateAIM/hub#1806). node-ui's copies of the Hub entities came from
app/services/Api.ts, generated by swagger-typescript-api from a checked-in
snapshot of the hub-adapter's OpenAPI document, so they silently went stale.

Hub entities now come from the Hub's own published packages instead. The
hub-adapter forwards Hub entities through unchanged — its FastAPI response_models
ARE flame-hub-client's models — so the Hub, not a snapshot of the adapter's
OpenAPI document, is the source of truth for their shape, and @privateaim/core-kit
is versioned in lockstep with the API that produces them.

- New app/services/hub.ts re-exports the eleven Hub entities plus the status
  enums from @privateaim/core-kit and @privateaim/kit.
- app/types/analysis.ts is deleted: its ProcessStatus was a hand-copy of the
  Hub's, annotated "As defined by the Hub". app/types/node.ts keeps ApprovalStatus
  as a documented alias, because the Hub declares the same two members twice
  (ProjectNodeApprovalStatus / AnalysisNodeApprovalStatus) while the UI approves
  both kinds of node through one control. Members move to SCREAMING_CASE.
- Everything the node genuinely owns — kong, pod-orchestrator, event log,
  container logs, node settings, health, auth — still comes from Api.ts, and
  keeps its snake_case fields.

Only the Hub half of every mixed file moves. useDataStoreList keeps
DATA_ROW_UNIX_COLS snake_case because it formats kong rows while its
buildProjectNameMap reads a Hub Project; DetailedDataStoreTable is kong all the
way down and is untouched; AnalysisControlButtons keeps analysis_id/project_id
because that FormData goes to the adapter's own /analysis/initialize; and
ApproveRejectToggle keeps its approval_status form key — that is the adapter's
FastAPI Form(...) parameter, not a Hub key — while the response it reads back is
a Hub entity and so becomes approvalStatus.

The rename also covers everything with no compiler coverage: rapiq query strings
(sort=-updatedAt, fields=id,name,displayName), PrimeVue column field/sortField/
filterField props, filter-state keys, and the composite "group::status" values
the hub-status filter splits at runtime. rapiq drops an unknown sort or filter
key silently rather than erroring, so a missed rename returns a wrongly-ordered
or unfiltered result set with nothing in the logs.

An eslint no-restricted-imports rule now fails on importing a Hub entity name
from ~/services/Api, so the generated copies cannot creep back in. To make that
guard actually enforce, a lint script is added and wired into CI, which required
fixing six pre-existing lint errors (one unused import, one unused loop
parameter, four `as any` casts) in otherwise unrelated files.

BREAKING CHANGE: requires FLAME Hub 0.13.0 and a hub-adapter built against
flame-hub-client with camelCase models. Against an older adapter every Hub field
reads as undefined.
Copilot AI review requested due to automatic review settings July 30, 2026 15:29

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The PR adopts shared Hub types and camelCase fields across API interfaces, analysis and project UI flows, utilities, fixtures, and tests. It adds @privateaim/core-kit and @privateaim/kit, introduces lint scripts and CI execution, and updates related documentation and workspace configuration.

Changes

Hub API contract migration

Layer / File(s) Summary
Shared Hub contracts and imports
README.md, app/services/modifiedApiInterfaces.ts, app/utils/status-tag-severity.ts, app/composables/useAPIFetch.ts, eslint.config.js, package.json, pnpm-workspace.yaml
Hub entities and status enums now use shared packages, API interfaces and sorting parameters use camelCase fields, and restricted imports direct Hub types to @privateaim/core-kit.
Analysis status and table flow
app/components/analysis/*, app/components/analysis/logs/*, app/utils/count-analyses.ts, test/components/analysis/*, test/utils/count-analyses.test.ts, test/mockapi/handlers.ts
Analysis parsing, filtering, progress display, controls, polling, counters, mocks, and fixtures use camelCase execution and Hub status fields with shared enum values.
Project and proposal data flows
app/components/projects/*, app/components/data-stores/*, app/composables/useDataStoreList.ts, test/components/projects/*, test/components/data-stores/*, test/composables/useDataStoreList.test.ts
Project names, proposal approval state, datastore selection, timestamps, and related test data use camelCase Hub entities and approval enums.
Lint and supporting validation
.github/workflows/ci.yaml, app/components/header/DarkModeToggle.vue, test/components/events/EventViewer.spec.ts, test/utils/*
CI runs the new lint script, the dark-mode control imports Button, and supporting tests align with updated field names and stricter typing.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

Suggested reviewers: brucetony

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: switching Hub entity types to @privateaim/core-kit and renaming Hub fields to camelCase.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/hub-camelcase-core-kit-types

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
app/components/analysis/AnalysesTable.vue (1)

217-281: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Normalize Hub ProcessStatus to PodStatus before comparing execution statuses.

executionStatus can come from Hub/ProcessStatus or be overwritten by PodProgressResponse.status (PodStatus), and the code compares it to PodStatus.Failed/PodStatus.Executed. In Hub 0.13.0, ProcessStatus uses PascalCase values like EXECUTING/EXECUTED while PodStatus uses lowercase values like executing/executed, so these in checks would reject valid Hub statuses and leave execution status filtered out with no progress bars. Move the conversion at the boundary where executionStatus is assigned, or compare against the Hub enum when that source is active.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/components/analysis/AnalysesTable.vue` around lines 217 - 281, Normalize
the Hub-sourced executionStatus to the corresponding PodStatus value when
assigning it in parseAnalysis, before the acceptableHubStatuses comparison; keep
PodProgressResponse.status unchanged because it is already PodStatus. Ensure
PascalCase ProcessStatus values such as EXECUTING and EXECUTED are converted to
the lowercase PodStatus equivalents so valid statuses are not cleared.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@app/services/modifiedApiInterfaces.ts`:
- Around line 46-61: Update ModifiedAnalysisNode so pod-orchestrator PodStatus
and Hub ProcessStatus remain separate rather than overloading executionStatus.
Add or reuse a distinct field for the Hub execution status, and ensure any
fallback or downstream assignment explicitly normalizes the Hub value before
using it as a PodStatus; keep lifecycle counting based on the correct status
domain.

In `@eslint.config.js`:
- Around line 31-45: Add "MasterImageGroup" to the importNames list in the Api
restriction rule, alongside the existing Hub entity names, so imports from
"~/services/Api" are also prohibited.

---

Outside diff comments:
In `@app/components/analysis/AnalysesTable.vue`:
- Around line 217-281: Normalize the Hub-sourced executionStatus to the
corresponding PodStatus value when assigning it in parseAnalysis, before the
acceptableHubStatuses comparison; keep PodProgressResponse.status unchanged
because it is already PodStatus. Ensure PascalCase ProcessStatus values such as
EXECUTING and EXECUTED are converted to the lowercase PodStatus equivalents so
valid statuses are not cleared.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7f8a793c-0a8a-410b-be8c-0b7db41280d8

📥 Commits

Reviewing files that changed from the base of the PR and between 3f2801d and 1522224.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (38)
  • .github/workflows/ci.yaml
  • README.md
  • app/components/analysis/AnalysesTable.vue
  • app/components/analysis/AnalysisControlButtons.vue
  • app/components/analysis/ContainerCounter.vue
  • app/components/analysis/logs/ContainerLogs.vue
  • app/components/data-stores/create/DataStoreProjectInitializer.vue
  • app/components/header/DarkModeToggle.vue
  • app/components/projects/ProjectProposalTable.vue
  • app/components/table/ApproveRejectToggle.vue
  • app/composables/useAPIFetch.ts
  • app/composables/useDataStoreList.ts
  • app/services/hub.ts
  • app/services/modifiedApiInterfaces.ts
  • app/stores/hubStore.ts
  • app/types/analysis.ts
  • app/types/node.ts
  • app/utils/count-analyses.ts
  • app/utils/format-data-row.ts
  • app/utils/status-tag-severity.ts
  • eslint.config.js
  • package.json
  • pnpm-workspace.yaml
  • test/components/analysis/AnalysisControlButtons.spec.ts
  • test/components/analysis/AnalysisTable.spec.ts
  • test/components/analysis/ContainerCounter.spec.ts
  • test/components/analysis/constants.ts
  • test/components/data-stores/DataStoreList.spec.ts
  • test/components/data-stores/constants.ts
  • test/components/data-stores/create/DataStoreProjectInitializer.spec.ts
  • test/components/events/EventViewer.spec.ts
  • test/components/projects/ProjectProposalTable.spec.ts
  • test/components/projects/constants.ts
  • test/components/table/ApproveRejectToggle.spec.ts
  • test/composables/useDataStoreList.test.ts
  • test/mockapi/handlers.ts
  • test/utils/count-analyses.test.ts
  • test/utils/format-data-row.test.ts
💤 Files with no reviewable changes (2)
  • app/types/analysis.ts
  • app/components/header/DarkModeToggle.vue

Comment on lines 46 to +61
export interface ModifiedAnalysisNode extends Omit<
AnalysisNode,
"execution_status"
"executionStatus"
> {
project_name: string | undefined | null;
analysis_name: string | undefined | null;
projectName: string | undefined | null;
analysisName: string | undefined | null;
expand: {
[key: string]: string;
};
datastore: boolean;
execution_status: PodStatus | undefined | null;
// Deliberately the pod-orchestrator's status rather than the Hub's: the table
// shows what the local containers are doing and falls back to the Hub's
// `executionStatus` only when the pod-orchestrator has nothing to report.
executionStatus: PodStatus | undefined | null;
progress: number;
hub_statuses: HubStatuses;
hubStatuses: HubStatuses;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

Do not overload executionStatus with two status domains.

This interface removes the Hub’s executionStatus and replaces it with PodStatus, while the comment says the same field falls back to the Hub status. Since ProcessStatus and PodStatus are explicitly non-interchangeable, preserve separate fields or normalize the Hub value before assigning the local status; otherwise downstream counting can use the wrong lifecycle domain.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/services/modifiedApiInterfaces.ts` around lines 46 - 61, Update
ModifiedAnalysisNode so pod-orchestrator PodStatus and Hub ProcessStatus remain
separate rather than overloading executionStatus. Add or reuse a distinct field
for the Hub execution status, and ensure any fallback or downstream assignment
explicitly normalizes the Hub value before using it as a PodStatus; keep
lifecycle counting based on the correct status domain.

Comment thread eslint.config.js
Comment on lines +31 to +45
group: ["**/services/Api"],
importNames: [
"Analysis",
"AnalysisBucket",
"AnalysisBucketType",
"AnalysisNode",
"DetailedAnalysis",
"MasterImage",
"MasterImageCommandArgument",
"Node",
"Project",
"ProjectNode",
"Registry",
"RegistryProject",
],

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add MasterImageGroup to the restricted import list.

app/services/hub.ts re-exports MasterImageGroup, but this rule does not forbid importing it from ~/services/Api. Add it to importNames so the lint guard covers every Hub entity exposed by the new source module.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@eslint.config.js` around lines 31 - 45, Add "MasterImageGroup" to the
importNames list in the Api restriction rule, alongside the existing Hub entity
names, so imports from "~/services/Api" are also prohibited.

Drop the `app/services/hub.ts` re-export facade and the `app/types/node.ts`
alias, so every file names the package it depends on. `DetailedAnalysis` was
only ever a facade-local alias for core-kit's `Analysis` and goes with it.

`ApprovalStatus` resolves per call site rather than through one alias: the
analyses table and the analysis controls take `AnalysisNodeApprovalStatus`, the
project proposals table takes `ProjectNodeApprovalStatus`, and
`ApproveRejectToggle` — which serves both — takes the shared value union now
exported as `ApprovalStatusValue` from the severity helper. That helper accepts
the template-literal form of both enums, which is what lets one function serve
two nominally distinct enums that happen to share their members.

Also fixes a stale import the earlier commit left behind:
test/utils/status-tag-severity.test.ts still pointed at the deleted
`~/types/analysis`, so the whole file failed to collect. Nothing caught it —
eslint does not resolve module paths and `test/**` is outside the tsconfig
program — and because a file that fails to collect reports no individual test
results, it was invisible to a failure-count comparison too.

Finally, four assertions in the data-store-name tests were left behind by
3f2801d ("fix(kong)!: harden data store name generation"), which appended a
four-character hex suffix without updating the patterns they are matched
against. They fail on develop as well; updating them here is what takes CI green.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
test/utils/status-tag-severity.test.ts (1)

17-17: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover analysis-node approval statuses too.

getApprovalStatusSeverity now accepts both approval-status enums, but this test only iterates ProjectNodeApprovalStatus. Add equivalent coverage for AnalysisNodeApprovalStatus so both Hub contracts are verified.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/utils/status-tag-severity.test.ts` at line 17, Extend the test around
getApprovalStatusSeverity to also iterate over AnalysisNodeApprovalStatus,
mirroring the existing ProjectNodeApprovalStatus coverage and assertions so both
approval-status enums are verified.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@test/utils/status-tag-severity.test.ts`:
- Line 17: Extend the test around getApprovalStatusSeverity to also iterate over
AnalysisNodeApprovalStatus, mirroring the existing ProjectNodeApprovalStatus
coverage and assertions so both approval-status enums are verified.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 4dd7a6e3-efa0-4a39-97ff-1abff69862f1

📥 Commits

Reviewing files that changed from the base of the PR and between 1522224 and bb9c632.

📒 Files selected for processing (28)
  • README.md
  • app/components/analysis/AnalysesTable.vue
  • app/components/analysis/AnalysisControlButtons.vue
  • app/components/analysis/logs/ContainerLogs.vue
  • app/components/data-stores/create/DataStoreProjectInitializer.vue
  • app/components/projects/ProjectProposalTable.vue
  • app/components/table/ApproveRejectToggle.vue
  • app/composables/useAPIFetch.ts
  • app/composables/useDataStoreList.ts
  • app/services/modifiedApiInterfaces.ts
  • app/stores/hubStore.ts
  • app/types/node.ts
  • app/utils/format-data-row.ts
  • app/utils/status-tag-severity.ts
  • eslint.config.js
  • test/components/analysis/AnalysisControlButtons.spec.ts
  • test/components/analysis/AnalysisTable.spec.ts
  • test/components/analysis/ContainerCounter.spec.ts
  • test/components/analysis/constants.ts
  • test/components/data-stores/DataStoreList.spec.ts
  • test/components/data-stores/constants.ts
  • test/components/data-stores/create/DataStoreProjectInitializer.spec.ts
  • test/components/projects/ProjectProposalTable.spec.ts
  • test/components/projects/constants.ts
  • test/components/table/ApproveRejectToggle.spec.ts
  • test/composables/useDataStoreList.test.ts
  • test/utils/data-store-name.test.ts
  • test/utils/status-tag-severity.test.ts
💤 Files with no reviewable changes (1)
  • app/types/node.ts
🚧 Files skipped from review as they are similar to previous changes (12)
  • app/stores/hubStore.ts
  • test/components/projects/ProjectProposalTable.spec.ts
  • test/components/data-stores/DataStoreList.spec.ts
  • README.md
  • eslint.config.js
  • app/utils/format-data-row.ts
  • test/components/table/ApproveRejectToggle.spec.ts
  • test/composables/useDataStoreList.test.ts
  • test/components/analysis/ContainerCounter.spec.ts
  • app/components/data-stores/create/DataStoreProjectInitializer.vue
  • test/components/data-stores/constants.ts
  • app/services/modifiedApiInterfaces.ts

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.

2 participants