Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2299 commits
Select commit Hold shift + click to select a range
a223284
feat(kb): managed knowledge base migration — inert behind flags, upgr…
DerrickF Aug 27, 2026
fcf0832
fix(kb): pass the Environment tag value instead of guessing it (#885)
DerrickF Aug 27, 2026
bfcf955
feat(kb): ship the real kb-migration Lambda image
DerrickF Aug 27, 2026
a2de16d
Merge pull request #886 from Boise-State-Development/feat/kb-migratio…
DerrickF Aug 27, 2026
e3b10f8
fix(kb): give the dispatcher the worker name it actually reads
DerrickF Aug 27, 2026
ead8655
Merge pull request #887 from Boise-State-Development/fix/kb-migration…
DerrickF Aug 27, 2026
2182cae
fix(kb): grant the tag permissions provisioning and reconciliation need
DerrickF Aug 27, 2026
1fc0731
Merge pull request #888 from Boise-State-Development/fix/managed-kb-t…
DerrickF Aug 28, 2026
46b112e
fix(kb): wait for the knowledge base to be ACTIVE before its data source
DerrickF Aug 28, 2026
db3adf3
fix(marketplace): stop the review flow reporting failures twice
philmerrell Aug 28, 2026
554c0e7
fix(marketplace): report a refused decision beside the decision buttons
philmerrell Aug 28, 2026
1b04171
chore(kaizen): weekly research scan 2026-08-28
philmerrell Aug 28, 2026
41cb248
chore(kaizen): weekly review prep 2026-08-28
philmerrell Aug 28, 2026
8ab7d6a
Merge pull request #891 from Boise-State-Development/kaizen/research-…
philmerrell Aug 28, 2026
539d1d2
Merge pull request #892 from Boise-State-Development/kaizen/review-20…
philmerrell Aug 28, 2026
55f44ed
fix(fine-tuning): read every dataset format the UI accepts
philmerrell Aug 28, 2026
5601cba
fix(fine-tuning): make the admin cost dashboard count real spend
philmerrell Aug 28, 2026
70948dd
fix(fine-tuning): wire the runtime flags that gate the feature
philmerrell Aug 28, 2026
c1eaf3f
Merge pull request #890 from Boise-State-Development/fix/marketplace-…
philmerrell Aug 28, 2026
3d6dad9
Merge pull request #893 from Boise-State-Development/fix/fine-tuning-…
philmerrell Aug 28, 2026
237a595
fix(fine-tuning): reject instance types we have no price for
philmerrell Aug 28, 2026
0c1bb76
Merge pull request #894 from Boise-State-Development/fix/fine-tuning-…
philmerrell Aug 28, 2026
05aa3ca
fix(chat): let arrow keys walk the @-mention menu
philmerrell Aug 28, 2026
317a400
feat(chat): set @-mentions apart in the user's message
philmerrell Aug 28, 2026
c5fe72d
Merge pull request #895 from Boise-State-Development/fix/agent-mentio…
philmerrell Aug 28, 2026
4567be5
Merge remote-tracking branch 'origin/main' into backmerge/main-into-d…
philmerrell Aug 28, 2026
6a7a6c0
Merge pull request #897 from Boise-State-Development/backmerge/main-i…
philmerrell Aug 28, 2026
fcda0ad
Merge pull request #889 from Boise-State-Development/fix/kb-provision…
DerrickF Aug 31, 2026
7542d90
fix(kb): record the knowledge base id before anything else can fail
DerrickF Aug 31, 2026
6420f14
fix(kb): drop the embedding pin, defer verify, and complete a migrati…
DerrickF Aug 31, 2026
fdf15d2
fix(kb): grant bedrock:StartIngestionJob, which authorizes direct ing…
DerrickF Aug 31, 2026
ef2f4c9
Merge pull request #898 from Boise-State-Development/fix/kb-persist-a…
DerrickF Aug 31, 2026
f9d9413
docs(kb): record the StartIngestionJob defect, two open findings, and…
DerrickF Aug 31, 2026
8a35dbc
fix(kb): the legacy pipeline stands down for a promoted knowledge base
DerrickF Aug 31, 2026
e3398f3
fix(kb): propagate document deletion to the managed knowledge base
DerrickF Sep 1, 2026
41eb4be
docs(kb): four more defects from one evening, plus two read-only diag…
DerrickF Sep 1, 2026
df93471
Merge pull request #900 from Boise-State-Development/fix/kb-legacy-pi…
DerrickF Sep 1, 2026
2a45820
Merge pull request #899 from Boise-State-Development/docs/kb-handoff-…
DerrickF Sep 1, 2026
9737638
fix(kb): wait for indexing to finish, and stop re-ingesting while it …
DerrickF Sep 1, 2026
a4b660b
Merge pull request #901 from Boise-State-Development/fix/kb-consumer-…
DerrickF Sep 1, 2026
ac9c0cd
fix(security): scope admin skills routes to the catalog; close AST at…
colinmxs Sep 1, 2026
632e1ac
Merge pull request #902 from Boise-State-Development/fix/admin-skills…
colinmxs Sep 1, 2026
e748ac7
fix(auth): bind BFF OAuth state to the requesting browser
colinmxs Sep 1, 2026
dffab6c
Merge pull request #903 from Boise-State-Development/fix/bff-oidc-log…
colinmxs Sep 1, 2026
01c91e8
fix(skills): close privilege-escalating stored XSS in skill resources
colinmxs Sep 1, 2026
57435c5
Merge pull request #904 from Boise-State-Development/fix/skill-resour…
colinmxs Sep 1, 2026
13c972d
fix(agent): retry Bedrock's transient service faults
philmerrell Sep 1, 2026
e2c45a4
fix(chat): re-send attachments a failed turn never delivered
philmerrell Sep 1, 2026
0ea02b8
feat(chat): make transient model failures legible to the user
philmerrell Sep 1, 2026
8fb821b
fix(sessions): stop a session id being forked across two users
philmerrell Sep 1, 2026
65526fd
Merge pull request #905 from Boise-State-Development/feature/bedrock-…
philmerrell Sep 1, 2026
1ca4621
Merge pull request #906 from Boise-State-Development/fix/session-id-c…
philmerrell Sep 1, 2026
7d8d4ff
feat(chat): tell the user a quiet response is still working
philmerrell Sep 1, 2026
a09f474
Merge pull request #907 from Boise-State-Development/fix/stall-heartbeat
philmerrell Sep 1, 2026
190954c
fix(kb): confirm retrievability with a filtered query, and classify T…
DerrickF Sep 1, 2026
0400266
docs(kb): correct the PR number for findings 38-39
DerrickF Sep 1, 2026
b93b099
fix(chat): don't tell the model a completed answer was cut short
philmerrell Sep 2, 2026
b681b2f
Add production observability baseline with routed alarms
colinmxs Sep 2, 2026
c4f214d
Cut over-explanation from observability comments
colinmxs Sep 2, 2026
748bb7e
Merge pull request #909 from Boise-State-Development/fix/false-interr…
philmerrell Sep 2, 2026
a3020e6
Merge pull request #910 from Boise-State-Development/observability
colinmxs Sep 2, 2026
548285a
fix(infra): grant MCP Lambda function URL invoke to app-api and widen…
philmerrell Sep 2, 2026
cc4a4f9
Merge pull request #911 from Boise-State-Development/feature/app-api-…
philmerrell Sep 2, 2026
b86b4a9
Merge remote-tracking branch 'origin/main' into backmerge/main-into-d…
philmerrell Sep 2, 2026
6ebe320
Merge pull request #913 from Boise-State-Development/backmerge/main-i…
philmerrell Sep 2, 2026
3349a3c
fix(costs): correct the cache-write premium and the Global/Regional r…
philmerrell Sep 3, 2026
cd1bd31
fix(models): treat an omitted supported_param as unsupported, not pas…
philmerrell Sep 3, 2026
f64919d
feat(chat): queue a mid-stream follow-up instead of interrupting the run
philmerrell Sep 3, 2026
6646a27
Merge pull request #914 from Boise-State-Development/feature/correct-…
philmerrell Sep 3, 2026
6c573bb
Merge pull request #915 from Boise-State-Development/feature/supporte…
philmerrell Sep 3, 2026
e253671
Merge pull request #916 from Boise-State-Development/feature/queue-fo…
philmerrell Sep 3, 2026
ba565b9
docs: add the prod runbook for the managed-model rate-tier correction
philmerrell Sep 3, 2026
da579c9
docs: add the mid-turn steering spec
philmerrell Sep 3, 2026
44b0265
Merge pull request #917 from Boise-State-Development/docs/kaizen-foll…
philmerrell Sep 3, 2026
527ffd5
Merge remote-tracking branch 'origin/develop' into fix/kb-filtered-re…
DerrickF Sep 3, 2026
c8f8dee
docs(kb): bring the spec current so it can be handed off
DerrickF Sep 3, 2026
9d128e3
Merge pull request #908 from Boise-State-Development/fix/kb-filtered-…
DerrickF Sep 3, 2026
b4671f6
docs(specs): add artifact sharing spec
philmerrell Sep 3, 2026
4e47c2d
feat(artifacts): share records + owner CRUD API + share-scoped mint
philmerrell Sep 3, 2026
1ea1d81
feat(artifacts): owner UI for artifact sharing — Share button, share …
philmerrell Sep 3, 2026
e6a5622
Merge pull request #919 from Boise-State-Development/feature/artifact…
philmerrell Sep 3, 2026
904f2ae
Merge pull request #920 from Boise-State-Development/feature/artifact…
philmerrell Sep 3, 2026
c9dcb6e
feat(sessions): lease-row inbox for mid-turn steering
philmerrell Sep 3, 2026
3e7a54a
feat(agents): inject a queued follow-up at the next tool boundary
philmerrell Sep 3, 2026
ceec275
feat(sessions): POST /sessions/{id}/steer arming endpoint
philmerrell Sep 3, 2026
ca19c19
feat(spa): parse the steering_applied SSE event
philmerrell Sep 3, 2026
6be8943
test(cache): lock cachePoint placement around a steering injection
philmerrell Sep 3, 2026
7ff13b2
feat(spa): send a follow-up into the running turn
philmerrell Sep 3, 2026
4208224
add background color theme customization
ofilson Sep 3, 2026
591e3b4
feat(artifacts): recipient UI for shared artifacts
philmerrell Sep 3, 2026
892981d
feat(chat): carry a queued follow-up through a paused turn
philmerrell Sep 3, 2026
9e40f09
Merge pull request #922 from Boise-State-Development/feature/artifact…
philmerrell Sep 3, 2026
8e710b4
Merge pull request #921 from Boise-State-Development/feature/mid-turn…
philmerrell Sep 3, 2026
582f24f
security: clear all 47 open Dependabot alerts
colinmxs Sep 4, 2026
71cc1e8
security: remediate CodeQL alerts (11 high, 20 medium, 9 note)
colinmxs Sep 4, 2026
56c4af0
Merge pull request #924 from Boise-State-Development/security/dependa…
colinmxs Sep 4, 2026
46ca3ee
chore(kaizen): weekly research scan 2026-09-04
philmerrell Sep 4, 2026
30b27de
fix(artifacts): drop the duplicate error toast and stop the card overlap
philmerrell Sep 4, 2026
6439445
Merge pull request #925 from Boise-State-Development/security/codeql-…
colinmxs Sep 4, 2026
d23920c
Merge develop into kaizen/review-2026-09-04
philmerrell Sep 4, 2026
767d97e
feat(spa): minimal-chrome shell for the shared-artifact view
philmerrell Sep 4, 2026
ead4257
Merge pull request #927 from Boise-State-Development/fix/artifact-sha…
philmerrell Sep 4, 2026
95f3959
chore(kaizen): weekly review prep 2026-09-04
philmerrell Sep 4, 2026
3da7555
Merge pull request #928 from Boise-State-Development/feature/shared-a…
philmerrell Sep 4, 2026
ccc7d47
fix(spa): render a mid-turn steer once, not once per sync tick
philmerrell Sep 4, 2026
e87cd38
feat(artifacts): revoke artifact shares when a conversation is deleted
philmerrell Sep 4, 2026
6ee9b50
Merge pull request #931 from Boise-State-Development/feature/artifact…
philmerrell Sep 4, 2026
cde6230
Merge pull request #930 from Boise-State-Development/fix/mid-turn-ste…
philmerrell Sep 4, 2026
162b125
Merge pull request #929 from Boise-State-Development/kaizen/review-20…
philmerrell Sep 4, 2026
e2c9a97
fix(artifacts): cascade must not use BatchWriteItem — it fails closed…
philmerrell Sep 4, 2026
adbf16a
Merge develop into feature/branding
ofilson Sep 4, 2026
4c0c305
Merge pull request #932 from Boise-State-Development/fix/artifact-sha…
philmerrell Sep 4, 2026
2f97767
replace genetor tests
ofilson Sep 4, 2026
ae89aa0
fix(spa): queue a follow-up typed while a turn is paused
philmerrell Sep 4, 2026
ddfcefd
Merge pull request #934 from Boise-State-Development/fix/queue-follow…
philmerrell Sep 4, 2026
af38858
fix tests
ofilson Sep 4, 2026
53a128c
style(spa): give a mid-turn steer the standard user bubble
philmerrell Sep 4, 2026
eef868f
docs(specs): record the mid-turn steering validation on dev
philmerrell Sep 4, 2026
28232e4
remove caret version
ofilson Sep 4, 2026
3344db1
Merge pull request #935 from Boise-State-Development/fix/steer-bubble…
philmerrell Sep 4, 2026
033a0ad
clean package-lock
ofilson Sep 4, 2026
d0bf14d
Merge pull request #933 from Boise-State-Development/feature/branding
ofilson Sep 4, 2026
e21e577
Merge pull request #936 from Boise-State-Development/docs/mid-turn-st…
philmerrell Sep 4, 2026
bf5ea2a
fix(spa): re-measure a user bubble instead of latching one reading
philmerrell Sep 4, 2026
3ff52f7
Merge pull request #937 from Boise-State-Development/fix/user-bubble-…
philmerrell Sep 4, 2026
147f717
test(sessions): cover the artifact-share cascade on bulk delete
philmerrell Sep 4, 2026
1a7f5ab
test(agents): prove a steer survives a turn that interrupts
philmerrell Sep 4, 2026
d232849
Merge pull request #939 from Boise-State-Development/test/steering-in…
philmerrell Sep 4, 2026
cc537c2
Merge pull request #938 from Boise-State-Development/test/bulk-delete…
philmerrell Sep 4, 2026
6e5af50
feat(artifacts): stamp user-index keys on HEAD rows ahead of the index
philmerrell Sep 4, 2026
fb39c27
Merge pull request #940 from Boise-State-Development/feature/artifact…
philmerrell Sep 4, 2026
7ee608d
refactor(fine-tuning): introduce task-type registry for multi-modal t…
philmerrell Sep 4, 2026
8d12da3
feat(fine-tuning): task-aware API and dollar-denominated quota
philmerrell Sep 4, 2026
71f8e24
docs(specs): propose per-message response feedback
philmerrell Sep 5, 2026
3e7bed3
feat(fine-tuning): image and image+text tasks in the SPA, dollar quot…
philmerrell Sep 5, 2026
eb100cf
fix(fine-tuning): exclude generative VLMs from the dual-encoder task
philmerrell Sep 5, 2026
83e2255
refactor(fine-tuning): declare the inference task signal before its r…
philmerrell Sep 5, 2026
e248588
docs(kaizen): queue response feedback for review
philmerrell Sep 5, 2026
80559aa
docs(specs): plan the GPT-5.6 prompt-caching path
philmerrell Sep 5, 2026
dfba6f3
test(fine-tuning): make the dataset tests non-optional
philmerrell Sep 5, 2026
684e682
Merge remote-tracking branch 'origin/develop' into claude/fine-tune-i…
philmerrell Sep 5, 2026
c42245a
Merge pull request #944 from Boise-State-Development/claude/fine-tune…
philmerrell Sep 5, 2026
2f1119f
fix(costs): normalize OpenAI-family token usage to disjoint buckets
philmerrell Sep 5, 2026
bb3ee13
Merge pull request #943 from Boise-State-Development/claude/gpt5-cach…
philmerrell Sep 5, 2026
fa722e9
Merge pull request #942 from Boise-State-Development/feature/response…
philmerrell Sep 5, 2026
a87d0da
style(fine-tuning): mark the selected task card with a stroke, not a …
philmerrell Sep 5, 2026
f6776c3
Merge pull request #946 from Boise-State-Development/feature/task-car…
philmerrell Sep 5, 2026
f774274
Merge pull request #945 from Boise-State-Development/feature/openai-u…
philmerrell Sep 5, 2026
1ccec17
docs(specs): subtract the cache-write bucket too in GPT-5.6 PR-1
philmerrell Sep 5, 2026
932aa8f
docs(specs): add feature-announcement system spec
philmerrell Sep 5, 2026
23690f2
Merge pull request #947 from Boise-State-Development/docs/gpt56-spec-…
philmerrell Sep 5, 2026
526e53d
Merge pull request #948 from Boise-State-Development/claude/feature-a…
philmerrell Sep 5, 2026
08c98dc
feat(models): add the bedrock-runtime OpenAI Responses transport
philmerrell Sep 5, 2026
bd3f535
feat(artifacts): add the artifact library page
philmerrell Sep 4, 2026
8b9e75a
Merge pull request #949 from Boise-State-Development/feature/bedrock-…
philmerrell Sep 5, 2026
664775c
Merge pull request #950 from Boise-State-Development/feature/artifact…
philmerrell Sep 5, 2026
480ac22
feat(artifacts): add delete and rename endpoints
philmerrell Sep 5, 2026
80d6164
fix(observability): derive the prompt-cache TTL from the serving model
philmerrell Sep 5, 2026
1c3deb4
feat(artifacts): add delete and rename to the library and artifact panel
philmerrell Sep 5, 2026
840b4a1
docs(artifacts): note the delete/rename path in the frozen schema con…
philmerrell Sep 5, 2026
bcef8e0
Merge pull request #951 from Boise-State-Development/feature/model-de…
philmerrell Sep 5, 2026
c3a0af7
Merge pull request #952 from Boise-State-Development/feature/artifact…
philmerrell Sep 5, 2026
934c626
fix(artifacts): stop reporting "Pop-up blocked" on every artifact open
philmerrell Sep 5, 2026
31bad21
feat(models): explicit prompt-cache breakpoints for GPT-5.6
philmerrell Sep 5, 2026
6843b9a
Merge pull request #953 from Boise-State-Development/fix/artifact-ope…
philmerrell Sep 5, 2026
733c2ae
Merge pull request #954 from Boise-State-Development/feature/gpt56-ex…
philmerrell Sep 5, 2026
e576781
feat(artifacts): add delete and rename to the inline artifact card
philmerrell Sep 5, 2026
5e10f3d
fix(models): ship explicit prompt caching OFF — it measured 57% more …
philmerrell Sep 5, 2026
facefc1
fix(artifacts): stop the library view toggle stretching on narrow scr…
philmerrell Sep 5, 2026
75583fe
fix(artifacts): stop the library grid footer overflowing its card
philmerrell Sep 5, 2026
af88724
Merge pull request #957 from Boise-State-Development/feature/artifact…
philmerrell Sep 5, 2026
3a6c0e5
Merge pull request #956 from Boise-State-Development/fix/gpt56-explic…
philmerrell Sep 5, 2026
05f798c
feat(artifacts): open artifacts in-app instead of depending on a pop-up
philmerrell Sep 5, 2026
309769f
Merge pull request #958 from Boise-State-Development/feature/artifact…
philmerrell Sep 5, 2026
33a98fb
fix(infra): grant bedrock:CallWithBearerToken for the bedrock-runtime…
philmerrell Sep 5, 2026
5932397
Merge pull request #959 from Boise-State-Development/fix/bedrock-runt…
philmerrell Sep 5, 2026
07f7393
fix(models): force supportsCaching on where the provider caches uncon…
philmerrell Sep 5, 2026
6725db6
docs(kaizen): stand up a prompt-caching convergence watch, fix the St…
philmerrell Sep 5, 2026
7b6d451
Merge pull request #960 from Boise-State-Development/fix/supports-cac…
philmerrell Sep 5, 2026
6b42240
Merge pull request #961 from Boise-State-Development/docs/kaizen-prom…
philmerrell Sep 5, 2026
a1e79d6
docs(specs): record the GPT-5.6 caching verification — it works, 10.6…
philmerrell Sep 5, 2026
602079a
Merge pull request #962 from Boise-State-Development/docs/gpt56-live-…
philmerrell Sep 5, 2026
6b3d688
fix(models): let Mantle models expose the caching controls
philmerrell Sep 5, 2026
4d2cea1
Merge pull request #963 from Boise-State-Development/fix/mantle-cachi…
philmerrell Sep 5, 2026
b0e5777
docs: record two findings from adding the GPT-5.6 family in dev
philmerrell Sep 5, 2026
a4fff91
docs: correct the global.* SCP finding — dev only, prod is unaffected
philmerrell Sep 5, 2026
ace468c
Merge pull request #964 from Boise-State-Development/docs/gpt56-model…
philmerrell Sep 5, 2026
ebb0587
docs: close out the prod gpt-5.4 cache-rate gap — fixed and verified
philmerrell Sep 5, 2026
a9c9962
Merge pull request #965 from Boise-State-Development/docs/gpt54-prod-…
philmerrell Sep 5, 2026
e27e92e
feat(announcements): data layer, admin CRUD, and table for feature an…
philmerrell Sep 5, 2026
8a47a81
feat(artifacts): preview the artifact on library grid cards
philmerrell Sep 5, 2026
72081a7
Merge pull request #967 from Boise-State-Development/feature/artifact…
philmerrell Sep 5, 2026
8f8ffa6
Merge pull request #966 from Boise-State-Development/feature/announce…
philmerrell Sep 5, 2026
5bd047f
feat(artifacts): recipient share inbox, dark behind a flag
philmerrell Sep 5, 2026
435524d
Merge remote-tracking branch 'origin/develop' into feature/artifact-s…
philmerrell Sep 5, 2026
b4a69b8
Merge pull request #968 from Boise-State-Development/feature/artifact…
philmerrell Sep 5, 2026
3be2ba5
feat(announcements): user-facing feed, acknowledgements, and What's N…
philmerrell Sep 5, 2026
2361b3d
feat(artifacts): All / Yours / Shared with you tabs on the library
philmerrell Sep 5, 2026
e3ed36d
Merge pull request #969 from Boise-State-Development/feature/announce…
philmerrell Sep 5, 2026
6008276
feat(artifacts): share a conversation's artifacts with the conversation
philmerrell Sep 5, 2026
8c20044
feat(announcements): admin list and form pages
philmerrell Sep 5, 2026
509deaf
feat(artifacts): render a shared conversation's artifacts for its rec…
philmerrell Sep 5, 2026
2b2f918
Merge pull request #970 from Boise-State-Development/feature/artifact…
philmerrell Sep 5, 2026
487df13
Merge pull request #971 from Boise-State-Development/feature/shared-c…
philmerrell Sep 5, 2026
13a08f0
Merge pull request #972 from Boise-State-Development/feature/announce…
philmerrell Sep 5, 2026
d7459e2
Merge pull request #973 from Boise-State-Development/feature/shared-c…
philmerrell Sep 6, 2026
06bc033
fix(announcements): submit button could never enable on the new-annou…
philmerrell Sep 6, 2026
e564d43
fix(artifacts): stop blaming a search the user never made
philmerrell Sep 6, 2026
660b0a7
Merge pull request #974 from Boise-State-Development/fix/announcement…
philmerrell Sep 6, 2026
f98479b
Merge pull request #975 from Boise-State-Development/fix/artifact-emp…
philmerrell Sep 6, 2026
1094914
feat(announcements): render the banner surface (PR-4)
philmerrell Sep 6, 2026
3f7d2d2
Merge pull request #976 from Boise-State-Development/feature/announce…
philmerrell Sep 6, 2026
b54d2d6
feat(announcements): render the modal surface with the §D8 gate (PR-5)
philmerrell Sep 6, 2026
a631f3b
Merge pull request #977 from Boise-State-Development/feature/announce…
philmerrell Sep 6, 2026
1fb3973
feat(announcements): ack funnel counters + GET /{id}/stats (PR-6 back…
philmerrell Sep 6, 2026
18d33cc
feat(announcements): show reach on the admin list (PR-6 frontend)
philmerrell Sep 6, 2026
41cb6a5
fix(announcements): float the banner instead of occupying layout
philmerrell Sep 6, 2026
69a8fc2
Merge pull request #978 from Boise-State-Development/feature/announce…
philmerrell Sep 6, 2026
e30c7e3
fix(costs): derive GPT-5.6 rates from a single-model day, not a 1000x…
philmerrell Sep 6, 2026
3568976
Merge pull request #979 from Boise-State-Development/feature/announce…
philmerrell Sep 6, 2026
9f54623
fix(costs): correct every GPT-5.6 rate — they were published in the m…
philmerrell Sep 6, 2026
a3ab6cd
feat(models): curate GPT-5.6 Sol, Terra and Luna (PR-3)
philmerrell Sep 6, 2026
8a2c371
Merge pull request #980 from Boise-State-Development/fix/gpt56-rate-d…
philmerrell Sep 6, 2026
b5cd354
feat(announcements): move the banner above the chat composer
philmerrell Sep 6, 2026
dfe4ad8
feat(announcements): put the banner on the side the composer leaves free
philmerrell Sep 6, 2026
9db5bc0
Merge pull request #981 from Boise-State-Development/feature/announce…
philmerrell Sep 6, 2026
d5cd606
feat(artifacts): add UserArtifactsIndex and backfill the keys it needs
philmerrell Sep 6, 2026
07a25dd
Merge remote-tracking branch 'origin/main' into backmerge/main-into-d…
philmerrell Sep 6, 2026
1c0063d
Merge pull request #984 from Boise-State-Development/backmerge/main-i…
philmerrell Sep 6, 2026
6a865d6
fix(sidenav): show the skeleton, not "No Chats Yet", while sessions load
philmerrell Sep 6, 2026
f36f946
feat(artifacts): default the share inbox on, with a kill switch
philmerrell Sep 6, 2026
fc9dbb5
Merge pull request #986 from Boise-State-Development/feature/artifact…
philmerrell Sep 6, 2026
0bba863
Merge pull request #985 from Boise-State-Development/fix/sidenav-sess…
philmerrell Sep 6, 2026
26913c0
Merge pull request #982 from Boise-State-Development/feature/artifact…
philmerrell Sep 6, 2026
bc32349
feat(announcements): open the full announcement from the banner text
philmerrell Sep 6, 2026
81456cd
perf(artifacts): serve the library listing from UserArtifactsIndex
philmerrell Sep 6, 2026
71b02d0
Merge pull request #987 from Boise-State-Development/feature/announce…
philmerrell Sep 6, 2026
34db9a3
fix(sessions): stop marking completed turns as interrupted
philmerrell Sep 6, 2026
2d11086
chore(sessions): backfill script for false interrupted-turn markers
philmerrell Sep 6, 2026
c576679
Merge pull request #988 from Boise-State-Development/fix/false-interr…
philmerrell Sep 6, 2026
a00a75b
fix(sessions): store displayText when the user's turn lands, not at t…
philmerrell Sep 6, 2026
15b8cd9
Merge pull request #990 from Boise-State-Development/fix/display-text…
philmerrell Sep 6, 2026
94fb647
Merge remote-tracking branch 'origin/main' into backmerge/main-into-d…
philmerrell Sep 7, 2026
76dcc37
Merge pull request #992 from Boise-State-Development/backmerge/main-i…
philmerrell Sep 7, 2026
720f142
Merge pull request #989 from Boise-State-Development/feature/artifact…
philmerrell Sep 7, 2026
233a0d1
fix(mcp-apps): keep tool-result content on app-initiated tools/call
philmerrell Sep 7, 2026
90bf7a1
fix(mcp-apps): revive a torn-down MCP session for app-initiated calls
philmerrell Sep 7, 2026
a0aff73
Merge pull request #993 from Boise-State-Development/fix/mcp-apps-pro…
philmerrell Sep 7, 2026
98d9a5c
Merge pull request #994 from Boise-State-Development/fix/mcp-apps-sta…
philmerrell Sep 7, 2026
30b80ef
Release/1.19.1
philmerrell Sep 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,23 @@ All notable changes to this project are documented in this file. Format follows

For narrative release notes written for operators and product owners, see [RELEASE_NOTES.md](RELEASE_NOTES.md).

## [1.19.1] - 2026-09-07

A patch release. Two MCP Apps defects made an App look broken while the tool behind it had really run: an app-initiated `tools/call` relayed an empty result back to the iframe, and a call made between turns hit a torn-down MCP session and came back as a 502. Both are fixed at the dispatch boundary. The artifact library listing now serves from `UserArtifactsIndex` instead of the base table, which retires the ~3x read amplification and the per-request in-memory sort. **No CDK deploy and no infrastructure change** — but the index that 1.19.0 shipped as groundwork is now on the read path, so its backfill has moved from optional to **required before deploying**.

### ⚡ Performance

- **The artifact library listing reads `UserArtifactsIndex`.** `list_for_user` queries the index (`GSI2PK=USER#{uid}`, `GSI2SK` descending) rather than the base table. HEAD and version rows share a base partition, so the old Query scanned roughly 3x the rows it returned and then date-sorted them in memory; only HEAD rows carry the GSI2 keys, so the index holds one row per artifact already newest-first. Ordering now comes from the store instead of being recomputed per request. The response still returns the whole library in one payload, paging the index internally (#989)

### 🐛 Fixed

- **App-initiated `tools/call` returned empty content to the iframe.** `_serialize_content` read the result with `getattr`, but Strands' `MCPToolResult` extends `ToolResult`, a `TypedDict` — so `call_tool_sync` returns a plain dict at runtime and the attribute lookup found nothing. The failure was silent end to end: app-api returned 200, inference-api returned 200, and the MCP server had really run the tool, so a write took effect while the App received nothing to render. Any MCP App that re-reads state after an edit appeared frozen (#993)
- **App-initiated tool calls between turns failed with an intermittent 502.** A call arriving after a turn ended resolved to a cached agent whose MCP client sessions Strands had already torn down, raising `MCPClientInitializationError` — which surfaced as `AppToolCallError(502)` in the App. It looked intermittent because a call made while the turn was still streaming found the session alive. The client is now reconnected for the duration of the call and left as it was found; a session already live belongs to an in-flight turn and is used as-is, never stopped, and overlapping calls against the same client share one revived session through a refcount (#994)

### ⚠️ Changed

- **`backfill_artifact_user_index_keys.py` now stamps undated rows instead of reporting them.** A HEAD row with no `updated_at` was previously counted and named but left unstamped, on the grounds that a fabricated timestamp would sort wrongly forever. With the index on the read path that choice would drop the artifact from a sparse index — and from its owner's library — silently and permanently. Such a row is now stamped with an empty timestamp segment (`ARTIFACT##{aid}`), which sorts below every real timestamp and so reads last, exactly where the previous in-memory sort put it. **Re-run the script if you ran the 1.19.0 version and it reported any undated rows** (#989)

## [1.19.0] - 2026-09-06

A correctness release for interrupted turns, plus the share inbox coming out of the dark. Two separate defects made a conversation misreport its own history: a completed response could be labelled **"Response interrupted"** with a Continue button, and an interrupted one could show the model-directed `<interruption_note>` in the user's own chat bubble — permanently. Both are fixed at the source rather than patched at the render. The artifact **"Shared with you" inbox now ships on by default** with a kill switch, so a fork gets the finished feature instead of having to discover a variable. Infrastructure adds `UserArtifactsIndex` to the existing `{prefix}-user-artifacts` table (one GSI operation) with a backfill for rows that predate it; nothing reads the index yet. **Requires a CDK deploy**, and two one-shot scripts are available post-deploy.
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
**An open-source, production-ready Generative AI platform for institutions**
*Built by Boise State University, designed for everyone.*

[![Release](https://img.shields.io/badge/Release-v1.19.0-6366f1?style=flat&logo=github&logoColor=white)](RELEASE_NOTES.md)
[![Release](https://img.shields.io/badge/Release-v1.19.1-6366f1?style=flat&logo=github&logoColor=white)](RELEASE_NOTES.md)
[![Nightly](https://github.com/Boise-State-Development/agentcore-public-stack/actions/workflows/nightly.yml/badge.svg)](https://github.com/Boise-State-Development/agentcore-public-stack/actions/workflows/nightly.yml)

![Python](https://img.shields.io/badge/Python-3.13+-3776AB?style=flat&logo=python&logoColor=white)
Expand Down Expand Up @@ -296,7 +296,7 @@ agentcore-public-stack/

See [RELEASE_NOTES.md](RELEASE_NOTES.md) for the full changelog, including new features, bug fixes, platform upgrades, and deployment notes for each release.

**Current release:** v1.19.0
**Current release:** v1.19.1

---

Expand Down
59 changes: 59 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,62 @@
# Release Notes — v1.19.1

**Release Date:** September 7, 2026
**Previous Release:** v1.19.0 (September 6, 2026)

---

> 🏗️ **No CDK deploy required.** No infrastructure changed in this release — `infrastructure/gsi-inventory.json` is byte-identical to `main`, and no table gains or loses an index.
>
> ⚠️ **One prerequisite carried forward from 1.19.0, now mandatory.** `UserArtifactsIndex` shipped in 1.19.0 with nothing reading it. This release puts it on the artifact library's read path. Before deploying, the index must report `ACTIVE` **and** `backfill_artifact_user_index_keys.py` must have been applied — an unstamped row is absent from a sparse index, which means an artifact missing from its owner's library. See Deployment notes.

---

## Highlights

A patch release with two MCP Apps fixes and one performance change. Both defects had the same shape — the tool behind an App really ran, and the App showed nothing for it. One relayed an empty result to the iframe because the MCP client returns a dict where the code expected an object; the other hit a torn-down MCP session on any call made between turns and surfaced as an intermittent 502. Separately, the artifact library listing moves off the base table onto `UserArtifactsIndex`, retiring the read amplification and the per-request sort that the index was added to remove.

## 🐛 Bug fixes

- **An MCP App could issue a tool call, have it succeed, and render nothing.** `_serialize_content` read the tool result's content with `getattr`, but Strands' `MCPToolResult` extends `ToolResult` — a `TypedDict`, so what `call_tool_sync` returns at runtime is a plain dict and the attribute lookup found nothing. Every app-initiated `tools/call` therefore relayed `content: []`. Nothing in the chain reported a problem: app-api returned 200, inference-api returned 200, and the MCP server had genuinely run the tool, so a write took effect while the App received nothing to show for it — any App that re-reads state after an edit simply appeared frozen. The dict shape is now handled alongside the attribute one, mirroring the branch `_is_error` already had. The existing dispatch-test fakes were objects carrying a `.content` attribute, which is exactly why the attribute-only path looked correct; the new test uses the dict shape the client really returns (#993)
- **App-initiated tool calls between turns failed with a 502 that looked intermittent.** Such a call arrives after the turn that built the agent has ended. `routes.py` rebuilds the conversation's agent, but with `cache_write=False` it reads a *cached* agent — and Strands tears that agent's MCP client sessions down when its turn ends. `_resolve_client` then handed back a client whose session was no longer running, `call_tool_sync` raised `MCPClientInitializationError`, and that became an `AppToolCallError(502)` reaching the App as a Bad Gateway. The intermittence was the tell: a call made while the turn was still streaming found the session alive and worked. The call is now wrapped so the client is reconnected for its duration and left as it was found. A session already live belongs to an in-flight turn and is used as-is, never stopped here, and overlapping app calls against the same client share one revived session through a refcount, so no call has the connection closed underneath it. The fix is deliberately kept at the dispatch boundary — resolving the live client from the freshly built agent is the deeper fix, but it reaches into how tool providers are held and cached (#994)

## ⚡ Performance

**The artifact library listing now serves from `UserArtifactsIndex`.** 1.19.0 added the index and deliberately left it unread; this release switches the read over. `list_for_user` queries `GSI2PK=USER#{uid}` with `GSI2SK` descending instead of querying the base table.

The base partition holds both HEAD and version rows, so the old Query spanned roughly three times the rows it returned and then date-sorted them in memory on every request. Only HEAD rows carry the GSI2 keys, so the index holds one row per artifact and already in newest-first order — both the amplification and the sort go away, and the ordering comes from the store rather than being recomputed per call.

The endpoint still returns the whole library in one response, paging the index internally. Exposing pagination is a larger change than it looks: search and the type filter live in the SPA today, and a filter that can only see the loaded page is worse than no filter because it looks authoritative — both would have to move server-side in the same change. The index makes that possible whenever it is wanted.

### Two things this turned up

**The library tests were passing against the old code path.** The test fixture declared no `GlobalSecondaryIndexes` at all, so a suite that should have required an index went green without one. The fixture now declares it, which makes moto raise `ResourceNotFoundException` if the query ever stops using the index — the tests exercise the index rather than silently falling back.

**Undated rows would have vanished.** A sparse index omits any HEAD row without `GSI2PK`, permanently and silently. Rows predating `updated_at` cannot carry a real timestamp, and the original backfill reported them rather than stamping them — correct while nothing read the index, and a silent data-loss path the moment something did. They are now stamped with an empty timestamp segment (`ARTIFACT##{aid}`): not a fabricated time, but a key that sorts below every digit and so reads last when the index is read descending — exactly where the old in-memory sort put it. Neither dev nor prod holds such a row today; this is the defensive branch, and it preserves a contract `test_undated_legacy_rows_are_returned_and_sort_last` already asserted.

### Test Coverage

Backend suites for app_api, architecture and the artifact writer pass at 942 tests, with the library fixture now index-backed. The MCP Apps fixes add dispatch tests using the dict result shape the MCP client actually returns and covering session revival, reuse of an already-live session, and refcounted overlap.

## 🚀 Deployment notes

**No CDK deploy is required** — this release changes no infrastructure. `backend.yml` and `frontend-deploy.yml` are sufficient.

**Before deploying, confirm the 1.19.0 index groundwork is complete.** The artifact library now reads `UserArtifactsIndex`, so two things that were optional last release are prerequisites now:

1. The index reports `ACTIVE` — `UPDATE_COMPLETE` on the stack is not the same thing:

```bash
aws dynamodb describe-table --table-name <prefix>-user-artifacts \
--query 'Table.GlobalSecondaryIndexes[].{Name:IndexName,Status:IndexStatus}'
```

2. `backend/scripts/backfill_artifact_user_index_keys.py` has been applied. The index is sparse: an unstamped HEAD row is *absent* from it, not stale, so an artifact written before 2026-09-04 and never backfilled disappears from its owner's library after this deploy. The script is dry-run unless given `--apply`.

**Re-run the backfill if the 1.19.0 version reported any undated rows.** That version counted rows with no `updated_at` and left them unstamped; this version stamps them with an empty timestamp segment so they sort last instead of dropping out. A re-run is idempotent and skips rows already stamped.

---

# Release Notes — v1.19.0

**Release Date:** September 6, 2026
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.19.0
1.19.1
2 changes: 1 addition & 1 deletion backend/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "agentcore-stack"
version = "1.19.0"
version = "1.19.1"
requires-python = ">=3.10"
description = "Multi-agent conversational AI system with AWS Bedrock AgentCore"
readme = "README.md"
Expand Down
40 changes: 29 additions & 11 deletions backend/scripts/backfill_artifact_user_index_keys.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,12 @@
left alone.
* **Never resurrects a deleted row.** ``attribute_exists(SK)`` on every
update, matching the writer's own write-back rule.
* **Reports what it cannot fix** rather than guessing — a HEAD row with
no ``updated_at`` is counted and named, not stamped with a fabricated
timestamp that would sort wrongly forever.
* **Encodes a missing ``updated_at`` rather than inventing one.** Such a
row is stamped with an empty timestamp segment
(``ARTIFACT##{aid}``), which sorts below every real timestamp and so
reads last — where the previous in-memory sort put it. Leaving it
unstamped would drop the artifact from a sparse index, and from its
owner's library, silently.

Run against dev first, then prod::

Expand Down Expand Up @@ -113,16 +116,27 @@ def plan_row(item: Dict[str, Any]) -> Dict[str, Any] | None:
return {"skip": f"unexpected PK {pk!r}"}
if not artifact_id:
return {"skip": "no artifact_id attribute"}
if not updated_at:
# Deliberately not falling back to created_at or "now": GSI2SK is
# the sort key the library orders by, and a fabricated timestamp
# would order this artifact wrongly for the rest of its life.
# Better to name it and let a human decide.
return {"skip": "no updated_at attribute"}

# A row with no `updated_at` is stamped with an EMPTY timestamp
# segment, not a fabricated one. Two things make that the right
# answer rather than a fudge:
#
# * Leaving it unstamped would drop the artifact out of a sparse
# index — and so out of its owner's library — permanently and
# silently. Dropping somebody's oldest artifacts is worse than
# showing them undated.
# * "ARTIFACT##{aid}" sorts BELOW every real timestamp ("#" < any
# digit), so read descending it lands last — exactly where the
# old in-memory sort put undated rows. It encodes "no timestamp"
# honestly instead of inventing one that would sort wrongly
# forever.
#
# Neither dev nor prod had such a row when this was written; this is
# the defensive branch, and it preserves a contract the library's
# tests already assert.
return {
"gsi2pk": pk, # GSI2PK is exactly the base PK — USER#{user_id}
"gsi2sk": f"ARTIFACT#{updated_at}#{artifact_id}",
"undated": not updated_at,
}


Expand All @@ -145,7 +159,11 @@ def backfill(table: Any, apply: bool) -> Dict[str, int]:
continue

logger.info(
"stamp %s %s -> GSI2SK=%s", item.get("PK"), sk, plan["gsi2sk"]
"stamp %s %s -> GSI2SK=%s%s",
item.get("PK"),
sk,
plan["gsi2sk"],
" (no updated_at — sorts last)" if plan.get("undated") else "",
)
if not apply:
stats["stamped"] += 1
Expand Down
Loading