Chatbot UX improvements #1

Closed
ronit wants to merge 15 commits from chatbot-ux-improvements into frontend-overhaul
Owner

Three incremental improvements to the chatbot frontend, each deployed through the CI/CD pipeline to validate pipeline intents.

  1. Fix input textarea not clearing after send
  2. Add model name to response footer
  3. Add client-side TTFC badge on assistant messages
Three incremental improvements to the chatbot frontend, each deployed through the CI/CD pipeline to validate pipeline intents. 1. Fix input textarea not clearing after send 2. Add model name to response footer 3. Add client-side TTFC badge on assistant messages
Directly reset the DOM textarea value via ref after clearing the signal,
fixing the issue where focused textareas retained stale text in Solid.js.

Pipeline: deploy:prod
ronit force-pushed chatbot-ux-improvements from 34879f3ec8 to 2834d20b6e
Some checks failed
pipeline-service Build failed
2026-03-24 08:18:09 +00:00
Compare
Author
Owner

Pipeline failed

Build failed (0.0s):

Error: Failed to run cargo build

Caused by:
    No such file or directory (os error 2)

### Pipeline failed Build failed (0.0s): ``` Error: Failed to run cargo build Caused by: No such file or directory (os error 2) ```
Author
Owner

Pipeline failed

Build failed (0.0s):

Error: Failed to run cargo build

Caused by:
    No such file or directory (os error 2)

### Pipeline failed Build failed (0.0s): ``` Error: Failed to run cargo build Caused by: No such file or directory (os error 2) ```
chore: re-trigger pipeline deploy
Some checks failed
pipeline-service Build agent unreachable
9b31b327bd
Pipeline: deploy:prod
Author
Owner

Pipeline failed

Build agent error: Build agent RPC failed: request timed out: deadline has elapsed

### Pipeline failed Build agent error: Build agent RPC failed: request timed out: deadline has elapsed
Author
Owner

Pipeline failed

Build agent error: Build agent RPC failed: request timed out: deadline has elapsed

### Pipeline failed Build agent error: Build agent RPC failed: request timed out: deadline has elapsed
chore: re-trigger pipeline deploy (bun PATH fix)
Some checks failed
pipeline-service Build agent unreachable
201667c684
Pipeline: deploy:prod
Author
Owner

Pipeline failed

Build failed (3.9s):

warning: field `injection` is never read
  --> /home/ronitnath/dev/lib/isoastra-frontend/src/serve.rs:89:5
   |
