Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2291 commits
Select commit Hold shift + click to select a range
1a5a77d
Merge pull request #880 from Boise-State-Development/feature/jwt-role…
philmerrell Aug 26, 2026
97d743d
Merge pull request #879 from Boise-State-Development/fix/attachment-p…
philmerrell Aug 26, 2026
61852fb
feat(marketplace): submitting an agent makes it public, with a notice
philmerrell Aug 26, 2026
5d0bc2c
feat(marketplace): let admins read, test-drive and decline a submission
philmerrell Aug 26, 2026
95f89f8
Merge pull request #881 from Boise-State-Development/feature/submit-d…
philmerrell Aug 26, 2026
3775a45
Merge pull request #882 from Boise-State-Development/feature/marketpl…
philmerrell Aug 26, 2026
30d486a
fix(marketplace): make the review test drive big enough to use
philmerrell Aug 26, 2026
8d9b418
Merge pull request #883 from Boise-State-Development/fix/marketplace-…
philmerrell Aug 26, 2026
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
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
0624ce3
Release/1.19.0
philmerrell Sep 6, 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
15 changes: 7 additions & 8 deletions .github/workflows/platform.yml
Original file line number Diff line number Diff line change
Expand Up @@ -99,14 +99,13 @@ jobs:
# http://localhost:4200 for a local SPA pointed at this deployment.
# Empty on prod. Mirrors CDK_MCP_SANDBOX_EXTRA_FRAME_ANCESTORS below.
CDK_ARTIFACTS_EXTRA_FRAME_ANCESTORS: ${{ vars.CDK_ARTIFACTS_EXTRA_FRAME_ANCESTORS }}
# "Shared with you" inbox on the artifact library. Default OFF,
# opt-in — the reverse of the flags above, because the surface ships
# ahead of the product decision about it. Unset resolves to an empty
# string, which config.ts treats as off; set the
# `CDK_ARTIFACT_SHARE_INBOX_ENABLED` variable to "true" in an
# environment to reveal it there. The fan-out rows the inbox reads are
# written regardless of this flag, so turning it on shows a complete
# inbox with no backfill.
# "Shared with you" inbox on the artifact library. Default ON with a
# kill switch, like the flags above: unset resolves to an empty string,
# which config.ts treats as "use the default (on)". Set the
# `CDK_ARTIFACT_SHARE_INBOX_ENABLED` variable to "false" in an
# environment to keep it dark there. The fan-out rows the inbox reads
# are written regardless of this flag, so toggling it never needs a
# backfill.
CDK_ARTIFACT_SHARE_INBOX_ENABLED: ${{ vars.CDK_ARTIFACT_SHARE_INBOX_ENABLED }}
CDK_FRONTEND_CERTIFICATE_ARN: ${{ vars.CDK_FRONTEND_CERTIFICATE_ARN }}
# MCP Apps sandbox-proxy origin (mcp-sandbox.{domain}). Without the
Expand Down
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,30 @@ 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.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.

### 🚀 Added

- **Open the full announcement from the banner.** The banner text is now a control that opens the announcement's modal, so a notice too long for one line is readable without hunting for the What's New panel (#987)
- **`UserArtifactsIndex`** on the existing `{prefix}-user-artifacts` table (`GSI2PK=USER#{uid}`, `GSI2SK=ARTIFACT#{updated_at}#{aid}`), sparse over HEAD rows, plus `scripts/backfill_artifact_user_index_keys.py` to stamp rows written before 2026-09-04. The artifact writer stamps the keys on both write paths. The library listing still reads the base table in this release (#982)
- **`scripts/backfill_false_interrupted_markers.py`** — one-shot cleanup for the stale interrupted-turn markers left by the defect below. Dry-run by default; clears only `navigated_away` markers written more than 900s after the session's last message (#988)

### ⚠️ Changed

- **The artifact "Shared with you" inbox now defaults ON** with a kill switch (`ARTIFACT_SHARE_INBOX_ENABLED=false` to disable), reversing the opt-in default it shipped with in 1.18.0. The surface landed before the product decision did; that decision has now been made, and an opt-in default would silently cost every fork a finished feature (#986)

### 🐛 Fixed

- **Completed responses were being labelled "Response interrupted"**, with a Continue button that would resume an already-finished answer. The SPA released a session's `AbortController` only on the Stop button, never on normal stream teardown, so every finished turn still looked in-flight for the life of the tab and the next refresh or tab close attributed a `navigated_away` interruption to it — one departure marking every session streamed in that tab. The controller is now released on teardown, and `POST /sessions/{id}/interrupt` verifies a turn is genuinely in flight against the session's single-flight lease before recording a departure (#988)
- **An interrupted turn showed the model-directed `<interruption_note>` in the user's own chat bubble.** `displayText` — the clean copy of what the user typed — was written only by the stream coordinator's success path, so any turn that was stopped, dropped, or errored left the augmented prompt as the only text the UI could render. It is now written on `MessageAddedEvent`, when the user's message enters history and before the model call, so every exit path has it. Affected every prompt augmentation (RAG context, attachment guidance, MCP App context), not just interruption notes, and every model (#990)
- **The sidebar showed "No Chats Yet" while sessions were still loading.** The loading test read `value() === undefined`, but the resource short-circuits to `null` on the ordinary cold-start path — `SessionService` is constructed during `APP_INITIALIZER` before the BFF bootstrap resolves — and `reload()` preserves that `null` through the real fetch (#985)

### 🏗️ Infrastructure

- New `UserArtifactsIndex` GSI on `{prefix}-user-artifacts`. **One** index operation on an existing table, within the DynamoDB `UpdateTable` limit; `infrastructure/gsi-inventory.json` records it (#982)

## [1.18.0] - 2026-09-06

Artifacts stop being a per-conversation curiosity and become a place users go. There is a library at `/artifacts` with previews, rename, delete and an in-app viewer; artifacts can be **shared** with named people or the whole tenant; and sharing a conversation now shares the artifacts in it, which previously left the recipient staring at nothing where the owner saw cards. Alongside it, two more surfaces the platform had no way to do at all: **feature announcements** — an admin-authored What's New feed with a banner, a modal and per-announcement reach stats — and **mid-turn steering**, which lets a follow-up typed while the model is still working land inside the running turn at the next tool boundary instead of interrupting it. The SPA gains a **single-file rebranding surface** so a fork can change app name, greeting, logo and the entire color system without touching a component. On the cost side the GPT-5.6 family (Sol / Terra / Luna) is curated with verified rates, and every published GPT-5.6 rate in the catalog is corrected. **Requires a CDK deploy** (new `{prefix}-announcements` table, new IAM grants); no GSI operations on any existing table.
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.18.0-6366f1?style=flat&logo=github&logoColor=white)](RELEASE_NOTES.md)
[![Release](https://img.shields.io/badge/Release-v1.19.0-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.18.0
**Current release:** v1.19.0

---

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

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

---

> 🏗️ **CDK deploy required.** One new GSI — `UserArtifactsIndex` on the **existing** `{prefix}-user-artifacts` table. That is **one** index operation on one existing table, within DynamoDB's one-GSI-per-`UpdateTable` limit, so this release does not need splitting. Confirm the index reports `ACTIVE` before considering the deploy done — CloudFormation reporting `UPDATE_COMPLETE` is not the same thing.
>
> ⚙️ **`CDK_ARTIFACT_SHARE_INBOX_ENABLED` changes meaning.** It was opt-in (only `"true"` enabled the inbox); it is now a kill switch (unset or empty means **enabled**, only `"false"` disables). An environment that never set it **gains the "Shared with you" tab on this deploy**. Set it to `"false"` before deploying to keep that surface dark.
>
> 🧹 **Two optional one-shot scripts, both dry-run by default.** Neither is required for the deploy to be correct; see Deployment notes.

---

## Highlights

This release makes a conversation stop misreporting its own history. Two unrelated defects were doing it: a response that finished normally could be labelled **"Response interrupted"** with a Continue button that would resume an already-complete answer, and a response that genuinely *was* interrupted could show the model-directed `<interruption_note>` — text written for the model, not the user — inside the user's own chat bubble, permanently. Both are fixed where they originate rather than papered over at the render layer. Alongside them, the artifact **"Shared with you" inbox now ships on by default** with a kill switch, and `UserArtifactsIndex` is added to the artifacts table as groundwork with nothing reading it yet.

## Interrupted turns now tell the truth

Two independent bugs, both surfacing as a conversation describing itself incorrectly after an interruption.

**A completed turn could claim it was interrupted.** The SPA creates one `AbortController` per streaming request and used to release it only when the user clicked Stop — never on normal stream teardown. `streamingSessionIds()` reads exactly that controller to decide which turns a page departure interrupted, so after any turn that finished on its own, the session still looked in-flight for the rest of the tab's life. The next refresh, tab close, or cross-document navigation then attributed a `navigated_away` interruption to a finished answer, and a single departure marked *every* session that tab had ever streamed. On the next load the conversation showed "Response interrupted" and offered Continue, which would spend a turn resuming a response that had already ended.

**An interrupted turn could show the note meant for the model.** When a turn is interrupted, the next turn's prompt carries an `<interruption_note>` telling the model what happened. That note is deliberately part of persisted history — it is an honest record of what the model read — and the UI is supposed to render `displayText`, the clean copy of what the user typed, in its place. `displayText` was written by a single call site at the end of a *successful* turn, so a turn that was stopped, dropped, or errored never wrote one and the augmented prompt became the only text available to render. The failure concentrated where it was most visible: a turn only carries an interruption note because the *previous* turn was interrupted, so notes rode disproportionately on turns likely to be interrupted themselves.

### Backend

- `apis/app_api/sessions/routes.py` — `POST /sessions/{id}/interrupt` now verifies a turn is genuinely in flight against the session's single-flight lease before recording `navigated_away`. `user_stopped` is deliberately ungated: the Stop button only exists while streaming, and the same request arms distributed cancellation, which must still reach a turn whose lease read fails open.
- `agents/main_agent/session/hooks/display_text.py` — new `DisplayTextHook` writes `displayText` on `MessageAddedEvent`, when the user's message enters history and before the model call, so every later exit path already has it. Not every role-`user` message is the user: tool results carry that role, and Strands prepends a synthetic tool-result message ahead of the prompt when history ends on a dangling `toolUse` — precisely what an interrupted tool turn leaves behind — so content carrying `toolResult`/`toolUse` is skipped.
- `agents/main_agent/streaming/stream_coordinator.py` — arms the hook at the head of every turn, unconditionally including to `None`, because the agent instance is cached across turns. Its own end-of-turn write remains as a backstop for callers with no hook and for a failed write.

### Frontend

- `session/services/chat/chat-state.service.ts` and `chat-http.service.ts` — a session's controller is released on stream teardown, identity-checked so a superseded stream's late close cannot clear the controller of the stream that replaced it.

### Test Coverage

19 new backend tests across the hook and the coordinator's arming/backstop seam, plus SPA specs covering controller release, the identity guard, and the lease-gated and ungated interrupt paths.

## 🐛 Bug fixes

- **The sidebar said "No Chats Yet" while sessions were still loading**, showing an empty-state message to users who had conversations. The loading test read `value() === undefined`, but the sessions resource short-circuits to `null` on the ordinary cold-start path — `SessionService` is constructed during the `APP_INITIALIZER` pass, before the BFF bootstrap promise resolves — and `reload()` preserves that `null` through the real fetch, so the skeleton never rendered (#985)

## ⚠️ Changed

- **The artifact "Shared with you" inbox defaults on.** `ARTIFACT_SHARE_INBOX_ENABLED` was opt-in when the surface shipped in 1.18.0, because the surface landed before the product decision about it did. That decision has since been made and the inbox went live; leaving the default opt-in would mean every institution forking this repository silently loses a finished feature and has to discover a variable to get it back. `"false"` still turns it off (#986)

## 🏗️ Infrastructure

- **`UserArtifactsIndex`** on the existing `{prefix}-user-artifacts` table — `GSI2PK=USER#{uid}`, `GSI2SK=ARTIFACT#{updated_at}#{aid}`, sparse over HEAD rows. The artifact writer stamps both keys on both of its write paths. **Nothing reads the index in this release**; the library listing still serves from the base table, so the index is groundwork and can be deployed and backfilled without any user-visible change (#982)

## 🚀 Deployment notes

**A CDK deploy is required**, and one existing table gains one index. Verify it before moving on:

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

`UPDATE_COMPLETE` on the stack does not mean the index is usable — wait for `ACTIVE`.

**Check `CDK_ARTIFACT_SHARE_INBOX_ENABLED` before deploying.** Its default inverted: an environment that never set it gains the "Shared with you" tab. Set it to `"false"` first to keep that surface dark.

**Two optional one-shot scripts**, both dry-run unless given `--apply`:

- `backend/scripts/backfill_artifact_user_index_keys.py` — stamps `GSI2` keys onto artifact rows written before 2026-09-04. The index is sparse, so unstamped rows are absent from it rather than stale. Nothing reads the index yet, so this can run any time after it reports `ACTIVE` — but it must run before anything does.
- `backend/scripts/backfill_false_interrupted_markers.py` — clears interrupted-turn markers left by the defect above. It only touches `navigated_away` markers written more than 900s after the session's last message, which no interruption could have produced (the stream times out at 600s). Markers self-clear at the start of that session's next turn, so this only matters for conversations nobody returns to.

---

# Release Notes — v1.18.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.18.0
1.19.0
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.18.0"
version = "1.19.0"
requires-python = ">=3.10"
description = "Multi-agent conversational AI system with AWS Bedrock AgentCore"
readme = "README.md"
Expand Down
Loading