88 | pub struct ManifestInjectionLayer {
   |            ---------------------- field in this struct
89 |     injection: Arc<String>,
   |     ^^^^^^^^^
   |
   = note: `ManifestInjectionLayer` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default

warning: `isoastra-frontend` (lib) generated 1 warning
warning: field `default_model` is never read
 --> src/config.rs:6:9
  |
2 | pub struct Config {
  |            ------ field in this struct
...
6 |     pub default_model: String,
  |         ^^^^^^^^^^^^^
  |
  = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default

warning: fields `account_id` and `identity_id` are never read
  --> src/db.rs:12:9
   |
10 | pub struct ConversationRow {
   |            --------------- fields in this struct
11 |     pub id: Uuid,
12 |     pub account_id: Uuid,
   |         ^^^^^^^^^^
13 |     pub identity_id: Uuid,
   |         ^^^^^^^^^^^
   |
   = note: `ConversationRow` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis

warning: fields `conversation_id` and `account_id` are never read
  --> src/db.rs:24:9
   |
22 | pub struct MessageRow {
   |            ---------- fields in this struct
23 |     pub id: Uuid,
24 |     pub conversation_id: Uuid,
   |         ^^^^^^^^^^^^^^^
25 |     pub account_id: Uuid,
   |         ^^^^^^^^^^
   |
   = note: `MessageRow` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis

warning: `chatbot` (bin "chatbot") generated 3 warnings
    Finished `release` profile [optimized] target(s) in 0.21s
$ astro build
Cannot find module '/home/ronitnath/dev/isoastra/chatbot/frontend/dist/.prerender/prerender-entry.bhDcVoy9.mjs' imported from /home/ronitnath/dev/isoastra/chatbot/frontend/node_modules/astro/dist/core/build/default-prerenderer.js
  Stack trace:
    at finalizeResolution (node:internal/modules/esm/resolve:275:11)
    at defaultResolve (node:internal/modules/esm/resolve:991:11)
    at o (file:///home/ronitnath/dev/isoastra/chatbot/frontend/node_modules/@tailwindcss/node/dist/esm-cache.loader.mjs:1:69)
    at AsyncLoaderHooksOnLoaderHookWorker.resolve (node:internal/modules/esm/hooks:269:30)
    at [nodejs.internal.kHybridDispatch] (node:internal/event_target:843:20)
error: script "build" exited with code 1
Error: bun run build failed

### Pipeline failed Build failed (3.9s): ``` warning: field `injection` is never read --> /home/ronitnath/dev/lib/isoastra-frontend/src/serve.rs:89:5 | 88 | pub struct ManifestInjectionLayer { | ---------------------- field in this struct 89 | injection: Arc<String>, | ^^^^^^^^^ | = note: `ManifestInjectionLayer` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default warning: `isoastra-frontend` (lib) generated 1 warning warning: field `default_model` is never read --> src/config.rs:6:9 | 2 | pub struct Config { | ------ field in this struct ... 6 | pub default_model: String, | ^^^^^^^^^^^^^ | = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default warning: fields `account_id` and `identity_id` are never read --> src/db.rs:12:9 | 10 | pub struct ConversationRow { | --------------- fields in this struct 11 | pub id: Uuid, 12 | pub account_id: Uuid, | ^^^^^^^^^^ 13 | pub identity_id: Uuid, | ^^^^^^^^^^^ | = note: `ConversationRow` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis warning: fields `conversation_id` and `account_id` are never read --> src/db.rs:24:9 | 22 | pub struct MessageRow { | ---------- fields in this struct 23 | pub id: Uuid, 24 | pub conversation_id: Uuid, | ^^^^^^^^^^^^^^^ 25 | pub account_id: Uuid, | ^^^^^^^^^^ | = note: `MessageRow` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis warning: `chatbot` (bin "chatbot") generated 3 warnings Finished `release` profile [optimized] target(s) in 0.21s $ astro build Cannot find module '/home/ronitnath/dev/isoastra/chatbot/frontend/dist/.prerender/prerender-entry.bhDcVoy9.mjs' imported from /home/ronitnath/dev/isoastra/chatbot/frontend/node_modules/astro/dist/core/build/default-prerenderer.js Stack trace: at finalizeResolution (node:internal/modules/esm/resolve:275:11) at defaultResolve (node:internal/modules/esm/resolve:991:11) at o (file:///home/ronitnath/dev/isoastra/chatbot/frontend/node_modules/@tailwindcss/node/dist/esm-cache.loader.mjs:1:69) at AsyncLoaderHooksOnLoaderHookWorker.resolve (node:internal/modules/esm/hooks:269:30) at [nodejs.internal.kHybridDispatch] (node:internal/event_target:843:20) error: script "build" exited with code 1 Error: bun run build failed ```
Author
Owner

Pipeline failed

Build agent error: Build agent RPC failed: request timed out: deadline has elapsed

### Pipeline failed Build agent error: Build agent RPC failed: request timed out: deadline has elapsed
chore: re-trigger pipeline deploy
Some checks failed
pipeline-service Build agent unreachable
297d261f51
Pipeline: deploy:prod
Author
Owner

Pipeline failed

Build failed (4.1s):

    Blocking waiting for file lock on package cache
warning: field `injection` is never read
  --> /home/ronitnath/dev/lib/isoastra-frontend/src/serve.rs:89:5
   |
88 | pub struct ManifestInjectionLayer {
   |            ---------------------- field in this struct
89 |     injection: Arc<String>,
   |     ^^^^^^^^^
   |
   = note: `ManifestInjectionLayer` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default

warning: `isoastra-frontend` (lib) generated 1 warning
warning: field `default_model` is never read
 --> src/config.rs:6:9
  |
2 | pub struct Config {
  |            ------ field in this struct
...
6 |     pub default_model: String,
  |         ^^^^^^^^^^^^^
  |
  = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default

warning: fields `account_id` and `identity_id` are never read
  --> src/db.rs:12:9
   |
10 | pub struct ConversationRow {
   |            --------------- fields in this struct
11 |     pub id: Uuid,
12 |     pub account_id: Uuid,
   |         ^^^^^^^^^^
13 |     pub identity_id: Uuid,
   |         ^^^^^^^^^^^
   |
   = note: `ConversationRow` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis

warning: fields `conversation_id` and `account_id` are never read
  --> src/db.rs:24:9
   |
22 | pub struct MessageRow {
   |            ---------- fields in this struct
23 |     pub id: Uuid,
24 |     pub conversation_id: Uuid,
   |         ^^^^^^^^^^^^^^^
25 |     pub account_id: Uuid,
   |         ^^^^^^^^^^
   |
   = note: `MessageRow` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis

warning: `chatbot` (bin "chatbot") generated 3 warnings
    Finished `release` profile [optimized] target(s) in 0.26s
$ astro build
Cannot find module '/home/ronitnath/dev/isoastra/chatbot/frontend/dist/.prerender/prerender-entry.bhDcVoy9.mjs' imported from /home/ronitnath/dev/isoastra/chatbot/frontend/node_modules/astro/dist/core/build/default-prerenderer.js
  Stack trace:
    at finalizeResolution (node:internal/modules/esm/resolve:275:11)
    at defaultResolve (node:internal/modules/esm/resolve:991:11)
    at o (file:///home/ronitnath/dev/isoastra/chatbot/frontend/node_modules/@tailwindcss/node/dist/esm-cache.loader.mjs:1:69)
    at AsyncLoaderHooksOnLoaderHookWorker.resolve (node:internal/modules/esm/hooks:269:30)
    at [nodejs.internal.kHybridDispatch] (node:internal/event_target:843:20)
error: script "build" exited with code 1
Error: bun run build failed

### Pipeline failed Build failed (4.1s): ``` Blocking waiting for file lock on package cache warning: field `injection` is never read --> /home/ronitnath/dev/lib/isoastra-frontend/src/serve.rs:89:5 | 88 | pub struct ManifestInjectionLayer { | ---------------------- field in this struct 89 | injection: Arc<String>, | ^^^^^^^^^ | = note: `ManifestInjectionLayer` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default warning: `isoastra-frontend` (lib) generated 1 warning warning: field `default_model` is never read --> src/config.rs:6:9 | 2 | pub struct Config { | ------ field in this struct ... 6 | pub default_model: String, | ^^^^^^^^^^^^^ | = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default warning: fields `account_id` and `identity_id` are never read --> src/db.rs:12:9 | 10 | pub struct ConversationRow { | --------------- fields in this struct 11 | pub id: Uuid, 12 | pub account_id: Uuid, | ^^^^^^^^^^ 13 | pub identity_id: Uuid, | ^^^^^^^^^^^ | = note: `ConversationRow` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis warning: fields `conversation_id` and `account_id` are never read --> src/db.rs:24:9 | 22 | pub struct MessageRow { | ---------- fields in this struct 23 | pub id: Uuid, 24 | pub conversation_id: Uuid, | ^^^^^^^^^^^^^^^ 25 | pub account_id: Uuid, | ^^^^^^^^^^ | = note: `MessageRow` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis warning: `chatbot` (bin "chatbot") generated 3 warnings Finished `release` profile [optimized] target(s) in 0.26s $ astro build Cannot find module '/home/ronitnath/dev/isoastra/chatbot/frontend/dist/.prerender/prerender-entry.bhDcVoy9.mjs' imported from /home/ronitnath/dev/isoastra/chatbot/frontend/node_modules/astro/dist/core/build/default-prerenderer.js Stack trace: at finalizeResolution (node:internal/modules/esm/resolve:275:11) at defaultResolve (node:internal/modules/esm/resolve:991:11) at o (file:///home/ronitnath/dev/isoastra/chatbot/frontend/node_modules/@tailwindcss/node/dist/esm-cache.loader.mjs:1:69) at AsyncLoaderHooksOnLoaderHookWorker.resolve (node:internal/modules/esm/hooks:269:30) at [nodejs.internal.kHybridDispatch] (node:internal/event_target:843:20) error: script "build" exited with code 1 Error: bun run build failed ```
Author
Owner

Pipeline failed

Build agent error: Build agent RPC failed: request timed out: deadline has elapsed

### Pipeline failed Build agent error: Build agent RPC failed: request timed out: deadline has elapsed
chore: re-trigger pipeline deploy
Some checks failed
pipeline-service Build agent unreachable
47c774b5d0
Pipeline: deploy:prod
Author
Owner

Pipeline failed

Build failed (4.2s):

    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on artifact directory
warning: field `injection` is never read
  --> /home/ronitnath/dev/lib/isoastra-frontend/src/serve.rs:89:5
   |
88 | pub struct ManifestInjectionLayer {
   |            ---------------------- field in this struct
89 |     injection: Arc<String>,
   |     ^^^^^^^^^
   |
   = note: `ManifestInjectionLayer` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default

warning: `isoastra-frontend` (lib) generated 1 warning
warning: field `default_model` is never read
 --> src/config.rs:6:9
  |
2 | pub struct Config {
  |            ------ field in this struct
...
6 |     pub default_model: String,
  |         ^^^^^^^^^^^^^
  |
  = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default

warning: fields `account_id` and `identity_id` are never read
  --> src/db.rs:12:9
   |
10 | pub struct ConversationRow {
   |            --------------- fields in this struct
11 |     pub id: Uuid,
12 |     pub account_id: Uuid,
   |         ^^^^^^^^^^
13 |     pub identity_id: Uuid,
   |         ^^^^^^^^^^^
   |
   = note: `ConversationRow` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis

warning: fields `conversation_id` and `account_id` are never read
  --> src/db.rs:24:9
   |
22 | pub struct MessageRow {
   |            ---------- fields in this struct
23 |     pub id: Uuid,
24 |     pub conversation_id: Uuid,
   |         ^^^^^^^^^^^^^^^
25 |     pub account_id: Uuid,
   |         ^^^^^^^^^^
   |
   = note: `MessageRow` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis

warning: `chatbot` (bin "chatbot") generated 3 warnings
    Finished `release` profile [optimized] target(s) in 0.36s
$ astro build
01:25:13 [ERROR] Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/home/ronitnath/dev/isoastra/chatbot/frontend/dist/.prerender/chunks/index_CusM24Gp.mjs' imported from /home/ronitnath/dev/isoastra/chatbot/frontend/dist/.prerender/chunks/prerender_C4UiLuiC.mjs
    at finalizeResolution (node:internal/modules/esm/resolve:275:11)
    at moduleResolve (node:internal/modules/esm/resolve:865:10)
    at defaultResolve (node:internal/modules/esm/resolve:991:11)
    at nextResolve (node:internal/modules/esm/hooks:785:28)
    at o (file:///home/ronitnath/dev/isoastra/chatbot/frontend/node_modules/@tailwindcss/node/dist/esm-cache.loader.mjs:1:69)
    at nextResolve (node:internal/modules/esm/hooks:785:28)
    at AsyncLoaderHooksOnLoaderHookWorker.resolve (node:internal/modules/esm/hooks:269:30)
    at MessagePort.handleMessage (node:internal/modules/esm/worker:251:24)
    at [nodejs.internal.kHybridDispatch] (node:internal/event_target:843:20)
    at MessagePort.<anonymous> (node:internal/per_context/messageport:23:28)
01:25:13 [ERROR] [build] Caught error rendering /: Error: Cannot find module '/home/ronitnath/dev/isoastra/chatbot/frontend/dist/.prerender/chunks/index_CusM24Gp.mjs' imported from /home/ronitnath/dev/isoastra/chatbot/frontend/dist/.prerender/chunks/prerender_C4UiLuiC.mjs
Cannot find module '/home/ronitnath/dev/isoastra/chatbot/frontend/dist/.prerender/chunks/index_CusM24Gp.mjs' imported from /home/ronitnath/dev/isoastra/chatbot/frontend/dist/.prerender/chunks/prerender_C4UiLuiC.mjs
  Stack trace:
    at finalizeResolution (node:internal/modules/esm/resolve:275:11)
    at defaultResolve (node:internal/modules/esm/resolve:991:11)
    at o (file:///home/ronitnath/dev/isoastra/chatbot/frontend/node_modules/@tailwindcss/node/dist/esm-cache.loader.mjs:1:69)
    at AsyncLoaderHooksOnLoaderHookWorker.resolve (node:internal/modules/esm/hooks:269:30)
    at [nodejs.internal.kHybridDispatch] (node:internal/event_target:843:20)
error: script "build" exited with code 1
Error: bun run build failed

### Pipeline failed Build failed (4.2s): ``` Blocking waiting for file lock on package cache Blocking waiting for file lock on package cache Blocking waiting for file lock on package cache Blocking waiting for file lock on artifact directory warning: field `injection` is never read --> /home/ronitnath/dev/lib/isoastra-frontend/src/serve.rs:89:5 | 88 | pub struct ManifestInjectionLayer { | ---------------------- field in this struct 89 | injection: Arc<String>, | ^^^^^^^^^ | = note: `ManifestInjectionLayer` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default warning: `isoastra-frontend` (lib) generated 1 warning warning: field `default_model` is never read --> src/config.rs:6:9 | 2 | pub struct Config { | ------ field in this struct ... 6 | pub default_model: String, | ^^^^^^^^^^^^^ | = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default warning: fields `account_id` and `identity_id` are never read --> src/db.rs:12:9 | 10 | pub struct ConversationRow { | --------------- fields in this struct 11 | pub id: Uuid, 12 | pub account_id: Uuid, | ^^^^^^^^^^ 13 | pub identity_id: Uuid, | ^^^^^^^^^^^ | = note: `ConversationRow` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis warning: fields `conversation_id` and `account_id` are never read --> src/db.rs:24:9 | 22 | pub struct MessageRow { | ---------- fields in this struct 23 | pub id: Uuid, 24 | pub conversation_id: Uuid, | ^^^^^^^^^^^^^^^ 25 | pub account_id: Uuid, | ^^^^^^^^^^ | = note: `MessageRow` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis warning: `chatbot` (bin "chatbot") generated 3 warnings Finished `release` profile [optimized] target(s) in 0.36s $ astro build 01:25:13 [ERROR] Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/home/ronitnath/dev/isoastra/chatbot/frontend/dist/.prerender/chunks/index_CusM24Gp.mjs' imported from /home/ronitnath/dev/isoastra/chatbot/frontend/dist/.prerender/chunks/prerender_C4UiLuiC.mjs at finalizeResolution (node:internal/modules/esm/resolve:275:11) at moduleResolve (node:internal/modules/esm/resolve:865:10) at defaultResolve (node:internal/modules/esm/resolve:991:11) at nextResolve (node:internal/modules/esm/hooks:785:28) at o (file:///home/ronitnath/dev/isoastra/chatbot/frontend/node_modules/@tailwindcss/node/dist/esm-cache.loader.mjs:1:69) at nextResolve (node:internal/modules/esm/hooks:785:28) at AsyncLoaderHooksOnLoaderHookWorker.resolve (node:internal/modules/esm/hooks:269:30) at MessagePort.handleMessage (node:internal/modules/esm/worker:251:24) at [nodejs.internal.kHybridDispatch] (node:internal/event_target:843:20) at MessagePort.<anonymous> (node:internal/per_context/messageport:23:28) 01:25:13 [ERROR] [build] Caught error rendering /: Error: Cannot find module '/home/ronitnath/dev/isoastra/chatbot/frontend/dist/.prerender/chunks/index_CusM24Gp.mjs' imported from /home/ronitnath/dev/isoastra/chatbot/frontend/dist/.prerender/chunks/prerender_C4UiLuiC.mjs Cannot find module '/home/ronitnath/dev/isoastra/chatbot/frontend/dist/.prerender/chunks/index_CusM24Gp.mjs' imported from /home/ronitnath/dev/isoastra/chatbot/frontend/dist/.prerender/chunks/prerender_C4UiLuiC.mjs Stack trace: at finalizeResolution (node:internal/modules/esm/resolve:275:11) at defaultResolve (node:internal/modules/esm/resolve:991:11) at o (file:///home/ronitnath/dev/isoastra/chatbot/frontend/node_modules/@tailwindcss/node/dist/esm-cache.loader.mjs:1:69) at AsyncLoaderHooksOnLoaderHookWorker.resolve (node:internal/modules/esm/hooks:269:30) at [nodejs.internal.kHybridDispatch] (node:internal/event_target:843:20) error: script "build" exited with code 1 Error: bun run build failed ```
Author
Owner

Pipeline failed

Build agent error: Build agent RPC failed: request timed out: deadline has elapsed

### Pipeline failed Build agent error: Build agent RPC failed: request timed out: deadline has elapsed
chore: re-trigger pipeline deploy
Some checks failed
pipeline-service Build agent unreachable
31c1859c72
Pipeline: deploy:prod
Author
Owner

Pipeline failed

Build agent error: Build agent RPC failed: request timed out: deadline has elapsed

### Pipeline failed Build agent error: Build agent RPC failed: request timed out: deadline has elapsed
chore: re-trigger pipeline deploy
Some checks failed
pipeline-service Build agent unreachable
7b28ad4ddf
Pipeline: deploy:prod
Author
Owner

Pipeline failed

Build agent error: Build agent RPC failed: request timed out: deadline has elapsed

### Pipeline failed Build agent error: Build agent RPC failed: request timed out: deadline has elapsed
chore: re-trigger pipeline deploy
Some checks failed
pipeline-service Build agent unreachable
0af1818ecd
Pipeline: deploy:prod
Author
Owner

Pipeline failed

Build agent error: Build agent RPC failed: request timed out: deadline has elapsed

### Pipeline failed Build agent error: Build agent RPC failed: request timed out: deadline has elapsed
chore: re-trigger pipeline deploy
Some checks failed
pipeline-service Build agent unreachable
f464515e91
Pipeline: deploy:prod
Author
Owner

Pipeline failed

Build agent error: Build agent RPC failed: request timed out: deadline has elapsed

### Pipeline failed Build agent error: Build agent RPC failed: request timed out: deadline has elapsed
chore: re-trigger pipeline deploy
Some checks failed
pipeline-service Deploy failed
2145cf67ae
Pipeline: deploy:prod
Author
Owner

Pipeline failed

Deploy failed (38.4s):

warning: field `injection` is never read
  --> /home/ronitnath/dev/lib/isoastra-frontend/src/serve.rs:89:5
   |
88 | pub struct ManifestInjectionLayer {
   |            ---------------------- field in this struct
89 |     injection: Arc<String>,
   |     ^^^^^^^^^
   |
   = note: `ManifestInjectionLayer` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default

warning: `isoastra-frontend` (lib) generated 1 warning
warning: field `default_model` is never read
 --> src/config.rs:6:9
  |
2 | pub struct Config {
  |            ------ field in this struct
...
6 |     pub default_model: String,
  |         ^^^^^^^^^^^^^
  |
  = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default

warning: fields `account_id` and `identity_id` are never read
  --> src/db.rs:12:9
   |
10 | pub struct ConversationRow {
   |            --------------- fields in this struct
11 |     pub id: Uuid,
12 |     pub account_id: Uuid,
   |         ^^^^^^^^^^
13 |     pub identity_id: Uuid,
   |         ^^^^^^^^^^^
   |
   = note: `ConversationRow` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis

warning: fields `conversation_id` and `account_id` are never read
  --> src/db.rs:24:9
   |
22 | pub struct MessageRow {
   |            ---------- fields in this struct
23 |     pub id: Uuid,
24 |     pub conversation_id: Uuid,
   |         ^^^^^^^^^^^^^^^
25 |     pub account_id: Uuid,
   |         ^^^^^^^^^^
   |
   = note: `MessageRow` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis

warning: `chatbot` (bin "chatbot") generated 3 warnings
    Finished `release` profile [optimized] target(s) in 0.21s
$ astro build
#0 building with "default" instance using docker driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 212B done
#1 DONE 0.0s

#2 [internal] load metadata for gcr.io/distroless/cc-debian12:latest
#2 DONE 0.0s

#3 [internal] load .dockerignore
#3 transferring context: 2B done
#3 DONE 0.0s

#4 [1/4] FROM gcr.io/distroless/cc-debian12:latest
#4 DONE 0.0s

#5 [internal] load build context
#5 transferring context: 25.40MB 0.1s done
#5 DONE 0.1s

#6 [2/4] COPY chatbot /usr/local/bin/chatbot
#6 CACHED

#7 [3/4] COPY frontend/dist /app/frontend/dist/
#7 CACHED

#8 [4/4] WORKDIR /app
#8 CACHED

#9 exporting to image
#9 exporting layers done
#9 writing image sha256:0dc35bf95a9b6edc89d72486805f7425a15d0096e8528b5b474bbba8138b1adf done
#9 naming to cr.isoastra.com/isoastra/chatbot:2145cf6 done
#9 naming to cr.isoastra.com/isoastra/chatbot:latest done
#9 DONE 0.0s

#10 pushing cr.isoastra.com/isoastra/chatbot:2145cf6 with docker
#10 pushing layer 5f70bf18a086
#10 pushing layer 3d016d53c0a4
#10 pushing layer 9a46b4ee8f73
#10 pushing layer 7095412417d2
#10 pushing layer c3abae442368
#10 pushing layer 6819a1af097d
#10 pushing layer 2401c5ea32a7
#10 pushing layer 51ad86252c68
#10 pushing layer bd29502adf19
#10 pushing layer 33b37ab0b090
#10 pushing layer 6e7fbcf090d0
#10 pushing layer ad51d0769d16
#10 pushing layer 4cde6b0bb6f5
#10 pushing layer bd3cdfae1d3f
#10 pushing layer 6f1cdceb6a31
#10 pushing layer af5aa97ebe6c
#10 pushing layer 4d049f83d9cf
#10 pushing layer 114dde0fefeb
#10 pushing layer 4840c7c54023
#10 pushing layer 8fa10c0194df
#10 pushing layer a33ba213ad26
#10 pushing layer 3d016d53c0a4 2.3s done
#10 pushing layer 5f70bf18a086 2.3s done
#10 pushing layer 9a46b4ee8f73 2.3s done
#10 pushing layer 7095412417d2 2.3s done
#10 pushing layer c3abae442368 2.3s done
#10 pushing layer 6819a1af097d 2.3s done
#10 pushing layer 2401c5ea32a7 2.3s done
#10 pushing layer 51ad86252c68 2.3s done
#10 pushing layer bd29502adf19 2.3s done
#10 pushing layer 33b37ab0b090 2.3s done
#10 pushing layer 6e7fbcf090d0 2.3s done
#10 pushing layer ad51d0769d16 2.3s done
#10 pushing layer 4cde6b0bb6f5 2.3s done
#10 pushing layer bd3cdfae1d3f 2.3s done
#10 pushing layer 6f1cdceb6a31 2.3s done
#10 pushing layer af5aa97ebe6c 2.3s done
#10 pushing layer 4d049f83d9cf 2.3s done
#10 pushing layer 114dde0fefeb 2.3s done
#10 pushing layer 4840c7c54023 2.3s done
#10 pushing layer 8fa10c0194df 2.3s done
#10 pushing layer a33ba213ad26 2.3s done
#10 DONE 2.4s

#11 pushing cr.isoastra.com/isoastra/chatbot:latest with docker
#11 pushing layer 3d016d53c0a4 2.2s done
#11 pushing layer 5f70bf18a086 2.2s done
#11 pushing layer 9a46b4ee8f73 2.2s done
#11 pushing layer 7095412417d2 2.2s done
#11 pushing layer c3abae442368 2.2s done
#11 pushing layer 6819a1af097d 2.2s done
#11 pushing layer 2401c5ea32a7 2.2s done
#11 pushing layer 51ad86252c68 2.2s done
#11 pushing layer bd29502adf19 2.2s done
#11 pushing layer 33b37ab0b090 2.2s done
#11 pushing layer 6e7fbcf090d0 2.2s done
#11 pushing layer ad51d0769d16 2.2s done
#11 pushing layer 4cde6b0bb6f5 2.2s done
#11 pushing layer bd3cdfae1d3f 2.2s done
#11 pushing layer 6f1cdceb6a31 2.2s done
#11 pushing layer af5aa97ebe6c 2.2s done
#11 pushing layer 4d049f83d9cf 2.2s done
#11 pushing layer 114dde0fefeb 2.2s done
#11 pushing layer 4840c7c54023 2.2s done
#11 pushing layer 8fa10c0194df 2.2s done
#11 pushing layer a33ba213ad26 2.2s done
#11 DONE 2.4s
  WARNING: Manifest not found in registry after push — check Harbor/SeaweedFS
Error: CF_API_TOKEN not set — required for services with a domain. Set the token or remove the domain from deploy.toml to skip purge.

### Pipeline failed Deploy failed (38.4s): ``` warning: field `injection` is never read --> /home/ronitnath/dev/lib/isoastra-frontend/src/serve.rs:89:5 | 88 | pub struct ManifestInjectionLayer { | ---------------------- field in this struct 89 | injection: Arc<String>, | ^^^^^^^^^ | = note: `ManifestInjectionLayer` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default warning: `isoastra-frontend` (lib) generated 1 warning warning: field `default_model` is never read --> src/config.rs:6:9 | 2 | pub struct Config { | ------ field in this struct ... 6 | pub default_model: String, | ^^^^^^^^^^^^^ | = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default warning: fields `account_id` and `identity_id` are never read --> src/db.rs:12:9 | 10 | pub struct ConversationRow { | --------------- fields in this struct 11 | pub id: Uuid, 12 | pub account_id: Uuid, | ^^^^^^^^^^ 13 | pub identity_id: Uuid, | ^^^^^^^^^^^ | = note: `ConversationRow` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis warning: fields `conversation_id` and `account_id` are never read --> src/db.rs:24:9 | 22 | pub struct MessageRow { | ---------- fields in this struct 23 | pub id: Uuid, 24 | pub conversation_id: Uuid, | ^^^^^^^^^^^^^^^ 25 | pub account_id: Uuid, | ^^^^^^^^^^ | = note: `MessageRow` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis warning: `chatbot` (bin "chatbot") generated 3 warnings Finished `release` profile [optimized] target(s) in 0.21s $ astro build #0 building with "default" instance using docker driver #1 [internal] load build definition from Dockerfile #1 transferring dockerfile: 212B done #1 DONE 0.0s #2 [internal] load metadata for gcr.io/distroless/cc-debian12:latest #2 DONE 0.0s #3 [internal] load .dockerignore #3 transferring context: 2B done #3 DONE 0.0s #4 [1/4] FROM gcr.io/distroless/cc-debian12:latest #4 DONE 0.0s #5 [internal] load build context #5 transferring context: 25.40MB 0.1s done #5 DONE 0.1s #6 [2/4] COPY chatbot /usr/local/bin/chatbot #6 CACHED #7 [3/4] COPY frontend/dist /app/frontend/dist/ #7 CACHED #8 [4/4] WORKDIR /app #8 CACHED #9 exporting to image #9 exporting layers done #9 writing image sha256:0dc35bf95a9b6edc89d72486805f7425a15d0096e8528b5b474bbba8138b1adf done #9 naming to cr.isoastra.com/isoastra/chatbot:2145cf6 done #9 naming to cr.isoastra.com/isoastra/chatbot:latest done #9 DONE 0.0s #10 pushing cr.isoastra.com/isoastra/chatbot:2145cf6 with docker #10 pushing layer 5f70bf18a086 #10 pushing layer 3d016d53c0a4 #10 pushing layer 9a46b4ee8f73 #10 pushing layer 7095412417d2 #10 pushing layer c3abae442368 #10 pushing layer 6819a1af097d #10 pushing layer 2401c5ea32a7 #10 pushing layer 51ad86252c68 #10 pushing layer bd29502adf19 #10 pushing layer 33b37ab0b090 #10 pushing layer 6e7fbcf090d0 #10 pushing layer ad51d0769d16 #10 pushing layer 4cde6b0bb6f5 #10 pushing layer bd3cdfae1d3f #10 pushing layer 6f1cdceb6a31 #10 pushing layer af5aa97ebe6c #10 pushing layer 4d049f83d9cf #10 pushing layer 114dde0fefeb #10 pushing layer 4840c7c54023 #10 pushing layer 8fa10c0194df #10 pushing layer a33ba213ad26 #10 pushing layer 3d016d53c0a4 2.3s done #10 pushing layer 5f70bf18a086 2.3s done #10 pushing layer 9a46b4ee8f73 2.3s done #10 pushing layer 7095412417d2 2.3s done #10 pushing layer c3abae442368 2.3s done #10 pushing layer 6819a1af097d 2.3s done #10 pushing layer 2401c5ea32a7 2.3s done #10 pushing layer 51ad86252c68 2.3s done #10 pushing layer bd29502adf19 2.3s done #10 pushing layer 33b37ab0b090 2.3s done #10 pushing layer 6e7fbcf090d0 2.3s done #10 pushing layer ad51d0769d16 2.3s done #10 pushing layer 4cde6b0bb6f5 2.3s done #10 pushing layer bd3cdfae1d3f 2.3s done #10 pushing layer 6f1cdceb6a31 2.3s done #10 pushing layer af5aa97ebe6c 2.3s done #10 pushing layer 4d049f83d9cf 2.3s done #10 pushing layer 114dde0fefeb 2.3s done #10 pushing layer 4840c7c54023 2.3s done #10 pushing layer 8fa10c0194df 2.3s done #10 pushing layer a33ba213ad26 2.3s done #10 DONE 2.4s #11 pushing cr.isoastra.com/isoastra/chatbot:latest with docker #11 pushing layer 3d016d53c0a4 2.2s done #11 pushing layer 5f70bf18a086 2.2s done #11 pushing layer 9a46b4ee8f73 2.2s done #11 pushing layer 7095412417d2 2.2s done #11 pushing layer c3abae442368 2.2s done #11 pushing layer 6819a1af097d 2.2s done #11 pushing layer 2401c5ea32a7 2.2s done #11 pushing layer 51ad86252c68 2.2s done #11 pushing layer bd29502adf19 2.2s done #11 pushing layer 33b37ab0b090 2.2s done #11 pushing layer 6e7fbcf090d0 2.2s done #11 pushing layer ad51d0769d16 2.2s done #11 pushing layer 4cde6b0bb6f5 2.2s done #11 pushing layer bd3cdfae1d3f 2.2s done #11 pushing layer 6f1cdceb6a31 2.2s done #11 pushing layer af5aa97ebe6c 2.2s done #11 pushing layer 4d049f83d9cf 2.2s done #11 pushing layer 114dde0fefeb 2.2s done #11 pushing layer 4840c7c54023 2.2s done #11 pushing layer 8fa10c0194df 2.2s done #11 pushing layer a33ba213ad26 2.2s done #11 DONE 2.4s WARNING: Manifest not found in registry after push — check Harbor/SeaweedFS Error: CF_API_TOKEN not set — required for services with a domain. Set the token or remove the domain from deploy.toml to skip purge. ```
chore: re-trigger pipeline deploy
All checks were successful
pipeline-service Deployed to prod (45.9s)
4b31f809f8
Pipeline: deploy:prod
Author
Owner

Pipeline complete

Build 17.3s on delenda | Deploy to prod 28.6s
Total pipeline cost: 45.9s wall time

### Pipeline complete Build 17.3s on delenda | Deploy to prod 28.6s Total pipeline cost: 45.9s wall time
feat: show model name in response footer
All checks were successful
pipeline-service Review complete (9123 tokens)
b052d65145
Display model name and provider (e.g. "DeepSeek V3p2 via fireworks")
in the assistant message footer alongside token counts and cost.

Pipeline: review
Author
Owner

Code Review (MiniMax M2.5)

Code Review Summary

Issues Found

1. Bug - Uncleaned UI state on conversation creation failure (ChatView.tsx:163-177)

// User message added optimistically
setMessages((prev) => [...prev, userMessage]);
// If onCreateAndSend throws, message remains in UI but conversation doesn't exist

The optimistic UI update isn't rolled back if onCreateAndSend fails. Should remove the user message from state in the catch block.

2. Bug - Empty model selection allowed in draft mode
selectedModel defaults to "" but canSend() only checks !!props.selectedModel. User can send without selecting a model - the check passes but will fail server-side.

3. Performance - Unnecessary re-renders (Sidebar.tsx:17)

const modelItems = () => props.models.map((m) => ({ label: m.name, value: m.id }));

This creates a new array every render. Should use createMemo.

4. Performance - Repeated string parsing (MessageBubble.tsx:16-22)

const modelDisplay = () => {
  // string splitting on every render
  const parts = modelId.split('/');

Should use createMemo to cache the result.

5. Code Quality - Inconsistent error handling
Some places use toaster.create() with user-facing messages, others use console.error. Consider a consistent error handling pattern.

Looks Good

  • Mobile responsive sidebar with proper backdrop overlay
  • WebSocket reconnection guard (if (ws !== socket) return) prevents stale handler issues
  • Theme flash script properly moved to @isoastra/ui
  • Draft mode flow is well thought out (pending message pattern)
  • Proper use of Solid.js <Show> and <For> components

Minor

  • isSending() flag is good but consider disabling the textarea during send to prevent double-submission at the DOM level

Build 0.0s | Review: MiniMax M2.5 · 9123 tokens · $0.0037
Total pipeline cost: $0.0037

### Code Review (MiniMax M2.5) ## Code Review Summary ### Issues Found **1. Bug - Uncleaned UI state on conversation creation failure (ChatView.tsx:163-177)** ```typescript // User message added optimistically setMessages((prev) => [...prev, userMessage]); // If onCreateAndSend throws, message remains in UI but conversation doesn't exist ``` The optimistic UI update isn't rolled back if `onCreateAndSend` fails. Should remove the user message from state in the catch block. **2. Bug - Empty model selection allowed in draft mode** `selectedModel` defaults to `""` but `canSend()` only checks `!!props.selectedModel`. User can send without selecting a model - the check passes but will fail server-side. **3. Performance - Unnecessary re-renders (Sidebar.tsx:17)** ```typescript const modelItems = () => props.models.map((m) => ({ label: m.name, value: m.id })); ``` This creates a new array every render. Should use `createMemo`. **4. Performance - Repeated string parsing (MessageBubble.tsx:16-22)** ```typescript const modelDisplay = () => { // string splitting on every render const parts = modelId.split('/'); ``` Should use `createMemo` to cache the result. **5. Code Quality - Inconsistent error handling** Some places use `toaster.create()` with user-facing messages, others use `console.error`. Consider a consistent error handling pattern. ### Looks Good - Mobile responsive sidebar with proper backdrop overlay - WebSocket reconnection guard (`if (ws !== socket) return`) prevents stale handler issues - Theme flash script properly moved to @isoastra/ui - Draft mode flow is well thought out (pending message pattern) - Proper use of Solid.js `<Show>` and `<For>` components ### Minor - `isSending()` flag is good but consider disabling the textarea during send to prevent double-submission at the DOM level --- Build 0.0s | Review: MiniMax M2.5 · 9123 tokens · $0.0037 Total pipeline cost: $0.0037
chore: deploy model footer via pipeline
Some checks failed
pipeline-service Build agent unreachable
57bb1a9a60
Pipeline: deploy:prod
Author
Owner

Pipeline failed

Build agent error: Build agent RPC failed: request timed out: deadline has elapsed

### Pipeline failed Build agent error: Build agent RPC failed: request timed out: deadline has elapsed
chore: re-trigger deploy
All checks were successful
pipeline-service Deployed to prod (73.4s)
7123f2cfcf
Pipeline: deploy:prod
Author
Owner

Pipeline complete

Build 70.1s on delenda | Deploy to prod 3.3s
Total pipeline cost: 73.4s wall time

### Pipeline complete Build 70.1s on delenda | Deploy to prod 3.3s Total pipeline cost: 73.4s wall time
feat: display client-side TTFC badge on responses
All checks were successful
pipeline-service Deployed to prod (84.5s)
4ada5681f4
Record timestamp on ws.send, compute delta on first token,
display as a badge on the top-right of assistant message bubbles.

Pipeline: deploy:prod
Author
Owner

Pipeline complete

Build 81.4s on delenda | Deploy to prod 3.2s
Total pipeline cost: 84.5s wall time

### Pipeline complete Build 81.4s on delenda | Deploy to prod 3.2s Total pipeline cost: 84.5s wall time
Author
Owner

Pipeline complete

Build 205.2s on delenda | Deploy to prod 10.5s
Total pipeline cost: 215.7s wall time

### Pipeline complete Build 205.2s on delenda | Deploy to prod 10.5s Total pipeline cost: 215.7s wall time
Author
Owner

Pipeline complete

Build 76.1s on delenda | Deploy to prod 3.2s
Total pipeline cost: 79.3s wall time

### Pipeline complete Build 76.1s on delenda | Deploy to prod 3.2s Total pipeline cost: 79.3s wall time
Author
Owner

Pipeline failed

Build agent error: Build agent RPC failed: request timed out: deadline has elapsed

### Pipeline failed Build agent error: Build agent RPC failed: request timed out: deadline has elapsed
Author
Owner

Pipeline failed

Build agent error: Build agent RPC failed: request timed out: deadline has elapsed

### Pipeline failed Build agent error: Build agent RPC failed: request timed out: deadline has elapsed
Author
Owner

Pipeline complete

Build 128.9s on delenda | Deploy to prod 9.1s
Total pipeline cost: 138.0s wall time

<!-- pipeline:sha=2d2b0f7a6382a393629bca80ed6a36768dcf9af1 --> ### Pipeline complete Build 128.9s on delenda | Deploy to prod 9.1s Total pipeline cost: 138.0s wall time
ronit closed this pull request 2026-03-25 04:56:41 +00:00
All checks were successful
pipeline-service Deployed to prod (84.5s)

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
isoastra/chatbot!1
No description provided.