Changelog
Every crewkit CLI release
Every released version of the crewkit CLI, with the features and fixes that shipped in it. Subscribe with RSS.
0.9.5
CompareFeatures
Bug Fixes
- api: a duplicate whose item is gone is refused, never an error#3827cf103c4
- api: add the one-off third-party hold pass, dry run by default#33659fb6a20
- api: approve requires project_ids, and a confirm retires proposals naming the item as target#3457e13270b
- api: approve takes no item lock before confirm! or dismiss!, and tests each row outcome#3457716251a
- api: bind a triage approval to the proposal the person read#38279dfde22
- api: bind a triage approval to the proposal the person read#382720612f4
- api: hold resident and offboarded-org edges in the hold pass#336592b8581
- api: keep the new rate rows hyphen-only and an unpriced admin chat estimate nil#38243b24cc0
- api: one-off third-party hold pass and the DSAR ruling pin#336597aea88
- api: price Fable 5.2 and correct the rate rows Anthropic's pricing page contradicts#38246d4bdee
- api: price Fable 5.2 and correct the rate rows Anthropic's pricing page contradicts#38246fe6396
- api: rotate a changed proposal's id in the model and leave unfit duplicates out#382797d8f75
- api: the triage grant is a browser-only, audited change, and approve sees the approver's projects#34575e65f55
- cli: a 422 feedback_off on triage keeps its own guidance#3363a8390cf
- cli: a panicked transcript parse keeps the counted-message set#33637ce69b1
- cli: build the vault's crypto without OpenSSL so macOS installs launch#3930c34c2c5
- cli: build the vault's crypto without OpenSSL so macOS installs launch#39301c67442
- cli: drain #3363 round 4 (CODEOWNERS, git_in save test, triage 422, counted set, contact row)9e47388
- cli: skip a transcript poll with no new bytes before copying the set#336338de2c7
- dashboard: approving triage refreshes the project Feedback tab through useOrgWrite#345798a58c5
- dashboard: drain #3364 and #3367 rolling findings844fc1b
- e2e: assert the full /changelog release list and anchor the version#3364d3a31d5
- e2e: derive the /changelog prerender version from the changelog source#33641e77eb8
- e2e: derive the /changelog prerender version from the changelog source#336436db3fd
- sessions: name the check and the session when a per-model split is refused#38229f3a230
- sessions: show the gateway's per-model split for the whole conversation#3822256e1e4
- sessions: show the gateway's per-model split for the whole conversation#38224e5d558
0.9.4
CompareFeatures
- api: passkey step-up on owner-only feature-flag writes, with kill-switch alerts#32259ab6cb0
- api: require a fresh passkey for owner-only flag writes and alert on kill switches#3225f21a770
- api: serve a conversation's held count and release capability#34290fdf8ad
- ci: compare the API's redactor with the crate's at one ref#3362657aa43
- ci: run the redaction differential over the API's redactor too#3362909a2b2
- cli: remember a repository's project choice per Account#3517abee521
- cli: remember a repository's project choice per Account#3517ec3a8af
- dashboard: add a turn timeline to the conversation pagec6b10a3
- dashboard: add the conversation turn timeline playerc2df774
- dashboard: add the turn timeline stories6c4029a
- dashboard: ask for a passkey sign-in when an owner-only flag write needs step-up#32250ca17b4
- dashboard: build the turn timeline's step model, layout and playback52ffba5
- dashboard: let a manager release held third-party content from the conversation view#34299ea5722
- dashboard: let a manager release held third-party content from the conversation view#34290efd5d2
- dashboard: open the turn timeline from the transcript7f3cbd2
- dashboard: read the conversation outline for the turn timeline498b78a
- sessions: record reasoning effort per turn and per Task#33377e8afa8
- sessions: record reasoning effort per turn and per Task#3337f42ab89
- sessions: send each turn's and each Task's reasoning effort#3337d85029b
- sessions: split agent cost by model and effort, one effort normaliser#3337b3da54f
Bug Fixes
- api: a CLI device token cannot read a Visitor's name, email or message from the Inbox#3362bbbb893
- api: a CLI device token cannot read a Visitor's name, email or message from the Inbox#33623a9142e
- api: a single-share render reads a held summary at the caller's floor#33627aad01b
- api: account deletion erases the person's waitlist entry#326583ce2cc
- api: account deletion erases the person's waitlist entry#32656b2b524
- api: alert on legacy kill-switch flips and notify each owner separately#3225bf0f805
- api: bind the analysis claim's ids and keep it out of the query cache#336249124c0
- api: build the unfolded-email predicate once as a frozen constant#3274958f77b
- api: cap the Bitbucket webhook body before the signature check#353546f829c
- api: claim analysis rows once and preload held threads on lists#3362d4d5c44
- api: drain the API rolling findings, round 3#3362f88d726
- api: drain the api rolling ticket for promotion 11#33627e06653
- api: drain the API rolling-findings ticket, second pass#33620a98f22
- api: drop a repeat turn's client cost and price a keyless turn once#336222c7a5b
- api: end a hung-up Session link stream instead of freeing its slot under it#3585774f85d
- api: erase only proven waitlist addresses; tighten the backfill#32655e1c019
- api: erasure's live-holder exclusion covers every held address; sweep accounts erased before #3266#327486127cf
- api: fold the erasure address set in SQL; report unfolded account emails#3274bcacf1e
- api: free a Session link stream slot when its stream ends#35855a19bdf
- api: free a Session link stream slot when its stream ends#3585ffb75e0
- api: gate-3 fixes for the promotion 6 audit rows#33515493b06
- api: hold a result whose stored call name was cut or CLI-redacted#3362e74ac50
- api: keep a committed kill-switch flip at 200 when the owner lookup fails#322598c98c8
- api: keep a pipe failure's own error, and restate the release lock test#35852e119fc
- api: key Bitbucket deliveries per integration and log the refusal#339233e850f
- api: match a hard-deleted workspace's audit rows only on rows the person wrote#3327dba5308
- api: match a hard-deleted workspace's audit rows only on rows the person wrote#3327b3175a9
- api: match waitlist entries with both sides folded in SQL#32652c5a1cc
- api: name the failed Bitbucket header in the refusal log#336235d47a8
- api: narrow the CSP's https: wildcard in default, style, img and font-src#33348258c91
- api: narrow the CSP's https: wildcard in default, style, img and font-src#3334710f464
- api: never price a turn naming its message from a client cost#3362ee0431c
- api: pin the analysis submitter's concurrency duration to the schedule#3362a2f51a8
- api: pin the erased-admin namesake residual and correct the erase comments#3327cf68faf
- api: preload held counts on search and floor them for withheld readers#3429a8c0604
- api: promotion 6 audit fixes, rows A-G#33516d565ab
- api: promotion 6 audit fixes, rows A-H#33519178bed
- api: re-check the egress gates over claimed analysis rows#33620582707
- api: re-check the egress gates over claimed analysis rows#336220d8935
- api: refuse a Bitbucket event key outside Bitbucket's own set#33623cff856
- api: refuse a Bitbucket webhook with no X-Request-UUID instead of a random id#3392d44ea88
- api: refuse a Bitbucket webhook with no X-Request-UUID instead of a random id#3392c1df774
- api: refuse a Bitbucket X-Event-Key outside the documented set#3362daa22eb
- api: reinstall! is test-only and drops nothing when its install fails#33673951955
- api: report 2xx pulls as success and code bugs as internal errors#34396859742
- api: report a 2xx note-taker pull as success, not a network error#34394319b19
- api: serialize third-party release with ingestion, classify stored call names#3362070f618
- api: state the pull-client retry_after rule, not its history#343916b8b62
- api: stop reporting pull-client bugs as retryable network errors#343947915ec
- api: surface the Tika ipopt_drops counter and alert on a rise#3427878ec6b
- api: the Inbox's confirm, dismiss and erase also ask for the browser's own pair#33621a1bb5a
- api: the sweep's start log line carries the unfolded-email count#3274da6b50d
- api: treat every socket SystemCallError as transport in the pull client#3439177c521
- auth: a browser pair is never the CLI's bound session#34086e50f2e
- auth: a device-flow CLI token no longer passes the passkey step-up#3408196bb27
- auth: a device-flow CLI token no longer passes the passkey step-up#340874907fa
- auth: claim consent, device approval and first device take only their own pair#34499e8fd1c
- auth: email change, export and SSO link refuse a device-flow token#34492125ad9
- auth: email change, export, SSO link and claim consent refuse a device-flow token#34492a8e0cf
- ci: count cross-engine changes with both engines' markers made one token#33677b5e1a5
- ci: drain #3367's cross-engine differential and session-link sign-in rowsd08f741
- ci: drain the docs-ci rolling findings#33676119b80
- ci: name the cross-engine change rule and test it per engine#33678f01dd4
- ci: print a crashed redactor's stderr in the differential#3362fce0a18
- ci: refuse a partial Ruby extraction in the redaction differential#3362e7802a2
- ci: run the API redactor as production does in the differential#3362dbb7914
- cli: a Full contact entry whose key will not open withdraws too#355011f0f2e
- cli: a login's first device ignores .agent/config.yml entirely, and the e2e login checks its org#3573a2c217b
- cli: a superseded code redeem stops waiting instead of leaving the Room#355013fbd77
- cli: a superseded code redeem stops waiting instead of leaving the Room#3550f278979
- cli: allow the redeem wait's argument count#355098dc521
- cli: ask which organization when the device check cannot tell#33638adeb8c
- cli: build the refused-key hint from closed parts only#3550ca946ae
- cli: check trust-root key fingerprints against an allowlist#336341ea74c
- cli: drain #3363 rows C13-C15, sidechain usage, origin, probe fingerprints, which-org#3363ec49bc9
- cli: end an unreaped push's process group on drop, and share the group kill#332653ab21c
- cli: gate-3 fixes for the organization_slug offer check#3363ccc0079
- cli: give an unattended push its own ssh and https stall limits#3326402ee1f
- cli: keep debug assertions out of release builds' workflows, actions and cargo config#3363fc2dd3e
- cli: keep debug assertions out of release workflows#33638c9b512
- cli: kill git_out_within's process group on timeout#3326bc8fac0
- cli: leave sidechain usage off the parent transcript's turns#33636dec0ad
- cli: log a Full contact withdrawal that failed, by its code only#355038f630f
- cli: log a Full contact withdrawal that failed, by its code only#3550d8671e8
- cli: minimal capture sends no commits or diff counts at session end#3350949a859
- cli: minimal capture sends no commits or diff counts at session end#335093003b5
- cli: minimal capture sends nothing derived from cwd, and drops team and custom agent names#3309c91863c
- cli: name a past-due DPA on the Ask tools, not a closed Ask#317326222bf
- cli: name a past-due DPA on the Ask tools, not a closed Ask#3173db40ccf
- cli: name the --org bound and see split origin reads#33634b70865
- cli: never cache a resolution the remembered project choice picked#35177bc1fc1
- cli: never reuse a redeem turn after its key is removed#3550a77abce
- cli: never reuse a redeem turn after its key is removed#35505b32f17
- cli: one offer check for organization_slug, verify workspaces, resolve once#3363ef88829
- cli: org override chooses among offered orgs; cache per Account#3363fc828fe
- cli: point the capture_mode CLOSED needle at the renamed format arg#3356cba48c1
- cli: point the capture_mode CLOSED needle at the renamed format arg#335656b8fd1
- cli: probe the release binary for the link test host#3363b552530
- cli: read the origin from the repository's own config only#3363883e8b7
- cli: route every cwd-derived report through one capture-mode gate#33509e14df6
- cli: route resources' org override through the one offer check#3363602d1f5
- cli: say a failed withdrawal's cause only as a closed code#35501aa13f9
- cli: status keeps a folder-detection error and names the org it opts in to#35526ec7223
- cli: status names an unreadable folder instead of pointing at auth#35521dc898c
- cli: status names an unreadable folder instead of pointing at auth#3552bca0376
- cli: status reads Full contact in the folder's org, as device list does#3552f661c4f
- cli: status shares resolve_org's match rule, logs an unresolved org#33636bdb895
- cli: supersede a code redeem only by a newer claim of its Room#35502062639
- cli: tag Sentry with the resolved org, one org_slug wording#33635ef392d
- cli: take gate 3's findings on the #3363 drain#33631af32e9
- cli: test both override branches; sweep every unkeyed cache file#33631ad35ba
- cli: test both override branches; sweep every unkeyed cache file#3363ecbd1d2
- cli: test every admission's withdrawal and name its next step#3550f40dd9d
- cli: verify a join's Room key under the Room id, not the typed ref#35502b9d80f
- cli: write remembered project choices atomically and log unreadable files#3517c48076d
- dashboard: build the plane read token path through orgPath#336479c2fa9
- dashboard: clear the step-up alert on the next write and name every non-passkey sign-in#32257d842c1
- dashboard: close gate-3 findings on the route id guard#3512149794a
- dashboard: close gate-3 findings on the Sentry scrub and the path sentinel#3512d45fd0a
- dashboard: correct the timeline's pure modules after reviewdc2acdb
- dashboard: drain the dashboard rolling findings#336426f0434
- dashboard: fall back to elapsed time on the timeline, never a token total30b9ae7
- dashboard: gate and encode ?turn= deep links, keep a held task's prompt#336439c3cf5
- dashboard: gate and encode ?turn= deep links, keep a held task's prompt#33648241131
- dashboard: give the timeline shape at density and keep it inside the page7caf51c
- dashboard: guard the feedback screenshot path and pin every API path id#3512cb24b0b
- dashboard: guard the seek fallback and let a deep link be followed again40fcd06
- dashboard: keep API endpoint names and drop plane-read spans in Sentry#33640c2ed2d
- dashboard: keep only allowed request headers on server Sentry events#3512083caa5
- dashboard: keep only allowed request headers on server Sentry events#35129e4b5ce
- dashboard: keep the playback clock across live appends and pause on any scroll562a499
- dashboard: keep transcript text out of analytics autocapture5c126e7
- dashboard: make transcript seeks cancellable, bounded and once-only8a26a88
- dashboard: mask all element text and attributes in PostHog autocapture#3507ef77d06
- dashboard: mask all element text and attributes in PostHog autocapture#3507efc4b5f
- dashboard: one timeline cost rule and density-weighted marks8f1a37b
- dashboard: pause timeline playback only on the reader's own scrollingb6d235d
- dashboard: pin per-layer mark dedupe with a matched prompt beside a dimmed one4d91149
- dashboard: put PostHog in the EU and make three subprocessor lists agree#3160b47ebda
- dashboard: record links to other origins only as external in PostHog#3507ea69177
- dashboard: refuse route ids that would change the API endpoint#3512f9c7fd4
- dashboard: report each API refusal reason to Sentry once per page load#3364ced246c
- dashboard: report org refusals and send page URLs to Sentry as templates#351221df95b
- dashboard: review the device-verify ?code= strip as a URL-token reader#3166a549214
- dashboard: route every API builder id through segment and orgPath#3512d0f8eb8
- dashboard: say the timeline strips ?turn= as it seeks, in the guard entrye66f441
- dashboard: settle, render and announce the timeline player correctly572987b
- dashboard: share one release mutation across held spans and test held tool shapes#3429d96bdaa
- dashboard: show a held step's placeholder over its parsed call3d36689
- dashboard: strip ?turn= with null state so Next syncs its routerae32e8f
- dashboard: template route patterns and API URLs in Sentry events#336434171e8
- dashboard: template server transactions and RSC headers sent to Sentry#35123caa16b
- dashboard: wait for a cancelled or superseded seek to go quiet before asserting it stoppedd3f3c7f
- data-plane: apply a retention term under one write guard#336504413ef
- data-plane: check a human label against the turn's text before it closes a hold#336536b4c0a
- data-plane: drain the data-plane rolling findings#3365671f1b0
- data-plane: hold a non-typed main-thread user turn inside an open hold window#3365aae8b64
- data-plane: hold a non-typed main-thread user turn inside an open hold window#336577142fe
- data-plane: hold a subagent's user turns in the DSAR file and probe the floor once#3365a27f9e2
- data-plane: hold strings only for the sessions that hold a turn#336536dbb51
- data-plane: serve a DSAR user turn with no typed fact pending a ruling#33653df5c5c
- drain promotion 10's rolling rows (bitbucket body cap, cli_sidecar bounds, a plane assertion that cannot fail)#353542ddf23
- e2e: sign in from a repository whose remote names the org, and close C3's config.yml residual#3573e0a4e0b
- e2e: sign in from a repository whose remote names the org, not .agent/config.yml#357381e785a
- monorepo: deny setsockopt IP_OPTIONS in every clamd and Tika container#3427c68e4a7
- monorepo: drop IPv4 TCP with IP options on the clamd and Tika hosts#3427b3b0a7f
- monorepo: drop IPv4 TCP with IP options on the clamd and Tika hosts#342700066c6
- monorepo: refuse 32-bit syscalls in the IP_OPTIONS seccomp profile#34276264b33
- sessions: a backslash after a closing quote does not stop the run-on#35341343c64
- sessions: a Basic credential in URL-safe or mixed base64 keeps no tail in either engine#3347b6276c1
- sessions: a lower-case token name segment loses a short value#3534476fbb9
- sessions: a NULL-user sibling stays in the scrub's thread#3375001d550
- sessions: a paren or quote run before a separator no longer ends a secret value#3534ad94bb5
- sessions: a rejected high-entropy match no longer stops an export's lengthening#3534f48b743
- sessions: a YAML list-item secret key keeps its sibling list items#3311eff3195
- sessions: an applied term without retain_raw_lines records no decision#33304fcc90b
- sessions: an applied term without retain_raw_lines records no decision#3330fe8054a
- sessions: an export's quoted value holding an inner = goes whole, in both engines#3256371b2ee
- sessions: an export's quoted value holding an inner = is redacted whole, in both engines#3256cd50d44
- sessions: apply the high-entropy key=value rule to parsed JSON values#337753fca62
- sessions: bound the closing-paren look-back so a long line stays linear#3534375ec12
- sessions: bound the raw-line rescan skip and log a dropped decision#3330c79809c
- sessions: clear plane raw lines only under an applied false term#33305c95474
- sessions: close the held-content leaks gate 3 carried#3375d55ec61
- sessions: close the secret-name arm's remaining value leaks in both engines#353402342bb
- sessions: close the secret-name arm's remaining value leaks in both engines#3534ccb4a5f
- sessions: close three more keyword leaks from the promotion-9 review#3534a4a0882
- sessions: count a bare prose token as noise in the differential#35341954218
- sessions: count no held session in the plane corpus, migration 0040#33657eafdbf
- sessions: detect high-entropy generic secrets in both redaction engines#3377d7587fa
- sessions: drain data-plane findings, second pass#3365c223570
- sessions: drop the prose Basic rule the floor subsumes#35345079496
- sessions: find a call named in its metadata; one-read scrub exit#33753c5dd17
- sessions: find a call named in its metadata; one-read scrub exit#3375ed6e516
- sessions: high-entropy secrets, YAML list-item siblings and whole-value vectors in both redaction engines (#3377, #3311, #3319)9e9c3ce
- sessions: hold CLI summaries and analysis while a thread holds third-party turns#3451db10acb
- sessions: hold CLI summaries and analysis while a thread holds turns#345192b15e2
- sessions: hold every turn when the plane's floor cannot finish#3365a293616
- sessions: hold third-party MCP tool results until a manager releases them#3375a0a3d5d
- sessions: hold third-party MCP tool results until a manager releases them#33752abf2a5
- sessions: hold third-party words from readers below the plane's floor#3365eae1841
- sessions: honour retain_* for raw_jsonl on the data plane#33304e56c08
- sessions: honour retain_* for raw_jsonl on the data plane#3330f8ebfc7
- sessions: keep a lone-dash list item inside a redacted YAML block#35344a61a03
- sessions: keep a marker's JSON neighbour in the API floor#3534e89bfc6
- sessions: keep each turn's message id, count its usage once and price it#3506d5398b5
- sessions: keep each turn's message id, count its usage once and price it#350607224c5
- sessions: keep every block of a message in the viewer and price a message once#350669c46a5
- sessions: keep the auth Basic arm off a next key's name#3534112bc09
- sessions: keep the Authorization Basic arm on one line and take a next key's value#3534aa769a6
- sessions: make a release durable and hold tool calls and Task threads#3375a04fd2a
- sessions: make the search third-party floor NULL-safe for a de-attributed owner#3451a7ba14b
- sessions: match a spaced "isMeta": true in both engines#3365cff2de6
- sessions: match the Basic-auth scheme word in any case in both engines#33525fe2d3c
- sessions: match the Basic-auth scheme word in any case in both engines#3352e644f48
- sessions: narrow the high-entropy id exemption and record its limits#3377673d40e
- sessions: never lengthen an export over a later pattern's match#3256e6fe945
- sessions: normalise lifecycle effort, order tied breakdown rows#33379965d13
- sessions: only a match crossing an export's lengthened end vetoes it#35345078b4a
- sessions: only org managers release held third-party content#3459ba4054f
- sessions: only org managers release held third-party content#34597c12ceb
- sessions: pin Basic delimiter stops without padding and the hyphenated-prose cost#33474595d5d
- sessions: pin the long-s Basic scheme and share the exact-row helper#3352532568e
- sessions: platform admins no longer see a session's sensitive context#34646107bc3
- sessions: platform admins no longer see a session's sensitive context#3464d8a8ccc
- sessions: read a GNU make ::= assignment as a separator too#35340e6cc6e
- sessions: read a Makefile assignment as a secret-name separator#3534c258769
- sessions: read a run before = as a key name only when it is a bare name#353475a7935
- sessions: read every separator after an auth Basic credential#3534ad30d0d
- sessions: read the API's marker in the after-colon arm#3534024d3ca
- sessions: redact a Basic credential assigned to an auth key at any length#3534367ee45
- sessions: redact a Basic credential assigned to an auth key at any length#35348cd8aae
- sessions: redact a Basic credential that a colon or dash follows, as staging did#3534378843d
- sessions: redact a Basic credential that a colon or dash follows, as staging did#35343707df5
- sessions: redact a Basic credential's whole base64 run in both engines#33475aee02f
- sessions: redact a lower-case secret name's value in prose#3534373b8de
- sessions: redact a lower-case secret name's value in prose#35349b66177
- sessions: redact an all-upper-case PASSPHRASE and a secret's closing paren or quote#3534d379aa1
- sessions: redact an assigned or listed Basic credential as staging did#35341dc8967
- sessions: redact an Authorization header's lower-case Basic credential again#35341b6b220
- sessions: redact an Authorization header's lower-case Basic credential again#3534e50e135
- sessions: report the plane raw-line step's cost every cycle#333028dbeab
- sessions: restore staging's Basic header arm ahead of the newer arms#353436cf898
- sessions: restore staging's Basic header arm ahead of the newer arms#35342af10cb
- sessions: restore staging's context-free Basic floor in both engines#35346d62350
- sessions: restore the entropy count and read a lone dash's whole item#3534e3a822e
- sessions: run the Authorization Basic arm after the name arms, as staging did#353470cf69c
- sessions: run the Basic pattern after the assignment arms in both engines#353447ea2ed
- sessions: scrub every hook event that repeats a held turn#3375ee57627
- sessions: shadow replays apply the managers-only rule too#34646c35473
- sessions: start a differential part after a list item on its own line#3534cfb68a7
- sessions: stop the Authorization Basic arm taking a next key's value#35348a4e11a
- sessions: store plane raw lines only under an applied true term#3330a7940c6
- sessions: take a double colon in the after-colon arm in one pass#35349d5bd7e
- sessions: take an Authorization header's Basic credential greedily, as staging did#35349327fd9
- sessions: take Unicode spaces after = and : in the high-entropy rule#3377c01113f
- sessions: the header Basic arm reads escaped JSON and a short user:pass#3534d78e805
- sessions: the high-entropy key=value rule skips any whitespace and is pinned on parsed JSON values#3377a797a5d
- sessions: the secret-name arm leaves code alone and keeps an exact marker#3534825d2c5
- sessions: treat a marker beside other text as value text in SecretRedactor#3241a77f525
- sessions: treat a marker beside other text as value text in SecretRedactor#324135445a3
- sessions: withhold late analysis prose in insights, search and blueprint suggestions#3451ae45edf
Code Refactoring
- api: drop a trailing slash from the dashboard URL in one place#31664ee258b
- api: one dashboard URL helper and one device-verify URL builder#31660c3e406
- api: one dashboard URL helper and one device-verify URL builder#316665193c3
- api: the waitlist backfill calls the class-level untaken#32655574468
- cli: drop a repeated test comment and inline a single-use log kind (promotion 14 simplify)2cc8413
- cli: drop a repeated test comment and inline a single-use log kind (promotion 14 simplify)a22b848
- cli: get_org_status uses the imported sanitizer too035280a
- cli: name the string form of the capture-mode gate#33506cb741a
- cli: one closed-shape refusal code check for the link hint#3550388d505
- cli: route the Ask writes through execute_ask with one kept code#31738b4bfe4
- cli: share the unlinked resolve fixture and use the imported sanitizer (promotion 13 simplify)64a73e3
- cli: share the unlinked resolve fixture and use the imported sanitizer (promotion 13 simplify)d9c3078
- cli: use the imported atomic names in RedeemTurns::begin#3550cc55965
- dashboard: promotion 9 simplify round over the turn timeline84fbe17
- dashboard: promotion 9 simplify round, and cover the exchange seek fallback#3364ac01129
- data-plane: build a TurnShape from a stored turn row in one place#3365cd00818
- data-plane: build both floor SQL twins on one held-results clause#3365006b8be
- data-plane: take the gate-3 NITs on the #3365 drain#3365a670d68
- sessions: build the p11 header corpus in code instead of a 376 KB fixture#33675879c60
0.9.3
CompareBug Fixes
- api: pin test-affected's empty-selection contract and the scrub-test fixture (#3078, #3076)e88636d
- sessions: key the digest ledger on the shape set, back off retries, CAS the id#30774702362
- sessions: plane secret-shape parity, backfill retry and lease fencing#307718ddc28
- sessions: plane secret-shape parity, backfill retry and lease fencing#3077127efce
0.9.2
CompareFeatures
- api,feedback: a served notice summary, a settings digest and the prefill flagd30fce1
- api: audit an Inbox dismissal as a feedback item deletion (31bc12c), closes #2899
- api: check Cloud KMS CRC32C integrity fields on encrypt and decrypt (fe1feb6), closes #2893
- api: confirm a cluster of matching feedback reports with a corroboration count#290015e8a84
- api: confirm a cluster of matching feedback reports with a corroboration count #29007fe9d0d
- api: delete feedback screenshots on every path, reaper, residency purge (#2894, PR B part 1)b6ffd6f
- api: delete feedback screenshots with their items, reap orphans (ed9068c), closes #2894
- api: envelope-encrypt feedback screenshots under Cloud KMSc7e0e21
- api: envelope-encrypt feedback screenshots under Cloud KMS (db1a509), closes #2893
- api: fall back to crewkit's privacy policy in the Feedback notice (9d11cb8), closes #2948
- api: feedback filters, group-by and cursor paging, with a keyboard and accessibility contract (#2901, #2902)0365a38
- api: feedback reports carry context, a layered notice and screenshots#2885c5c037c
- api: feedback screenshots, sealed storage and upload route (#2894, PR A)d62a46b
- api: filter, facet and page the Feedback lists, with Group by#29012bfac39
- api: keep a Feedback item's browser and OS family from the User-Agentbbe7201
- api: keep a Feedback item's browser and OS family from the User-Agent (dd9d83c), closes #2889
- api: keep allowlisted query parameters on feedback reports3192191
- api: keep allowlisted query parameters on feedback reports (71a8f38), closes #2890
- api: link a Feedback item to its Sentry replay and event through the key's org slug92d28af
- api: link a Feedback item to its Sentry replay and event through the key's org slug (98e1ab8), closes #2892
- api: link a Feedback item's release to its commit through the key's repositoryfce981b
- api: link a Feedback item's release to its commit through the key's repository (dbb17bb), closes #2891
- api: monitor the feedback screenshot reaper as a safety job (4758eda), closes #2894
- api: say on each Feedback key whether screenshots are availablee4d82bc
- api: say whether a feedback item has a screenshot and prefilled details (dc62e2e), closes #2896
- api: serve feedback screenshots audited, data-request export link (#2894, PR B part 2)12821f1
- api: serve feedback screenshots audited, with the data-request export link (042d9a1), closes #2894
- api: serve the last feedback decision and whether collection is set up (cedad30), closes #2899
- api: serve viewport, locale and pull request on the feedback item shapes9757091
- api: serve viewport, locale and pull request on the feedback item shapes (09eff67), closes #2898
- api: store feedback screenshots sealed, with the upload route (9bf6999), closes #2894
- api: store the validated feedback origin and build the full URL61c0e75
- api: store the validated feedback origin and build the full URL (0220d5b), closes #2888
- api: the author can discard a draft Ask (78f4ee1), closes #2844
- api: version the feedback notice summary and refuse a stale settings digest (5f75a10), closes #2887
- asks: the author can discard a draft Askab931fd
- cli: discard_ask MCP tool for a draft Ask (d6bdbbc), closes #2844
- cli: let update_feedback_key turn a key's screenshots on or off (7d153ac), closes #2885
- cli: say the Feedback notice links crewkit's policy when none is set (3de1b30), closes #2948
- dashboard: add a per-key screenshots switch to the Feedback key editorbba3b5f
- dashboard: disable the screenshots switch with the reason the key response givescd41053
- dashboard: discard a draft Ask from its page and the list (1279c6f), closes #2844
- dashboard: discard a draft from the org-wide Asks list (cb9fd73), closes #2844
- dashboard: edit a Feedback key's query allowlist (04bbe4f), closes #2890
- dashboard: make the Feedback list usable by keyboard and screen reader#29023be1631
- dashboard: mark a capped conversation's shared totals as floors#2873f1f9e7a
- dashboard: mark a capped conversation's shared totals as floors#28734619c18
- dashboard: open Visitor feedback in a list and detail view4a7f499
- dashboard: open Visitor feedback in a list and detail view (65e20b7), closes #2899
- dashboard: render a lower-bound conversation cost as a floor (132e6fa), closes #2858
- dashboard: render every lower-bound cost and floored sum as a floor (e4d6da6), closes #2858
- dashboard: show a feedback report's context and screenshot5c3f69b
- dashboard: show a feedback report's context and screenshot (a50aeaf), closes #2896
- dashboard: warn that the Feedback notice links crewkit's policy (1a8ba39), closes #2948
- feedback: a layered notice from the served summary, with the digest and prefill flag (e84714a), closes #2887
- feedback: eight launcher positions with snap targets while dragging (8b31b50), closes #2943
- feedback: eight launcher positions with visible snap targets while dragging8682b16
- feedback: fall back to crewkit's privacy policy when the organization has none5e3aba9
- feedback: label the notice's policy link by its owner (5795860), closes #2948
- feedback: let the Visitor add a redacted screenshot of the Host app pagec77b07d
- feedback: let the Visitor add a redacted screenshot of the Host app page (667734d), closes #2895
- feedback: send Sentry replay and event IDs under a notice that names a Sentry org (97cd28c), closes #2892
- per-key screenshots switch in the dashboard and the MCP key tool#2885d62d4c9
- sessions: Full contact, off until an admin grants it#2440b71f976
Bug Fixes
- api: a failed Artifact rewrite no longer stops a residency purge#288559080ea
- api: a Send with no settings digest is accepted only under settings its notice covered#288542dc63a
- api: a Send with no settings digest is accepted only under settings its notice covered#288506bf314
- api: a Visitor can read their own screenshot by its private link#3023d82141f
- api: allow the Visitor's screenshot read through rack-cors#30230f1f0ce
- api: an older notice records only what it disclosed#30234f24e07
- api: cap a private link's screenshot reads at 60 an hour#28852cca72e
- api: count HEAD against the feedback read throttles#28858b8141a
- api: drop stale 503 comments and send privacy_policy_set with the keys list (8f2a46a), closes #2948
- api: drop the open-Asks cap for organizations without a verified domain (e6325ed), closes #2960
- api: drop the open-Asks cap, publish DPA 2026-10-27.1, and give 30 days to accept a DPAceba199
- api: drop the unreachable reject hook, scope the race stub#3023dd96cc8
- api: drop the unverified-org open-Asks cap leftovers#2960abb45dc
- api: exact cross-org refusals in the discard test; comments name discard (08cf4a8), closes #2844
- api: exclude Full contact conversations from a shadow replay before its limit (78a93f4), closes #2440
- api: filter device codes, room key envelopes and signed payloads out of request logs#2766fc7c626
- api: flag dynamic summary reads and guard allowlisted reads by method#30321e2dc8d
- api: fold the notice's two shipped policy fields into the settings digest (aa7be7f), closes #2887
- api: gate 3 findings on the feedback spec#302396cb50f
- api: gate 3 findings on the feedback spec#30234e79026
- api: give a pending report its own retention clock, bounded by the organization's term386fa39
- api: give organizations 30 days to accept a new DPA version (58bf981), closes #2960
- api: keep a draft? display guard on the serializer's can_discard (8790bee), closes #2844
- api: keep a thread's agent notes when the prompt backfill retracts#30322df1ffd
- api: keep Cloud KMS error text out of FeedbackImageCrypto's raises (a9c1487), closes #2893
- api: keep Full contact summaries out of digests, blueprints and replays, and close the promotion audit's API findings214d056
- api: keep the purge's direct delete and test a storage error class#3023a5f8194
- api: name the notice versions that did not disclose the report context#30237585f45
- api: name the panel upgrade on a digestless refusal and digest every rendered setting#28852abdd73
- api: no client IP on the request log's Started line for public feedback#30238e6f79b
- api: pin each recording_capped input and its access gating#287398167e1
- api: pin the open-Asks cap's absence and drop its CLI code#2960ebe0c14
- api: promote the oldest corroborating report when its representative is erased2418ee5
- api: promotion audit fix-forward for the develop to staging auditcf4e540
- api: re-render a thread document whose Full contact turn is in any segment#30328469aae
- api: read the Room retention job's log through capture_rails_log (9084347), closes #2440
- api: read the SECRET_KEY_BASE report's inputs inside its rescue#2502f03f31c
- api: refuse a blank param and check every declared action exists#27664f132ba
- api: refuse a filter_logged_params naming no param or a blank action#27662ad8e86
- api: refuse line breaks in Full contact statements and date the listd166214
- api: report at boot when SECRET_KEY_BASE differs from the credentials#25026393c13
- api: report at boot when SECRET_KEY_BASE differs from the credentials#250269130ed
- api: return a promoted report to pending, and lock a cluster in one statement62edc4f
- api: serve crewkit's policy in fallback_privacy_policy_url (748d7dd), closes #2948
- api: spec #2885 gate-3 fixes, and keep a cluster's other reports when its representative is erasedcd63e12
- api: spec 2885 re-check carries before the hopff1acb8
- api: squeeze doubled slashes before matching a throttled route#28857600cdc
- api: take the spec #2885 gate 3 API, security and outside findings02f22aa
- api: the Asks logo body rule reads AskLogo::MAX_BYTES#3023e7816d4
- api: the Asks screenshot body rule reads AskImagePipeline::MAX_BYTES#30232b31483
- api: withhold a Full contact conversation's initial prompt from services73f832e
- api: withhold a Full contact prompt and summary from search outside the Rooms#30322747287
- api: withhold a Full contact prompt from session documents and hold every reader to it#30327105caf
- api: withhold Full contact prompts and summaries from search; HEAD counts against the image throttleae4e8a6
- ci: an out-of-line mod tests no longer hides the code below it#2863da52b3a
- ci: blank nested Rust block comments in the boundary helper scan (62443e7), closes #2863
- ci: close the boundary-helper check's comment, pattern and test-module gaps#2863b6bc909
- ci: find cfg(test) through stacked attributes; a Ruby splat is code#2863897d3e3
- ci: ignore commented-out CSS in the reduced-motion guard0625001
- ci: ignore commented-out CSS in the reduced-motion guard0b54ed3
- ci: replace react-doctor's reduced-motion rule with a guard test3f3f296
- ci: replace react-doctor's reduced-motion rule with a guard test (a6b38bc), closes #2890
- ci: replace react-doctor's reduced-motion rule with a guard test (96a42d7), closes #2890
- cli: bind Full contact native sends to a real stand-in and date the signed verified-versions list83c0fc7
- cli: bind native sends to this Account's real stand-ins25c01d6
- cli: discard_ask is annotated destructive and says it is permanent (0acfa0c), closes #2844
- cli: gate native sends on a stand-in and date the verified list866db50
- cli: get_feedback gives agents the URL, browser and OS family and the screenshot flag#302249e1528
- cli: get_feedback gives agents the URL, browser and OS family and the screenshot flag#302236552db
- cli: keep our own backlog refusal's words; scan every key-id name#2843a660dd3
- cli: keep the sender's device key id out of the supervision line00ddedb
- cli: keep the sender's device key id out of the supervision line26b136e
- cli: punctuate the update_feedback_key description#3022453897f
- cli: say a refused backlog fetch by its kind in the supervision line#2843981619e
- cli: show screenshots, Sentry org and repository on an updated Feedback key4ad22f8
- cli: spell the brand crewkit in the LSP plugin description#2883ebc03e3
- cli: strip the interlinear annotation controls U+FFF9-U+FFFB in every copy#26211e9a9d8
- dashboard: a floored list row is not also labelled unpriced (24b8653), closes #2858
- dashboard: a share names a null cost unpriced only with a pricing status (07f1a6b), closes #2858
- dashboard: ask before an Inbox row deletes a report, and call it Delete#2897307ae0f
- dashboard: discard relies on can_discard, titles by askTitle (f4bfa1b), closes #2844
- dashboard: drop the open-Asks cap from the opt-in card (3553987), closes #2960
- dashboard: drop the unused autoFocus suppression on the project tab#30202005ac5
- dashboard: floor the analytics and team KPI cost totals (2bd6156), closes #2858
- dashboard: floor the cost chart tooltip and cost-breakdown rows (ca4f238), closes #2858
- dashboard: gate 3 findings on the feedback views#30202569cba
- dashboard: gate 3 findings on the feedback views#3020eaebe22
- dashboard: keep the open report through a search, and attach only same-page reports3d3ec99
- dashboard: make the Inbox Delete triggers destructive, as the Feedback tab's is#289759a02c4
- dashboard: mark the selected group's rows in the pending list#28853dd7b9a
- dashboard: move the JSONL export out of the component so React Compiler compiles it#29051a22efb
- dashboard: move the JSONL export out of the component so React Compiler compiles it#29053e49a58
- dashboard: only a cost floor of zero renders as a floor (c80a502), closes #2858
- dashboard: set the zero-floor rule by FloorCost, not formatter identity (1a22f79), closes #2858
- dashboard: show a key's panel warnings in its row from one version constant#288598faa66
- dashboard: spell the brand crewkit on every surface#2883d6479b7
- dashboard: spell the brand crewkit on every surface#288388eeefb
- feedback: a drop is measured from the pill's centre, not the pointer (4259f38), closes #2943
- feedback: always finish Send past the screenshot, and release it#3021b3b99ad
- feedback: describe CKFB_SERVICE_UNAVAILABLE as a server-side fault (f769a02), closes #2948
- feedback: gate 3 findings on the widget's screenshot capture#30212d0e89a
- feedback: give a refused screenshot upload its own warn reason080854e
- feedback: hold the new positions against host resets, and stack the side dialog when narrow (3474a5a), closes #2943
- feedback: keep fixed Host elements where the Visitor sees them in a scrolled capture (d29022f), closes #2895
- feedback: leave out a video with no frame, and bound the capture#30211859810
- feedback: link fallback_privacy_policy_url as crewkit's policy (4ea1e72), closes #2948
- feedback: mask a field named like a verification code#2885aa3d36e
- feedback: mask a field named like a verification code#28851070896
- feedback: mask a field whose name or id says it holds a secret#3021b0f2493
- feedback: mask key, token and code field names, pin the renderer#2885e320ede
- feedback: mask media, pseudo-elements, revealed passwords and frames#3021da41692
- feedback: mask one-word codes, MFA names and labelled code fields#2885b145947
- feedback: mask secret-named textareas and editable regions#2885470dbfd
- feedback: mirror the notice's screenshots field in the widget's types (ec6eba7), closes #2894
- feedback: only the private-link page admits blob: images#30237b34959
- feedback: read a spaced two factor and an editable's aria-labelledby#2885fe6caad
- feedback: select a box without ES2023 findLastIndex#30211db08b0
- feedback: spec 2885 re-check carries before the hop5f3d59b
- feedback: split an all-caps prefix from the word after it, so PINCode is masked#3021048851a
- feedback: the private link shows the screenshot the Visitor sent#30234e62cf2
- feedback: upload a screenshot only under a notice that offers it (26d6d5d), closes #2895
- feedback: upload the screenshot as it stands at upload time13eb820
- sessions: #2852 review follow-ups: order-safe Task stops, atomic stats, record cap flag (#2868, #2869)4f3f1a4
- sessions: bound the backfill lease minimum and log every pass error#2954867c9ee
- sessions: floor team_overview's org cost total and bound-test by assertion (068ba2f), closes #2858
- sessions: mark org and project cost sums that include a gateway floor (cc0c9fe), closes #2858
- sessions: push a period cell's priced floor beside its poisoned cost (a116372), closes #2858
- sessions: push the priced requests' sum beside a poisoned gateway cost (f2245f9), closes #2858
- sessions: re-queue rollups for push in the new binary, not in a migration#2954ad95769
- sessions: re-queue rollups for push in the new binary, not in a migration#2954af8854d
- sessions: require one UPDATE session_rollups SET per push backfill (74970b7), closes #2954
- sessions: run push backfills only after a sustained lease hold#2954bb0c8cc
- sessions: show a labelled lower bound when a gateway session has unpriced requestsd0889b6
- sessions: store a period cell's priced floor as a lower bound (850cee1), closes #2858
- sessions: store and serve a gateway session's priced floor as a lower bound (9daa9bc), closes #2858
Code Refactoring
- api: decide privacy_policy_set through FeedbackNotice.fallback? (e5af43b), closes #2948
- api: leave the Sentry ID format to FeedbackItem's validation (a99a626), closes #2892
- api: move the identical anchored UUID copies to UuidFormat::MATCH#288551aa56a
- api: name the sealed storage's delete argument for the revoke-wake scan (1181362), closes #2894
- api: one AskPolicy#discardable_now? behind can_discard (b2472da), closes #2844
- api: read the feedback UUID format from one shared constant#2885191d81b
- dashboard: keep groupLabel beside gather in feedback-split799b935
- dashboard: read panel_warnings directly, as the contract requires it#288593da33d
- dashboard: read privacy_policy_set from the Feedback keys list (4bd2705), closes #2948
- feedback: drop the snap target's declarations the reset block already sets (f4e46f9), closes #2943
- monorepo: simplify the develop to staging promotion diff669a4fa
- monorepo: simplify the develop to staging promotion diff5e95e5b
0.9.1
CompareBug Fixes
- api: serve the stored prompt count as turnsfcae20a
- cli: a path switch onto a resumed transcript skips its historyc75e74b
- cli: a turn this process already read is never sent againf11eb9c
- cli: an in-session /resume no longer re-sends the resumed conversation's historybd1022c
- cli: label a task's transcript rows in sessions show --json9cb01ab
- cli: the resumed-history cutoff is when the streamer started1225c9a
- dashboard: announce unpriced, and label the remaining prompt counts882dc36
- dashboard: conversation list shows prompts, labelled tokens and a summary title727c47c
- dashboard: conversation list shows prompts, one token definition and summary titles3dbd5cf
- dashboard: one token definition and prompts label across the dashboard063fbf3
- sessions: stats-recording follow-ups, task dedupe tooling and conversation page critiqueca10fb1
Code Refactoring
- cli: drop transcript_rows from sessions show task JSON95ea3d9
0.9.0
Compare⚠ BREAKING CHANGES
- feedback: the apiUrl prop is removed.
Features
- dashboard: load a conversation's Tasks by group, 25 at a timeaa74b05
- dashboard: mount the @crewkit/feedback panel where a Feedback key is configured83c3db5
- dashboard: mount the @crewkit/feedback panel where a Feedback key is configured1d8d33d
- feedback: crewkit attribution in the launcher and the dialog, a movable launcher, and the design review's fixese4edd74
- feedback: crewkit attribution in the launcher and the dialog, and the design review's fixesfa38b54
- feedback: the panel always sends to the production crewkit API5b4da05
- sessions: summarise a conversation's Tasks by agent and page their rows4a2275c
Bug Fixes
- dashboard: csp.ts imports feedback-api relatively, because next.config loads it0a7b889
- dashboard: load the feedback panel only when a key is set, and disclose ita844841
- dashboard: the feedback panel always sends to the production crewkit API0b1076d
- dashboard: the feedback panel always sends to the production crewkit API3ecdcec
- dashboard: the feedback panel sends to the production API by default, admitted by the CSPee35719
- feedback: a touch tap is never a drag; the stored corner is validatedc02a5ce
- sessions: conversation and task metrics that disagreed with the CLI, the gateway and themselves39b520d
- sessions: page Tasks through Kaminari with a bounded page, and order groups case-insensitively02ca052
Performance Improvements
- sessions: load the workflow Tasks' WorkflowRun events in one querye0ff036
Code Refactoring
- dashboard: the server is the only Task grouping, and an open group refreshes when its counts change9cce497
- feedback: the API_URL is a constant; export API_ORIGIN; erase is coveredce760a4
- sessions: drop the redundant parent assignment in Task serialization52f3d9c
- sessions: the group summary's SQL builder is private, and its comment names the statusesbd86d36
0.8.5
CompareFeatures
- api: the scope judge checks in_reply_to against the room's accepted frame hashes#19332228baf
- api: the scope judge checks in_reply_to against the room's accepted frame hashes#193363d0160
- api: verify and relay audit_key_rotated refusals to the frame's sender#2746f519254
- asks: render fenced code blocks in an Ask's briefb5357d3
- ci: a manual plane roll can carry the owner's ruling on migration orderffd6b03
- ci: a manual plane roll can carry the owner's ruling on migration orderfd499bd
- cli: an owner or admin who joins gets the organization's audit key, silently and once#24852613f5d
- cli: re-send a message once after a receiver refuses it as audit_key_rotated#27468aa1129
- dashboard: open a brief's fence indented up to three spaces7dc9a09
- dashboard: render fenced code blocks in an Ask's brief (d2a1464), closes #2837
- sessions: refuse a frame sealed to a superseded audit key as audit_key_rotated#274602dbe95
- sessions: refuse and tell on a superseded audit key, re-send once#2746336b138
Bug Fixes
- api: a Drive PDF is known by its bytes; the To field is cleaned#24917f07d18
- api: a failed feedback purge answers a specific 409 and rolls the deletion back#2325a6e85ab
- api: a feedback data request pages through every matching item#269880e22a0
- api: a feedback data request pages through every matching item, and the export reaches every page#2698468cbf6
- api: a JSON array answer is a refusal, and a lease taken after now stays live#26053ab239e
- api: a lookup row without a positive iid logs its own reason#2596500a477
- api: a PATCH naming no attention says attention is required#2482b724f02
- api: a private refusal retries an unreadable 200 and is never posted after the hour#26059c1e16f
- api: a project purge deletes the feedback keys before it erases the items#2690813cf27
- api: a refused merge request lookup logs crewkit's own reason#2596c7a1eb6
- api: a reply withheld at the relay timeout gets its own refusal (#2612, #2601)570a202
- api: a reply withheld at the relay timeout gets its own refusal (#2612) (0bc5d4c), closes #2601
- api: a silent approval takes the user's row before the key's#26549a3a552
- api: a tag letter folds in the blank-aware pass, and harness_tag_at reads once#2181da05932
- api: a timeout refusal is enqueued once, and the subject key is shared#26121ecfb5f
- api: add a dry run for the opening-lookup backfill#265005f295d
- api: an audit-key notice mails each recipient once, by their role at send time#2711d3cf9f9
- api: an uncertain merge request is adopted only from the job's own project#259636bf83a
- api: an unconfirmed 2xx is maybe-sent, and a refusal outlives the hour by a lease#2605c055a2b
- api: audit_key_rotated migration adds its check NOT VALID, then validates3945924
- api: backfill priced_at for the detector's current window#2240543db81
- api: both sentry hooks drop the credential headers#269082e5213
- api: cap a cloud job prompt at 64k and match harness tags in one linear pass#2181b2e9419
- api: device removal emails say each device must be signed in again#24964caa251
- api: device revoke and removal-link mails go on the queue#265444ca56d
- api: Drive keeps a PDF's bytes; email metadata and cut topics are cleaned#2491489c681
- api: each data request page's audit row names the cursor it followed#2698dfb7156
- api: enrollment-request and recovery emails speak of devices signed in#24962e97ed7
- api: every Attention clear is unconditional and takes the sequence#2482e9ab81e
- api: every invisible-character copy matches the cli and a blank cannot hide a tag#2181de3b4bb
- api: every purge job reads its kill switch through one fail-safe predicate#2194ac0ba78
- api: every purge job reads its kill switch through one fail-safe predicate#219468c5075
- api: feedback review nits from the 2194 hop#269002a87c7
- api: filter a session's Attention params from the log#248217ee31c
- api: find a merge request whose create ended uncertain by its branch#2596ba77890
- api: find a merge request whose create ended uncertain by its branch#259638b8d6a
- api: first-login race test waits on enroll!'s user-row lock#2496714c494
- api: keep the priced_at migrations inside the sentinels' rules#2240ea791e1
- api: kill-switch reads and the pundit audit cross-check (promotion audit)4f3cad5
- api: name a key scope where #2793's tests end access, pin the first-device claim#2496df0c281
- api: neutralise invisible-character variants of harness tags and cap cloud job prompts at 64k#218162cce0c
- api: one tag matcher reads each tag character as its letter or as nothing#2181da56e2a
- api: one visitor gets a share of a project's daily feedback cap#26974d656ed
- api: one visitor gets a share of a project's daily feedback cap, and the notice states every term#269727beb2f
- api: pin that the opening lookup discards its paging cursor at every end#26513051f34
- api: pin the session purge's kill switch, move the predicate to services#2194a4329cd
- api: read tag characters and stop folding at a name's end#2217fa3d1e5
- api: refuse a rotation report from a member that acknowledged the frame#2746cf4b8d2
- api: scrub device-code request details in every environment#2654317a93c
- api: slack connect 503 refusals carry details.reason#2104eb9b503
- api: slack connect 503 refusals carry details.reason slack_connect_unconfigured#2104fc86c55
- api: spec/2050 gate-3 fix-forwards for auth and locking#2654a7ed256
- api: sweep spent removal links, and schedule the spec's auth rows#26510c28288
- api: the admin hard delete refuses on a feedback purge before anything is dismantled#267333eb1e1
- api: the admin hard delete refuses on a feedback purge before anything is dismantled#26735412d2e
- api: the analysis worker refuses to start able to silence a custody receipt#225261f23ed
- api: the attention check lives on LlmSession, and a lone client_seq is 422#24823195791
- api: the Attention read asks the write's predicate#2482f5e5864
- api: the attention skill acknowledges with one fixed sentence#24820784b68
- api: the Attention write's SQL log masks its sequence#2482e9ec647
- api: the audit_key_rotated migration validates its check without a long lock#2746d103a9e
- api: the custody probe asks every reachable role and the owner#225248df5b5
- api: the delivery ledger's limits are stated, retained and logged without the address#2711416057b
- api: the deploy fragments set the verdict signing variable where docs say#2429e4bcacc
- api: the device-waiting email heading speaks in the person's terms (promotion audit)27f3787
- api: the feedback purge is reachable only through its guard, and locks the keys first#26904dca54e
- api: the feedback retention kill switch also pauses on 1 and warns on other values (2f5181a), closes #2194
- api: the feedback retention kill switch stops the sweep only on true (b4d3423), closes #2194
- api: the harness-tag neutraliser folds look-alikes through the cli's table#2217cfec8e0
- api: the hook-path model switch stamps priced_at#2240dd2b1a4
- api: the lease filter pin allows the entry's trailing comma#24821836289
- api: the lock control waits for the taker's connection before watching#2598ffad7ba
- api: the model-sighting detector windows on when a conversation was priced#2240fee5da5
- api: the priced_at backfill skips rows stamped since its read, walks by created_at#2240de64ea0
- api: the scope judge never binds a reply to the service's own accepted frame#19334145007
- api: the scope verdict root alarm fires only on a component that signs#2429675ef16
- api: the scope verdict root alarm fires only on a component that signs#2429d1dd478
- api: the slack audit-key refusal names the org to members only; key changes mail admins#2677f3a824a
- api: the stored SendGrid envelope is cleaned like its siblings#2491b03824a
- api: the subject lock takes the legacy hashtext lock too#2654fcc00ba
- api: the visitor share is a per-day counter an erase cannot reset, bound to the project#2697f9b6a75
- api: the visitor's feedback token never reaches sentry#2690c94b4e3
- api: the visitor's feedback token never reaches sentry, and the 2194 api fix-forwards#2690efbf5b5
- api: variation selectors cannot smuggle data through any ingest#2491d7de448
- api: variation selectors cannot smuggle data through any ingest#2491efc5aa8
- api: window the model-sighting detector on a new llm_sessions.priced_at#224075b6a50
- auth: a device approval in flight never outlives a revoke-all#2496b74d694
- auth: a device-code exchange in flight never outlives a revoke-all#2496a1dc93e
- auth: a device's line takes each introduced device across its rotations#2496cca09b9
- auth: a device's removal takes its line's keys by id after the user row#2496440e516
- auth: a first device is taken only while the request's token is live22cae37
- auth: a late-confirmed email change notifies the old address for the whole window#24791616d06
- auth: a logout keeps the devices it accepted; removal copy (develop red after #2795)ee9a47f
- auth: a logout revokes only its own device, never the devices it accepted#2496695a9e6
- auth: a passkey registration in flight never outlives a revoke-all#24969c3be98
- auth: a repeated removal of a signed-out device is audited by kid#24966fc2a60
- auth: a revoked acceptor activates no pending key#24465533d04
- auth: a signed-out device's removal takes its line; a logout's chain fails closed#24969c1de08
- auth: enroll checks the cutoff directly and the CLI ends a token_revoked sign-ina0bc0e5
- auth: first-device enrollment and accept hold the user lock against revoke-all and removald6f2496
- auth: first-device enrollment and accept hold the user lock against revoke-all and removal0754546
- auth: one mint for a user's access token#26546b734dd
- auth: removing one device revokes its line, named before and after#24967fd8a3a
- auth: revoke-all also revokes the device keys bound to the sessions it ends#2496d6558d0
- auth: revoke-all also revokes the device keys bound to the sessions it ends#249692c204d
- auth: revoke-all holds on enrollment, passkey and magic-link paths#2496e26e0a3
- auth: revoke-all revokes every device key but the kept session's#2496091ab11
- auth: revoke-all, acceptor and email-change races (promotion audit)21d03c1
- auth: scope revoke-all's device keys by the caller's intent#2496047ab87
- auth: the approval's lock is proven, and its cutoff check is the shared one#2496d69be7f
- auth: the race-test restore deletes the rows the test added#2496f441b36
- auth: the revoke-all race tests restore the fixture rows they revoke#24968ce8a70
- ci: publish @crewkit/feedback without provenancef783db1
- ci: publish @crewkit/feedback without provenance76792cd
- ci: trigger API CI on the pairing disclosure, pipefail the credentials step#27116670b48
- cli: a clear forgets the shown attention, and a late answer clears it#2482c962573
- cli: a clear outlives an in-flight attention answer before the cell moves#2482097f7e1
- cli: a device removal's words name sign-ins, never the key mechanic#2496f4136e2
- cli: a frame sealed to a rotated own audit key refreshes once, never drops silentlyc4878a5
- cli: a frame sealed to a rotated own audit key refreshes once, never drops silently5a21174
- cli: a frame waiting on the refresh interval is held, not acked unopenedb407d80
- cli: a key set meanwhile leaves no stray local audit key#2677300fb7b
- cli: a keycap keeps its selector only directly before U+20E3#24911bb0b9d
- cli: a listed feedback key shows its privacy link#2694f6389fb
- cli: a login never overwrites a staged device key#2676373b7c6
- cli: a login never promotes or drops a key staged for another org (promotion audit)a533d7e
- cli: a login with a pending staged key says it is waiting#268274855bf
- cli: a login with a pending staged key says it is waiting, and a key that can never be accepted is dropped#268257159f3
- cli: a lost audit-key answer never discards a key since retired (promotion audit)ffd3e9e
- cli: a peer turn keeps its egress denial when a Room is skipped (promotion audit)63dd658
- cli: a refused sign-in keeps the device key; login enrollment stages its key#265376d5f26
- cli: a session shows the hop-limit guidance and its person is told in their window#24927d050e2
- cli: a turn whose prompt a Room missed is refused egress as a peer turn (promotion audit)4eab7f7
- cli: a typed /crewkit-attention is never recorded as a session event#2482972bd59
- cli: a typed /crewkit-attention is never recorded as a turn#2482986828c
- cli: allowlist the feedback mcp strings that name the inbox's pending state#2728971a820
- cli: an Attention answer is shown only while its conversation is current#2482f6e8cfa
- cli: an unread Room denies only a User session; a login says its staged key (promotion audit)fcbe635
- cli: an unwritable missed-event marker still denies egress, and says so (promotion audit)a46f7ad
- cli: auth status --verify ends a revoked session and keeps the device key#26763ae718b
- cli: budget feedback text to the fence and compare the resolved project#2694259898f
- cli: cap the audit_key_unknown counts; only the stale-kid refresh stamps#24829aa1b61
- cli: check the device in join_with_code for a signed-in account only#2480cf164da
- cli: choose_discussion returns its discussion list as a successful reply#22378068987
- cli: choose_discussion returns its discussion list as a successful reply#2237167d06a
- cli: cross-org staged key at login, retired-key discard, hub egress (promotion audit)7beafdc
- cli: curated readiness words, auth status keeps the device key, login never overwrites a staged key#267609dd49f
- cli: debug-log a commands error by its closed kind, never its text3fc571c
- cli: debug-log a failed JSON decode by its shape, never the body684a644
- cli: debug-log a services error by its closed kind, never its text4b23247
- cli: debug-log commands errors by their closed kind (2 of 3)f419a65
- cli: debug-log errors by their closed kind, never their text (1 of 3)9d4dedb
- cli: debug-log every remaining error by its closed kind and drop the baseline7ba4287
- cli: debug-log every remaining error by its closed kind, no baseline (3 of 3)95e45fd
- cli: drop unstorable rotation reports and sweep lapsed sent texts at observer start#2746a46b7a1
- cli: fence the feedback tools' server fields and log every refusal#26940035e78
- cli: fixture census counts #2795's two mocks#2496d787097
- cli: fold a tag character to the ascii it encodes#2217ef7c729
- cli: get_attention reads this session from the owner's own view#2482b8f78f1
- cli: hold a worktree's provisioning with a record lock no fork inherits#2516e2fe1b9
- cli: hold a worktree's provisioning with a record lock no fork inherits#2516e16ce60
- cli: hold the swept state's lock in a child, not the test process#2746483ac9c
- cli: isolate the sweep test's lock from forked children#274676574e6
- cli: just test runs every crate before failing, and the cli_link label names its chain#2738e62633c
- cli: keep a transcript turn whose attention command the parser rejects#24829a2a80d
- cli: keep paths, subprocess text and API bodies out of the debug log1874c51
- cli: keep resource slugs and convention keys out of the debug logbb20364
- cli: keep setup paths, server text and hook payloads out of the debug log8950796
- cli: keep stderr, launch argv values and customer names out of the debug logada504a
- cli: keep symbols, typed text, previews and remotes out of the debug logee49891
- cli: keep the resolve id comment off the code it describes#2694b37479f
- cli: launch notices wrap and stay up long enough to read#2259db91a97
- cli: log a server word only from its known vocabularyd67bc33
- cli: log a subagent type only when it is one of Claude Code's own9d3467c
- cli: log Attention's new errors through log_safe997a8f6
- cli: log the home directory as ~ and never echo its namebc90bbe
- cli: name each session-link lookup that panics by its own labelcf5d53a
- cli: name only Claude Code's documented SessionEnd reasons in the log8284f65
- cli: no attention write goes to the conversation a clear left#2482704e24a
- cli: pin the variation-sequence parser's bad() sites in the LinkRefused census#2639b3eb35b
- cli: record an attention command the parser rejects#2482054378e
- cli: record an attention command the parser rejects#24825f3c123
- cli: recovery and last-device warning in plain words, device list marks this machine#248166347ac
- cli: recovery and last-device warning in plain words, device list marks this machine#2481cde510d
- cli: refuse stale-kid frames past the interval; refresh only for an unknown kid#24822066357
- cli: say which location a debug log line means without the user's namedd4b1ea
- cli: settle the device before a code or a join is asked, fail closed#24806ded5ba
- cli: show withheld-flag notices once instead of over the tui at every respawn#2259e123736
- cli: show withheld-flag notices once instead of over the tui at every respawn#22598f19ab8
- cli: spec/2050 gate-3 fix-forwards for the device key#26537b781d2
- cli: sweep lapsed sent texts on every launch surface and log the count#2746489122e
- cli: tell the person a failed re-send even when its marker cannot be cleared#27463f90df1
- cli: the attention turn is dropped in the parser, in every capture mode#24829aeaf43
- cli: the cli_link test passes in any process tree, and just test never stops early#273866abec0
- cli: the cli_link test passes in any process tree, and just test never stops early#27383a302b4
- cli: the debug log drops the skill fields of a typed attention command#2482cda0ce6
- cli: the debug log keeps no typed attention command; get_attention review fixes#2482afc1151
- cli: the device readiness check answers in curated words only#26767046c8a
- cli: the feedback mcp test builds a refused error with develop's next_step field#272803377bc
- cli: the feedback tools fence their server fields, refuse another project's mint, and log every refusal#2694dc2498b
- cli: the fixture census counts both #2492's mocks and #2480's#24803ab9937
- cli: the live keyring test cleans up through discard_unregistered#271197aa7f4
- cli: the MCP pairing check follows the CLI's signed-out rule#2653c2983b4
- cli: the person never sees enrollment, and a device name stays private#2480df92aa2
- cli: the person never sees enrollment, and a device name stays private#2480a0fdbb1
- cli: tie the built-in agent and span allowlists to quoted documentation207a865
- cli: typed attention on the session view, a ValueEnum, and logged detaches#2482b5b3f58
- dashboard: a data request export goes through downloadBlob#2691f4947b8
- dashboard: a newer erase error replaces an older lookup error#2698233287e
- dashboard: a partly failed erase or export says so, and the review's focus nit#26989583bce
- dashboard: a preview answering 410 spends the removal link496c130
- dashboard: a stale sign-in refused at approval asks to sign in again#2651ece1ae8
- dashboard: a transient create failure leaves Submit enabled for a retry72f2190
- dashboard: an erased item keeps its notice, and load errors say so#2691bca4a61
- dashboard: asks token entry leaves Next.js's history keys out (promotion audit)31525b3
- dashboard: asks token per path, lookup race, device-verify freshness, React Doctor (promotion audit)7f939b4
- dashboard: clear develop's React Doctor errors and run it on develop PRsf175f2f
- dashboard: clear the three React Doctor error groups on developca4d321
- dashboard: device removal waits for its preview before offering Removeb9e9ddf
- dashboard: device removal waits for its preview before offering Remove22f5f62
- dashboard: device-verify asks for a fresh sign-in without a code too#267703ccdc9
- dashboard: device-verify decides freshness anew and binds who asked (promotion audit)345c36d
- dashboard: drop a data-request answer for an earlier lookup (promotion audit)221a148
- dashboard: enforce the organization name rules before submit#2178835179e
- dashboard: forget a slug's answer when the create dialog resets9305971
- dashboard: forget() cancels a slug check in flight; a 429 reads as a fixed line620b4d3
- dashboard: gate 3 round for data-request and device-verify (promotion audit)07efddb
- dashboard: keep an asks link token per history entry (promotion audit)84b5cf7
- dashboard: key the slack connect 503 on its reason, not its status#2104534a76a
- dashboard: log the asks /f page's failed read and erase, never the token#269262b216b
- dashboard: org settings checks the name only on change and refuses a blank one#2178dad6fa8
- dashboard: pin that the capability shell mounts no session#2651c57c4db
- dashboard: put the run budget default on its input step grid#21664657021
- dashboard: retry after a 408 or 429, and label the URL slug input1b25a2e
- dashboard: spec/2050 gate-3 fix-forwards for the dashboard and the disclosures#2651ab53eff
- dashboard: strip the asks token through Next.js's patched history (promotion audit)d539f6b
- dashboard: the /slack history scopes say crewkit reads recent messages#2651b5e93fc
- dashboard: the /slack page says when a member is asked, as the privacy page does#2611d7e8ece
- dashboard: the /slack page says when a member is asked, as the privacy page does#26119bd759f
- dashboard: the 2194 dashboard fix-forwards: erased items, export, swallowed errors and the privacy link#2691ad259d8
- dashboard: the asks /r and /a pages keep the token tab-scoped, so a reload survives#2696fb09c0f
- dashboard: the asks pages clear the bearer token from the address bar#26963d1b3e0
- dashboard: the asks pages clear the bearer token from the address bar#2696854b6e3
- dashboard: the asks pages log a refused erase and a failed download, never the token#2696b565d60
- dashboard: the asks private link reloads on a path match, so its token is read again#2696f5ed644
- dashboard: the asks private link survives blocked session storage on reload#2696e42cd52
- dashboard: the asks strip's fallback clears the slot and says why (promotion audit)51276d9
- dashboard: the data request export reaches every page#269826feb95
- dashboard: the privacy page discloses Slack's paging cursor#2651ad2fe00
- dashboard: the recovery-cancel page keeps its button after a server error#265195dce21
- dashboard: the run budget cap matches the api's 50#2166f135f57
- dashboard: the run budget submits with advanced open, and org names are checked before submit (#2166, #2178)0afa7be
- develop red after #2795 (census, first-login race test)43c4d54
- e2e: observed link sessions carry the person's aup acceptance, as a real start does#27012a28a22
- e2e: observed link sessions carry the person's aup acceptance, as a real start does#2701b23de7f
- e2e: the silent-approval test says why when no deviceless account is left#249662fe3b1
- e2e: the silent-approval test signs in an account with no device#2496304d566
- e2e: the Slack discussion test retires audit keys in its own organization#20504bc68fa
- e2e: the Slack discussion test retires audit keys in its own organization#205032fcb32
- feedback: a refused send stays recoverable and hideOn follows navigation#2692a38a685
- feedback: a refused send stays recoverable, hideOn follows navigation, and the 2194 component fix-forwards#2692f1f22fd
- feedback: an edit after a lost send mints a new key, and the review's copy and key nits#26924282255
- Sessions Attention hop polish (C-A1 anchor, checked_attention, A2-A5, C-A2..C-A4) + develop sync5b30284
- Sessions Attention outside-review findings O1-O8#2482cdc4dbf
- sessions: a double unprompted-join acknowledgement no longer answers 500#2650339c421
- sessions: an audit-key notice is one job that fans out to its recipients#26846e5fc18
- sessions: bound the artifact custody page by the open-transaction horizon#2025d7ffc73
- sessions: bound the opening lookup's reads and waits, enqueue after commit#2650cd07e71
- sessions: close the review carries on the session row caps#20269747757
- sessions: count session row caps inside the writing transaction#2026ce005a3
- sessions: narrow the analysis worker's session_analysis grants and delete the retired eraser (#2242, #2252)04f1ce1
- sessions: read the custody horizon once per push#20254cddec7
- sessions: redact before the stored cut, and any value under a secret key#2767956ffe5
- sessions: redact before the stored cut, and any value under a secret key#2767e9f69a8
- sessions: redact secret JSON keys in a tool result before the import cut4f87fa4
- sessions: redact secret JSON keys in a tool result before the import cut67e496a
- sessions: redact secrets in turn text and session strings at ingest#2004e179a0c
- sessions: the analysis worker can no longer clear the custody marker#2252715cecd
- sessions: the CLI redacts before it cuts, and over-budget content is dropped#2767f42e31d
- sessions: the data plane redacts secrets in turn text and session strings at ingest#2004366624a
- sessions: the dropped-content warning runs after the session-scope gate#276752eb9b4
- sessions: the keyring discard is tested, and an audit-key notice is one job that fans out#2684422ee00
- sessions: the plane logs a turn content dropped over its decode budget#2767076814f
- sessions: the plane redacts every kept string of a structured event payload#200495d206e
- sessions: the plane redacts full-mode event payloads and repeated-key content#2004e53663e
- sessions: the plane's custody page and row caps hold under concurrent writers (#2025, #2026)4a9adfd
- sessions: the Slack refusal names the org to members only, and audit-key changes mail the admins#26776861e55
- sessions: the spec/2050 hop's carry items#27118379847
Code Refactoring
- api: both opt-ins share OrganizationOptIn.verify_dpa#269047f52ed
- api: drop the cloud job create rescue that ApiErrorHandling already covers#21815ef0c0b
- api: group the feedback inbox items by project once (promotion simplify)34bcda2
- api: simplify the promotion delta24a1f09
- api: simplify the promotion delta7822fea
- api: store_commit_shas reloads only a row that still exists#23281617526
- api: store_commit_shas reloads only a row that still exists, and the paths sentinel names its classes (#2328, #2563)06ee0c4
- api: store_commit_shas rescues a row deleted before its reload, in one query#23280cfbee2
- api: the job callback reuses UserTokenVerifier.iat_value#26549f1aa2b
- api: the purge's two comments read as one block#2690b972316
- cli: factor the harness fold and generate its table for the api#22170f3f82b
- cli: fold the Attention word table and RFC 3339 parse into one place each#24829bce537
- cli: name the held frame's unacknowledged seq#248298e4b93
- cli: one device-id path guard for both device-key callsc34bd81
- cli: one device-id path guard for both device-key calls3ced910
- cli: the device check takes the account it checks#2653755e3ea
- cli: the selector walk peeks a String; the base parser splits fields#249171bfd17
- dashboard: asks and feedback share the clickwrap and retention form#2691f016210
- dashboard: let tests inject the sonner and Sentry chunk loadersdf30e28
- dashboard: move the Sentry loader out of the component file0d1d34a
- dashboard: read the current org id through useOrgId (promotion simplify)7baa532
- feedback: read "on the client" from a store, not a mount effect (promotion audit) (acf6734), closes #2194
- promotion simplify round (staging...develop)a04bc3e
- sessions: delete the retired multi-session eraser#224229bec70
- sessions: share the Room GET and drop a redundant audit key check#2746bcf4b6b
- sessions: the eraser locks its one session#2242c554fdb
0.8.4
CompareFeatures
- sessions: Slack discussions of Session links, spec hop for #20506fe05fe
Bug Fixes
- api: a break-glass override accepts a new HMAC key, and flags erasures after it#2377c714a17
- api: a conversation erasure ends its Slack memberships and their unsent frames#2349a6ebc80
- api: a conversation erasure's leave posts no left line, whoever erases#23494bb2a74
- api: a live re-render's marks get the placement check, and the string shim goes#23773b0dd80
- api: a missing canary while keyed marks exist refuses boot#2377335d99e
- api: a new Slack discussion must carry its starter's Slack id#234701c2184
- api: a re-render goes through ContentSanitizer#237758628c2
- api: a re-upload after the retention sweep still loses an erased Room label#2347efdb73d
- api: a rewritten raw line changes only the label slot#23474ea6875
- api: a saved discussion's label carrying reads back whole in the scrub#24148514826
- api: a saved Slack discussion stores sanitized content#241401c8cb4
- api: a second HMAC key override keeps the first override's time#24143082d4f
- api: a Slack discussion post that is rate limited is retried, not lost#2375d49dc2d
- api: a Slack refusal a caller handles sends no Sentry event#2349924f786
- api: a Slack reply held past the member lock's bound is retried#234923e16b7
- api: a Slack subject's erasure reaches the Room label in members' turns#23471e399fc
- api: a Slack subject's erasure reaches the Room label in members' turns#2347646b143
- api: a Slack subject's erasure reaches what the sweep left#23775a1622c
- api: a soft-deleted organization is still told of a Slack subject's erasure#23778857eac
- api: a soft-deleted organization is still told of its Slack posts' erasure#23776bc5905
- api: a stored turn costs a label query only when it names a Room#2347936d94d
- api: a swept discussion's scrub reads the Artifact under its row lock#2414a09bd9a
- api: a swept scrub writes the erasure kind's label, as a live re-render does#237787e6447
- api: a tombstone records the HMAC canary its starter mark was written under#24142f918d0
- api: account deletion erases Slack-authored records after a Slack disconnect#23350b621ad
- api: add the tombstone's starter HMAC and the erasure's reached conversations#23772e5a49b
- api: an embed refuses a Slack discussion re-rendered during its call#2414cc28ff0
- api: build the predecessor walk with with_recursive and a bound placeholder#23334ae54bc
- api: close five Slack-surface exposure paths from the spec hop#233617737d1
- api: close five Slack-surface exposure paths from the spec hop#23362f009b3
- api: close the gate-3 findings in the Session-link half of #2050#235185fa1ae
- api: close the gate-3 findings in the Session-link half of #2050#235160c0c8a
- api: content writers cannot undo a Slack discussion erasure#2414054e604
- api: erase a Slack subject's discussions, Artifact analysis and backlog sender#2332e1b3d50
- api: erase a Slack subject's discussions, Artifact analysis and backlog sender#23323abc107
- api: erase by a soft-deleted former organization on account deletion#23355188088
- api: erase Slack-authored records after a Slack disconnect#233504596ac
- api: erase the Slack member's ledger rows of an erased person's messages#23516ca41d4
- api: four Slack discussion paths report a refusal they do not expect#234929f658a
- api: hold the Slack-member ledger rule in the database#2351727c128
- api: index the Slack discussion rows waiting to retry#2349bedcea7
- api: keep a Slack-id erasure effective across /clear and the sweep#2333e1fc280
- api: keep a Slack-id erasure effective across /clear and the sweep (#2333) (7692e65), closes #2310
- api: keep the join's error when the opening's cleanup also raises#23517bc208e
- api: keep workspace_ambiguous in the ended_reason CHECK beside slack_member_missing#2336e45c32e
- api: let the Slack-member ledger migration roll back over Slack rows#23516223dd8
- api: match <synthetic> exactly and cover a sighting recorded before the exemption#23128cb72b5
- api: no canary check at boot in development and test#23777e0b85c
- api: one item and one title formatter for the render and the scrub#23773965b31
- api: one Slack member Gate check, the pause notice's included#2414282fbc6
- api: one SlackDiscussionEnvelope#wrapped_room_key reads the wrapped Room key#23497e7bb3a
- api: reach a swept starter's Rooms and Artifacts, and keep the reached conversations#2377b1e9f85
- api: read the app's rate-limit overrides through positive_env#235042cc4b8
- api: read the audit vector in its one test, a literal join the sentinel sees#2355b812d45
- api: refuse a malformed or non-positive rate-limit override#235070b990a
- api: refuse boot when the Slack discussion HMAC key changed under keyed marks#2377f462d20
- api: refuse the ledger migration's rollback while Slack-member rows exist#23516ec6536
- api: retry a Slack discussion line that hit an open timeout#2375e8db0f0
- api: retry a Slack discussion notice that hit an open timeout#23750c6ae83
- api: retry a Slack line or notice that hit an open timeout#23755259d74
- api: rewrite the canary through SystemSetting.set, not a bulk write#23771d4f500
- api: room_member_id is a foreign key that a deleted membership nullifies#2375d53548e
- api: say why the erased-label read keeps both its sources#23470073cc4
- api: scrub a crewkit account's or conversation's posts from a swept Artifact#2377c451269
- api: scrub a saved discussion in place once its discussion row is swept#237794125b8
- api: scrub with a blank subject returns nothing#23775acb14e
- api: Slack posting jobs never tie up the job threads, and a timeout never loses a post#23499bb4836
- api: strip the slash topic before redacting it, so a zero-width hides no token#2336a435ec6
- api: take sealer locks first and write only a current analysis#23321215dac
- api: the #2050 gate-3 findings in the crate vectors, dashboard card, seed and link host#23559b3bf32
- api: the canary reads first, and a database error skips it, reported#2377a15f0a2
- api: the canary's two sentinel decisions, and the erasure path's missing-row test#237749b0ab9
- api: the erased-conversation line test expects the membership to end#23494166b87
- api: the erasure path compares the canary before it relies on the marks#23774135b5c
- api: the erasure path's canary check writes nothing, and the recheck run clears it#237767480f7
- api: the label escape names its block parameter#24144dd765c
- api: the label walk also reads the erasures that reached the conversation#2377a0da009
- api: the line job's session guard is tested apart from the erasure's leave#234917e9e07
- api: the model-sighting detector does not alert on Claude Code's <synthetic> id#2312d393cfb
- api: the model-sighting detector does not alert on Claude Code's <synthetic> id#23129c3f9dd
- api: the opening's first-post report names the Room by its external id#234902963ee
- api: the out-post report names the Room by its external id#23668464ed7
- api: the processing job writes step 1 from the row as committed#2414522fd3a
- api: the recheck run clears the HMAC override before the readers sync#2377202853e
- api: the save and the room re-render take the erasure's locks first#2414b99690c
- api: the Slack notice job posts under the Room's poster lock#23753c7ed51
- api: the Slack posting jobs never tie up job threads or lose a post#2349010d32f
- api: the Slack re-check backstop re-runs a lost line or notice retry#23756d84185
- api: the Slack re-check drains a Room whose frame retry is due#2349a38bb18
- api: the Slack re-check runs its retry backstop before the readers sync#23494c18c8d
- api: the smaller gate-3 findings in the Slack half of #2050#23501856fa7
- api: the smaller gate-3 findings in the Slack half of #2050#235041e6c96
- api: throttle Slack events per team and end ambiguous or revoked discussions#2337d951c16
- api: trust Cloudflare's ranges from a repo-owned list loaded at boot#179655f55f5
- api: walk the predecessor chain and stamp swept Rooms for Slack erasure#2333afaf602
- api: warn when the waitlist cap override is not an integer#23500672f78
- api: write a saved discussion's processed content with its marks#2377c4bcb7c
- api: write the starter's keyed HMAC on the tombstone at opening#2377279df65
- cli: a busy link-state lock is a Storage failure#2376958465f
- cli: a curated link failure logs its cause once, naming the op#235315dac0a
- cli: a device's hold time is shown only when it is a timestamp#2376c4d7fe1
- cli: a Leave whose Room lookup fails answers curated#23760ff635a
- cli: a link lookup that panics is logged before its fail-closed answer#2353be2e971
- cli: a link or control line that reaches its cap without a newline is refused#237660b7977
- cli: a relay refusal reaches the person as its closed code and status#237682db7b2
- cli: a server connect_url is shown only on the dashboard's own host#237630023d1
- cli: a server connect_url reaches the agent only as an https URL#23765e19601
- cli: a server refusal code reaches the agent only as a plain identifier#237689959e1
- cli: an unconfirmed send names only a permission mode crewkit knows#23762c8c9c2
- cli: an unreadable control request's cause goes to the daemon log#23761e0c21d
- cli: answer a bad sidecar control request without holding the loop#2372b95cc4a
- cli: apply the link hook to every Room when one fails#235224ce060
- cli: bound the lock test's wait and pin every printed ordinal to the cap#2352c1baed3
- cli: crewkit's own Session link refusals keep their words at the curated seam#2416a44da8a
- cli: drain an over-cap link or control request before closing#2372eb82541
- cli: drain an over-cap link request before closing#23729d75e21
- cli: drain an over-cap sidecar control request before closing#23729f260ea
- cli: every error converted into a link reply is curated#2376e54289d
- cli: fetch the Slack discussion backlog by POST#23513bb7e71
- cli: keep claude's exit code when the terminal has gone#24019100eac
- cli: link_mode refusals name the terminal alternative again#23535d59561
- cli: log a failure without building a message to discard#23768e27027
- cli: read_capped reserves at most 64 KiB, not the whole cap#23534ac2e24
- cli: refuse an over-cap link line with a parsable prefix, and name no path#2376faecb27
- cli: Session link refusals keep crewkit's own words#2416c3b7ea6
- cli: the allow-file refusal names no path#23761964d4e
- cli: the control peer gets a constant for a request it sent that could not be read#2376fce75bc
- cli: the link owner answers a request it cannot parse#2353f6546aa
- cli: the link owner answers a request it cannot parse, and owner.rs splits#23537c4b63e
- cli: the link owner curates Leave and Status errors and logs the raw cause#2353bff1414
- cli: the person's own link commands keep their words through the curated seam#237663f1033
- cli: the session-ended line prints outside the guarded window#2401e69df84
- cli: the session-ended line prints outside the guarded window#240114e6de3
- cli: the window comment no longer claims the line's EIO exits quietly#24016a47e8c
- dashboard: default the memberships handler, check the whole ProfilePage#235516b1b1a
- dashboard: disclose Slack discussions in privacy section 6 and disconnect dialog#23460cf3e6f
- dashboard: disclose Slack discussions in the privacy policy, retention schedule and ROPA#2346be52d9f
- dashboard: move leaveForSlackInstall to the install hooks, add account handlers#2355beee6dd
- dashboard: say a saved Slack discussion is analysed and indexed at save#23460bc4d62
- dashboard: the Slack discussions card says each refusal in a sentence#241362f6b08
- dashboard: the Slack discussions card says each refusal in a sentence#2413d902f2e
- e2e: keep session-link's runRailsCommand wrapper on one line#23556ae35ca
- e2e: let stop() run twice, move the relay CI guards to module scope (#2355, #2361)a79d825
Code Refactoring
- api: hold a post for retry in SlackDiscussions::OutPost#23750693c1c
- api: one copy of the line and notice retry glue in OutPost#23753c6544a
- api: one mismatch? comparison for the HMAC canary#23774e95c21
- api: one VersionedLegalText concern for AupVersion and DpaVersion#18209d65f6c
- api: reuse the discussion Artifact helper in the #2335 tests#2335f863a76
- api: simplify the spec/2050 hop diff015e1d2
- api: strip the slash topic through ContentSanitizer.clean#2336ba4c56b
- cli: fold the reduce step's edits into the #2352 diff#2352abcc0ba
- cli: move session_link's helpers out of commands::link and commands::mcp#2357e42014d
- cli: move the Room label fixture test beside the MCP renderers it reads#240891e2a4f
- cli: simplify the spec/2050 hop difff39dc13
- cli: split the link owner's wire types, socket and discussion ops out of owner.rs#23532b2902d
- cli: write_held answers its text instead of writing to a dyn Write#235705b5cfe
- dashboard: simplify the spec/2050 hop diff5b5f063
- monorepo: simplify the spec/2050 hop diff3abece9
0.8.3
CompareFeatures
- api: expose content_retracted_at on resource versions#2152787d736
- api: model-sighting detector also reads Rails-priced session and Task model ids#2148b588494
- api: show a retracted resource version as retracted#2152089d87f
- cli: show the Conversation name in the statusline and TUI title#209271684b7
- cli: show the Conversation name in the statusline and TUI title#20923656996
- dashboard: badge retracted versions in the admin version lists#21528df50eb
Bug Fixes
- api: an organization name also refuses U+061C, U+200E and U+200F#223682189cd
- api: an organization name also refuses U+061C, U+200E and U+200F#22365cd99a5
- api: an unanswered feature switch keeps only the records it governs (#2260) (8ddf942), closes #2253
- api: charge switch reads, keep GitLab malformed answers, memo the re-verify (#2260) (30f6c35), closes #2253
- api: classify a transcript turn from its whole trimmed text, never a cut head#223502213b8
- api: close four remaining secret-redactor misses#2176b9d5984
- api: gate-3 fixes to the harness-tag neutraliser#2158e7635b2
- api: keep a GitLab commit whose re-read is not an object#227910132ec
- api: keep a GitLab record whose 200 body is not an object#2279320d6fb
- api: keep a GitLab record whose re-read is not an object, and un-vacuous four log refutations#22796deacd2
- api: lex comments out of the coverage guard, transcode non-UTF-8 text#21584200e1f
- api: neutralise harness tags at every API prompt seam#2158ffafdac
- api: pin the harness-tag list and neutralise harness tags at every API prompt seam#215893e121b
- api: pin the server's harness-tag list to the CLI's#2158a79a37c
- api: pin the unanswered switch's report and the persistent-refusal bound (#2260) (197c7fd), closes #2253
- api: re-verify after a present slice, and pin GitLab's privacy defaults (#2260) (070cbf5), closes #2253
- api: the Asks notice isolates the privacy officer's title and contact#2184b4bb149
- api: the nightly reconcile re-reads code-host records and deletes host deletes#1528e3a8e43
- api: the nightly reconcile re-reads code-host records and deletes host deletes#152816184bf
- api: the privacy officer fields refuse line breaks and direction controls#2184eb381b5
- api: the privacy officer fields refuse line breaks and direction controls#2184b899f85
- api: the privacy settings refuse a value that is not text#2184409bbaa
- api: the transcript classifier trims leading whitespace and never cuts the head#2235164b99e
- api: the transcript classifier trims leading whitespace before it cuts the head#223528d5537
- api: the verify sweep keeps records on a disabled feature or a malformed 200#226034052a5
- api: the verify sweep reads a record once a run and never deletes a lost repository#15282ffa938
- api: verify sweep keeps records on a disabled feature or a malformed 200 (#2260) (510b56d), closes #2253
- ci: plane pin refuses a live digest that moved since the decision#2179dd75903
- ci: say why the plane update's stderr is withheld#21797506800
- cli: keep the remote-control test's doc on its own test#20927f408b2
- cli: name the agent binary's version plainly in withheld-flag notices#20927104ba1
- cli: restore the single spaces in the withheld --name notice#20920325f79
- cli: say crewkit could not confirm the option when the version is unknown#2092b887ce5
- cli: treat an unparseable agent version as unknown in withheld notices#2092cc2e925
- cli: withhold --name from an agent binary too old to have it#209270b1ef4
- dashboard: disable Rollback on a retracted version and say why#2152fb6e9ea
- sessions: bound the ack read and log the custody shortfall#1787cdb7020
- sessions: bound the eraser's lock wait and keep the cache on refusal#177769faf96
- sessions: cover the retired multi-session eraser's lock#177735885d2
- sessions: data plane /readyz sets Cache-Control: no-store#2179d4b072c
- sessions: keep a rejected push's body prefix in its error#1787cc32bd6
- sessions: report analysis custody by an unreported-row marker#17872a6d7f3
- sessions: report analysis custody by an unreported-row marker#1787a114b0f
- sessions: serialize session ingest writers with the erase arm#1777b1a5611
- sessions: serialize session ingest writers with the erase arm#1777e79bd2a
Code Refactoring
- api: bound the merge-request name and pin its whole-name check#207929c544e
- api: one shared display-name cleaner for publisher and MR author#20790c4dda9
- api: one shared display-name cleaner for the Ask publisher and the MR author#20797a4e213
- api: simplify the promotion diff's API changesd04a173
- dashboard: one helper for a version's Rollback propsd4daebe
- monorepo: asks notice's t checks its bound before reading4e4b0f4
- monorepo: reflow ReadBudget's header, pin versionRollbackPropsbe8569f
- monorepo: simplify the develop -> staging promotion diffccab8bf
- sessions: drop a redundant accepted-list intersection#1787997c63c
0.8.2
CompareBug Fixes
- api: bound the publisher name before the domain check#21645a60531
- api: close the promotion audit's #2135 gaps#216387eb701
- api: cut every outside name through User.cut_name#21641d6b597
- api: end a token value by its opening quote, one refusal predicate#21658b8eb92
- api: join only String SCIM name parts, pin an oversized cluster#21645cf52ee
- api: redact a token holding a backslash whole again#2165d5775c0
0.8.1
CompareFeatures
- api: release a GitLab claim left reconnect_required for 30 days#14086ca12de
- api: verify and store the audit copy signature, and check each frame's chain link (c5cf48e), closes #1917
- api: wake Session link streams on revoke with LISTEN/NOTIFYba552f5
- cli: sign and verify session link audit copies in the exchange protocol (f08e174), closes #1917
- cli: sign audit copies on send and verify them in audit read (194b98f), closes #1917
- dashboard: verify session link audit copy signatures and report gaps (dd35738), closes #1917
- sessions: sign Session link audit copies and verify them on read933f120
Bug Fixes
- api: bound the revoke-wake probe on a half-open socket (d566969), closes #1937
- api: delete an organization's resources children first4fa51a2
- api: destroy an org's adoptions before its resources on a real delete (7bdf050), closes #1960
- api: destroy an organization's resources children first (91f67ec), closes #1960
- api: keep dependent: :destroy on an org's resources (a9baf7a), closes #1960
- api: refuse small-order Ed25519 keys and lax signatures at the relay and enrollment (e646225), closes #1917
- api: release a dead GitLab claim no sooner than 7 days after its warning#14088ad878b
- api: report an unavailable directory root and keep the frame hash out of hidden state (3c612c5), closes #1917
- api: restore the small-order R refusal in verify_raw (9bce271), closes #1917
- api: share one notice helper, clear signing tokens on abandon, isolate sweep failures#1408d7d0177
- api: validate the audit checks apart and stamp a leaver's last sequence (c63b501), closes #1917
- cli: don't auto-open a browser over SSH or without a display (ed3eeda), closes #1963
- cli: end the not-evidence heading with a period and say a stopped read is partial (8a4247a), closes #1917
- cli: explain a refused first enroll, and don't auto-open a browser over SSH13246f7
- cli: keep a malformed device code out of the fallback verify URL (cab917b), closes #1963
- cli: keep rate limits and server errors typed on device-key calls (49d61f4), closes #1963
- cli: name every audit label and the dashboard's gap headings (9259a82), closes #1917
- cli: read an audit sender entry issued after receipt as unverified, like a stale one (b5c545e), closes #1917
- cli: read badly sealed and swapped audit copies by the crate's rules (ecc7098), closes #1917
- cli: read badly sealed copies, swapped peer copies and unknown versions by the audit rules (ef38f13), closes #1917
- cli: say "the first copy" when a stopped read checked one (d90a4be), closes #1917
- cli: say a recovery was rate limited instead of lost (652c8be), closes #1963
- cli: say the audit identifier lasts as long as the copy is kept (5ced54f), closes #1917
- cli: show the dashboard URL when no browser can open in the TUI (fdbe785), closes #1963
- cli: tell a refused first enroll how to get a fresh sign-in (0c8bcb0), closes #1963
- cli: validate a session link before showing it where no browser opens (4261e5c), closes #1963
- dashboard: audit page labels, gap headings and pagination per gate 3 (4d55ab2), closes #1917
- dashboard: follow audit copy pages, check the sender key's point, one entry window (849f0e5), closes #1917
- dashboard: give the audit page's paging loop a real condition for the React Compilerbc50f28
- dashboard: give the audit page's paging loop a real condition for the React Compiler (3b43f5c), closes #1917
- dashboard: read badly sealed and swapped audit copies by the crate's rules (2c5af98), closes #1917
- dashboard: refuse malformed absent ranges in the audit copy listing (0a7e194), closes #1917
Code Refactoring
- api: check only the small-order key OpenSSL would accept (a4cecb9), closes #1917
- api: check the signature length once, in verify_raw (84dfe0b), closes #1917
- api: enqueue the claim re-walk from link, keep inspect_project read-only#14087da60b0
- api: inject the revoke-wake connector in tests, not through start! (84f123a), closes #1937
- api: keep only the Ed25519 checks OpenSSL lacks (41864c6), closes #1917
- api: memoize the children-first depth walk and share the chain helper (3150b61), closes #1960
- api: read the claim trigger's refusal once in persist_lineage#1408a739d6b
- api: skip re-reading the warning just published in the dead-claim sweep#140872c92f5
- cli: judge a sender entry snapshot entirely at its receive instant (99c77d4), closes #1917
- cli: share the session-phase test setup and summarise run_shutdown_async#14089c129ff
0.8.0
Compare⚠ BREAKING CHANGES
- api: POST /api/v1/:org/observability/sessions/:id/gateway_requests is removed and answers 404.
Features
- api: answer Service#answering? and room_refusal from SQL (655615c), closes #1835
- api: backfill the ingest secret redaction over stored structured session eventsb6d17e9
- api: cap an organization's open Session link streams by its plan (974a211), closes #1837
- api: DSAR serves a subject's crewkit-held blueprints, annotations and shares0601c9d
- api: export an Ask's results as CSV or JSONffd2491
- api: export an Ask's results as CSV or JSON (3f06d53), closes #1802
- api: give each Ask in the project list its unread and decided counts (364fdce), closes #1817
- api: install the Service answering and room refusal functions (fadf2a2), closes #1835
- api: install the Session link policy functions as a NOLOGIN owner (830c3d6), closes #1833
- api: install the stream check, frame read and slot lease in SQL (4e6313a), closes #1836
- api: install user_token_refusal_v1, the token verdict in SQL (c053355), closes #1834
- api: make SessionLink::Gate one call to session_link_gate_v1 (23fbe3c), closes #1833
- api: mint DSAR anchor chunks and prove completeness from redemptions (e415528), closes #1785
- api: org-wide Asks list, GET /:org/asks?view=mine|needs_me|all (f9fc20b), closes #1828
- api: per-plan cap on open Session link streams191149b
- api: pin the minted scope verdict roots in the API and the CLIe4acd6b
- api: pin the minted scope verdict roots in the API and the CLI (68b2263), closes #1778
- api: platform-admin rollup of domains by detected DNS host1b49465
- api: record the declared resource version a Service session runs8163f34
- api: record the resource version a Service session runs (eee88b7), closes #1781
- api: recover Session links after losing every device1e13a2d
- api: recover Session links after losing every device (3c1245c), closes #1790
- api: restore a soft-deleted project or organization inside the purge window#153871d4075
- api: restore a soft-deleted project or organization inside the purge window#15387ea0c8d
- api: roll up organization domains by detected DNS host for platform admins (5eb7d73), closes #1782
- api: run the stream's check and frame read through the SQL functions (e814441), closes #1836
- api: serve a subject's crewkit-held blueprints, annotations and shares in DSAR (ef24106), closes #1907
- api: Session link policy in SQL, part 1: hardened installer and gate functions02172ef
- api: Session link policy in SQL, part 2: the token verdict98a3705
- api: Session link policy in SQL, part 3: Service answering and the Room's service refusal1c984ce
- api: Session link policy in SQL, part 4: the stream check, frame read and slot leasee565ace
- api: Session link policy in SQL, stage 1 (spec #1831)81e6545
- api: take the token verdict from user_token_refusal_v1 (f3e7e07), closes #1834
- cli: bind a Service answer to the text the scope judge approved (#1935) (f14f08d), closes #1778
- cli: blueprint gateway uploads through anchorsee0f0c1
- cli: blueprint gateway uploads through anchors (98963d3), closes #1558
- cli: create and read the session link audit key from the terminal2a99dc5
- cli: create and read the session link audit key from the terminal (1f084ce), closes #1772
- cli: crewkit device recover, and warn peers of a recovered key (67248f9), closes #1790
- cli: declare a Service's resource by id, and republish it (64b8a0d), closes #1781
- cli: explain device_on_hold, and never auto-admit a recovered device (160cf0d), closes #1790
- cli: send the resource version a Service runs at publish (60ad638), closes #1781
- dashboard: add Asks to the sidebar with an org-wide list (53b2b9c), closes #1828
- dashboard: banner on lead-less workspaces for managers01e76f0
- dashboard: banner on lead-less workspaces for managers (32aa32a), closes #1908
- dashboard: cancel a device recovery from its notice (dcf1cf3), closes #1790
- dashboard: download an Ask's results as CSV or JSON (bdfa470), closes #1802
- dashboard: give an open Ask its own tone and a title, status and tally tag (4d89264), closes #1817
- dashboard: lay an Ask's results out in one zone per question with a Decision footer (8bbdd16), closes #1817
- dashboard: list a project's Asks in a table and name each by its title (ec73f79), closes #1817
- dashboard: org-wide Asks list with Mine, Needs me and All viewsd8ff11f
- dashboard: point the audit page to the CLI as the recommended path (21db157), closes #1772
- dashboard: publish security.txt and a /security abuse and disclosure page8f9a610
- dashboard: publish security.txt and a /security abuse and disclosure pagef2b443d
- dashboard: rebuild the lead's Ask pages to the approved mockupsd2adfe3
- dashboard: route PostHog through a same-origin /ingest proxy (57eb654), closes #1816
- dashboard: split a published Ask into Results, Questions, Sharing and Activity tabs (28fd7f4), closes #1817
- dashboard: the Ask page's meta line says until when the Ask is open (8106b93), closes #1814
- sessions: data-plane closeout, spec hop for #15119791e8c
- sessions: DSAR answer covers anchor rows and every subject tablec5372aa
- sessions: redact-stored-events, a one-shot backfill of ingest redaction over stored event payloadsf74f885
- sessions: serve anchor and session-door rows on the DSAR subject file (0c53f79), closes #1785
Bug Fixes
- api,dashboard: round 3: refresh keeps amr and idp, cancel card follows the theme (838d8ad), closes #1790
- api: a missing free plan is a generic 500 on every path (d0355bd), closes #1826
- api: accept a confirmation without schema_version as the legacy version, and spec/1511 review follow-ups1b2efaa
- api: an Ask still refuses password=value as a credential2a4add6
- api: backfill redaction by the mode a row was stored under, and through what it derived74ecd7c
- api: backfill the ingest secret redaction into stored tool turns, and say it redacts strings onlyd8988b3
- api: build each org's rectification payload from that org's identifiers only8c59d08
- api: carry the stream pool envs in the api-stream fragments (0fb9a20), closes #1804
- api: count an unreadable User or membership version in the org-scoped rectification report8dc9be4
- api: count rails solid_queue:start as a job process for the stream pool (2125b0e), closes #1804
- api: count telemetry_mint_days among an org delete's hard-deleted kinds9895077
- api: count the export cap after authorization, one retention scope (b8ff668), closes #1802
- api: decide an org's legacy match from everything it owns#1538fb09f19
- api: declare five index actions that have no collection for a policy scope1f874e4
- api: declare five index actions that have no collection for a policy scope72be496
- api: DSAR mint resolves uploaded and agent-comms content3f22c6d
- api: erase a past email a version recorded as its after value5e2a8f1
- api: every organization is created with a subscription0b77261
- api: every organization is created with a subscription (b886d54), closes #1826
- api: expire Devise confirmation tokens after 3 days; record no mail tracking in the ROPA61211bc
- api: flag a secret redacted at ingest in a kept tool_response toof297d4a
- api: gate 3 for device recovery: cancel commits, B2 prior key is attested (000bfd0), closes #1790
- api: give api-stream's health check a 30 s start delay5fdffdc
- api: give api-stream's health check a 30 s start delay1fe601d
- api: harden the Session link policy installer and mask a deleted organization's stream (5a57ae6), closes #1831
- api: install libvips on the buildpack build and surface its LoadError8d54ca6
- api: install libvips on the buildpack build and surface its LoadError020f7a8
- api: install the link policy owner without an inheriting self-grant621535e
- api: install the link policy owner without an inheriting self-grant (65c464d), closes #1838
- api: keep a process that runs jobs in Puma off the stream pool (01d4cb8), closes #1804
- api: keep every entry when redacted hash keys collide in redact_strings971a343
- api: keep reencode_with_vips private and correct the test's account of the failurea28c80a
- api: keep the job supervisor off the stream pool and check the pool after a change (3f81d53), closes #1804
- api: let api-stream reach primary through a PgBouncer transaction pool (1220d3a), closes #1804
- api: log the transcript rerun and name its outermost-transaction premised1016dc
- api: log which cap refused a Session link stream, and pin the plan cap's 429 (ee2ec4b), closes #1837
- api: make the creator of a workspace its lead (CREW-31)56a2b9f
- api: mark a charge answered only for its own Service (3ec5d99), closes #1781
- api: match the relay-grant report exactly, log a deleted organization's refused frame, and check the wizard's cluster (4c3f115), closes #1831
- api: migrate in a PRE_DEPLOY job before any service boots new code4c55368
- api: migrate in a PRE_DEPLOY job before any service boots new code (93eb124), closes #1838
- api: name an inheriting grant the link policy install cannot rewrite (ef45677), closes #1838
- api: name the Live thread behind api-stream's pool size; keep secondary pools per thread (7ff343c), closes #1804
- api: name the policy owner by its constant in the public-CREATE query; verify TLS in the #1838 wizard (74fdc3e), closes #1831
- api: name the pull's anchor enable for the first enable it performs and keep a raise out of the pull's answer2c250d2
- api: name the stats isolation correctly and pin each skipped predicate55a69c1
- api: name undeclared planes through one predicate; report the anchor-door shut and reopen it on a declaring pull300f7c3
- api: opt every mail out of SendGrid click and open trackinge72c0b3
- api: opt every mail out of SendGrid click and open tracking5128be3
- api: order the Asks list by last edit, clamp paging, skip deleted projects (252fb07), closes #1828
- api: pin the start delay exactly and state the ~55 s tolerancedf4ab60
- api: quiet telemetry requests per thread instead of swapping the global logger926af9d
- api: read an empty lc_messages by asking Postgres to word an errora7d118e
- api: read an erasure confirmation without schema_version as the legacy v168b4147
- api: read the solid_queue:start task from Rake, where it survives to boot (2cf7e50), closes #1804
- api: redact a backfilled session's derived copies before its rows, and retract a document that can no longer be rebuilt5a9a8b6
- api: redact Session link pairing links and bare codes as the contract does8e6077f
- api: refuse a held recovery key at Room admit with its own code (e169bcf), closes #1790
- api: refuse an erasure-log confirmation without a supported schema_versiona2f687e
- api: refuse anchor mints for orgs in minimal capture (7beec2b), closes #1558
- api: refuse Ask values on token shapes only, keep the broad patterns for redaction19288cc
- api: refuse inherited public CREATE and extra owner members, and name each slot cap (c10d631), closes #1831
- api: report a failed rectification-payload retire step to Sentry by error class8798ca2
- api: report a relay login without its grant at boot instead of refusing, and refuse a deleted organization's frame as its own (460ccd6), closes #1831
- api: rerun a transcript batch once when a migration expired its cached planbf1cb5f
- api: resolve uploads and agent-comms mail into the DSAR mint (ef17a09), closes #1898
- api: restore a skill adoption with its drift status, and date the legacy fallback#1538b898723
- api: restore an org's own children and name other conflicts#1538ab31a2a
- api: restore what a parked project kept, and say what it did not#1538e6e6ef5
- api: retract only a session's thread document in the redaction backfill, never its agent notes45862b7
- api: round 2: ownership before held, no fallback auth_time at approve (42ad336), closes #1790
- api: route api-stream's primary through a PgBouncer transaction pool5ed7525
- api: run db:prepare in the db-migrate job so a fresh database deploys (55d201a), closes #1838
- api: scope the mailer opt-out test to app mailers and Devise; drop the redundant enable_texta6dcb64
- api: secret-redact hash keys in kept structured values2c8484d
- api: send an account-level address only to the orgs that held it47e76ee
- api: send no-transform on every SSE response so an edge cannot buffer it0e60308
- api: send no-transform on every SSE response so an edge cannot buffer it (38c4e4e), closes #1883
- api: Session link policy follow-ups from the #1889 spec hop2e480e4
- api: show psql's own connect error in the #1838 wizard, and drop a sentinel assertion that pinned nothing (959b2e4), closes #1831
- api: size api-stream's pooled DB_POOL at twice its threads9be172a
- api: size api-stream's pooled DB_POOL at twice its threads (21ef23f), closes #1804
- api: size the staging db-migrate job at one App Platform accepts (ea76bd9), closes #1838
- api: skip a rectification payload for an org that no longer exists7006ed0
- api: stamp a restorable child's dependents and restore them exactly#15385c55dd7
- api: stamp a Service's declared resource version server-side (68eb48b), closes #1781
- api: stop calling an unfinished DSAR close completed (1f9aba1), closes #1898
- api: stop Puma corking response sockets so SSE writes reach the client40e3103
- api: stop Puma corking response sockets so SSE writes reach the client (2a47547), closes #1883
- api: stop the empty-lc_messages false alarm; eager-load project_repository on the projects indexa7801ed
- api: stop the telemetry logger swap leaking across threads; rerun an expired-plan transcript batch20f9f30
- api: tell the operator to re-open an incomplete DSAR request (eecd723), closes #1898
- api: treat a failed lc_messages probe as a failed read, not a verdict99530d2
- ci: approve integration device codes with a real sign-in's amr and auth_time9955442
- ci: approve integration device codes with a real sign-in's amr and auth_time (f7c3d76), closes #1790
- ci: brace the prompt escapes shellcheck read as an array index (c7ab8e3), closes #1778
- ci: carry amr and auth_time onto the gen_tokens refresh row (058d694), closes #1790
- ci: compare migrate-from-zero versions as sets in a private directory (452b282), closes #1882
- ci: give each migrate-from-zero run its own directory and compare version sets06ae933
- ci: list subtle in the exchange protocol fuzz lock file722876f
- ci: list subtle in the exchange protocol fuzz lock file3c73af2
- ci: name the migrate-from-zero artifact per run attempt (8babdac), closes #1882
- ci: pin the verdict-root wizard to the crewkit doctl context and retry IAM (b5700f8), closes #1778
- ci: read the cluster of the database the api service binds in the #1838 wizard, and ask when the spec names none8909765
- ci: stamp amr and auth_time on dev and test-credential tokens (2f669a0), closes #1790
- ci: upload a failed migrate-from-zero directory, then remove it (42a173a), closes #1882
- cli,dashboard: round 2: explicit held device, forget the token, no capability-route replay (7383f0a), closes #1790
- cli: bound every keyring call and refuse a Secret Service that hangs (583e3fc), closes #1772
- cli: flatten the init --join lookup and pin the fixture census (CREW-30)d03d286
- cli: gateway uploads need an ingest_url, with no Rails fallback (25a16c9), closes #567 #1463
- cli: gateway uploads need an ingest_url; drop the Rails fallback775ee5e
- cli: give the Keychain time for its prompt and name a key that may land late (fbec221), closes #1772
- cli: join an existing workspace with init --workspace --join (CREW-30)3e101dc
- cli: join an existing workspace with init --workspace --join (CREW-30)6260f84
- cli: judge an audit copy's room by its header, not crewkit's listing (6a0a664), closes #1772
- cli: lower the Session links Claude Code floor to 2.1.299fd0a446
- cli: lower the Session links Claude Code floor to 2.1.299 (f1caf68), closes #1795
- cli: panic on a secret pattern that fails to compile instead of dropping it743a40c
- cli: print the session-scope notice only after claude has exited9a2561d
- cli: print the session-scope refusal notice after claude exits6671555
- cli: read the blueprint anchor's ingest_url through resolve_ingest_targetaeb3135
- cli: read the pairing patterns from the contract crate; take the merged fixture censusdac6541
- cli: refuse an audit copy built on a low-order ephemeral key (ac4ddd2), closes #1772
- cli: say audit keys stay on a logout only when a file-set holds them (de07c12), closes #1772
- cli: settle a lost recovery's staged key, and explain held keys on send and join (d61b1a2), closes #1790
- cli: settle init --join review findings (CREW-30)3ae844a
- cli: skip an organization that cannot list its workspaces on init --join (CREW-30)62b3f49
- dashboard: a solid focus ring on every Button variant in both themes (7877ba8), closes #1871
- dashboard: a solid focus ring on the cancel button in dark mode (b28994a), closes #1790
- dashboard: admit the artifact storage origin in the CSP img-src9a41cba
- dashboard: admit the artifact storage origin in the CSP img-src (1d40a1f), closes #1751
- dashboard: align an untitled Alert's icon and raise the warning border to 3:177e07da
- dashboard: align untitled Alert icons to the first line, raise warning border to /70 (403e6a8), closes #1924
- dashboard: announce the submit bar's progress once (1adc43f), closes #1814
- dashboard: apply a remembered Ask page theme before the first paint (caa6464), closes #1814
- dashboard: count a revoked person's link in an audience's N of M (51dfc54), closes #1817
- dashboard: darken the status text tokens so every status badge reaches AA (6868843), closes #1817
- dashboard: drop the always-false aria-expanded on Add a comment (60aca4c), closes #1814
- dashboard: drop the duplicate api-health inline-handler exception kept by the mergebc3d745
- dashboard: drop the outline button's leftover ring override on the cancel page (efed845), closes #1871
- dashboard: export errors for 413, one busy state, one path scrub (2aad076), closes #1802
- dashboard: fit the Asks table on a phone without hiding the new marker (0f8f3c3), closes #1817
- dashboard: give the Ask page's option cards and radio circles 3:1 boundaries (cafead3), closes #1814
- dashboard: keep an Ask's new marks through tab switches and other readers (c5b7efe), closes #1817
- dashboard: keep an Ask's tally row in reading order on a phone (7b48fdc), closes #1817
- dashboard: keep focus on the results summary after Mark all as read (2b7698d), closes #1817
- dashboard: keep the Asks columns in view and the old org's rows out (ba70f49), closes #1828
- dashboard: keep the Asks list's conversation summaries out of session replay (949ff7c), closes #1817
- dashboard: keep the Button border colour on focus (0595664), closes #1871
- dashboard: keep the cookie banner's usePathname inside a Suspense boundary (68ede94), closes #1879
- dashboard: keep the public shell's focus outline off shadcn Buttons (2519245), closes #1871
- dashboard: keep the root cookie banner's usePathname inside Suspense0e2cfb5
- dashboard: key untitled-Alert alignment on a direct-child title only (5430a0b), closes #1924
- dashboard: let UpgradeBanner read in the warning variant's colour (46a0ae4), closes #1924
- dashboard: log /ingest misconfiguration and upstream failures (b3e4f07), closes #1816
- dashboard: log a route label, not the path, on /ingest upstream failure (5a0f9ea), closes #1816
- dashboard: mark an unread face with its border, not a ring over its neighbour (1f60aef), closes #1817
- dashboard: match the asks origin parse and test the build-time refusal (08bb4d4), closes #1751
- dashboard: never show the last view's Asks while another view loads (d48fba3), closes #1828
- dashboard: no replay or banner on the recovery cancel page, and keep its token under StrictMode (7f771e5), closes #1790
- dashboard: offset the Button focus indicator from the fill (156b7d7), closes #1871
- dashboard: one short CLI pointer per audit card, commands as code (733db86), closes #1772
- dashboard: opening Report this page moves focus into its form (e215a3e), closes #1814
- dashboard: polish the Asks rows after the design critique (9f8a69c), closes #1828
- dashboard: put hand-rolled warning Alerts on the warning variant (4627c0e), closes #1924
- dashboard: read the Asks list's counts from the list, never each Ask's results (82c3a7a), closes #1817
- dashboard: read the recovery cancel token without setState in an effect (b8b18b5), closes #1790
- dashboard: refuse the shared Spaces endpoint and a trailing dot as the asks image origin (19e039b), closes #1751
- dashboard: return from an Ask to the Asks list's view and page (f87160c), closes #1828
- dashboard: route PostHog through a same-origin proxy that checks the project key7d4e723
- dashboard: say beside Send what it waits on, and jump to it (4f6154e), closes #1814
- dashboard: say when a verified domain is not the one Asks use (7c828a9), closes #1817
- dashboard: say when prompt-cleanup status fails to load on the Data Plane cardd152b50
- dashboard: show a focus ring on an Ask page's tab panels (1c7003f), closes #1817
- dashboard: show the Audience label alone on the French Ask page (955a0b3), closes #1814
- dashboard: show where focus went after Mark all as read (a853af1), closes #1817
- dashboard: solid focus ring on every Button variant91ceda4
- dashboard: start an Ask's new-mark snapshot afresh for each Ask (7e344ca), closes #1817
- dashboard: take an Ask's new-mark snapshot only from results fetched on this visit (f33209c), closes #1817
- dashboard: the Ask page as the approved decision sheet, with a theme switch#181468addde
- dashboard: the Ask page's language follows the EN/FR toggle (WCAG 3.1.2) (bbb42ef), closes #1814
- dashboard: word pasting the audit key as the read card's fallback (621a141), closes #1772
- dashboard: wrap UpgradeBanner's version row at narrow widths (2dc3e76), closes #1924
- secret-redact every string a kept tool_response holds (ac5c8cb), closes #1686
- sessions: keep one fixed text per obligation log event818417d
- sessions: log the rectification objects refusal; expect on the capture-floor stats lock; reorder the anchor door's documented checks638dc74
- sessions: say a blocked cursor leaves the obligation owed, on any stream3e5771c
- sessions: scrub capture-floor vectors and prose before strings, fail closed on an unreachable vector storea642936
- sessions: secret-redact every string a kept tool_response holdsc78de86
- sessions: secret-redact object keys in kept structured valuesfb2fced
- sessions: suffix colliding redacted keys in order of the original keys on both redactors326f7fc
- sessions: word the obligation puller's logs by stream1dfa1a4
Performance Improvements
- api: count the DNS-host rollup in SQL, not in Ruby (ab05b36), closes #1782
- api: eager-load project_repository on the projects indexbf2952c
Code Refactoring
- api: delete the Rails gateway-capture ingest route (4d8fb9a), closes #567 #1462
- api: keep Gate#expired? only in the test reference, drop unread discovery includes (6a73e32), closes #1833
- api: name the OTEL request batch cap for the one route it capsfa46473
- api: one supported_schema_version? for the erasure-log pull and its confirmation11bf707
- api: read the detector's provider enum directly in the rollup (688f67d), closes #1782
- api: resolve a DSAR page's references once per kind; move the held-artifact query into DsarCrewkitHeldRecords61192b3
- api: resolve the guard's default task list inside jobs_in_process? (3e66ae6), closes #1804
- cli: compute the audit key fingerprint in one place (8113a52), closes #1772
- cli: derive each keyring's bound and refusal from a Place enum (793ecd3), closes #1772
- cli: derive the gateway's end report from its one uploader fieldd9e89a0
- cli: drop the audit key low-order check that can never fire (3597242), closes #1772
- cli: hold the gateway's ingest target as one three-state value7358f7d
- cli: one producer() for every plane envelope; type the anchor's project id7e3fa1b
- cli: read each held audit key once (a7d1fbf), closes #1772
- cli: send every session /end through one drop-count sequence78a8934
- dashboard: inline the single-use plural helper in ask-display (48fb044), closes #1817
- dashboard: key Ask activity rows by id and give the language toggle a fieldset (892bdc9), closes #1817
- dashboard: key the Ask breadcrumb on the exported askKeys (ab4e9d4), closes #1817
- dashboard: one language source, CSS.escape for the Send hint, no --input (9bd2b5d), closes #1814
- dashboard: one mediaStore for the Ask page's theme and narrow viewport (0bbdaa2), closes #1814
- dashboard: read the Asks view and page through one module (4ce138e), closes #1828
- sessions: bind gateway_requests and anchor rows through one request-fact helper4331af1
- sessions: give objects_command its doc back and call the structured strip directly in the redaction backfill99c6b5f
- sessions: one tool_input allowlist in the contract crate for the CLI and the plane174b373
0.7.13
CompareFeatures
- agents: the crewkit-asks skill#1628b0b79c7
- api: ask links for named people#1624ef0f201
- api: ask links for named people#1624637e9af
- api: ask revisions after publishing#1618a8ab094
- api: crewkit Asks, second slice (spec #1606 hop)d619b86
- api: organization logo on asks pages through the screenshot pipeline#1626bf54d7d
- api: retention clears a person's link name with their response#16243a3b407
- api: signed-in respondents#1623133755c
- api: signed-in respondents answer as their account#16235dc2ffb
- dashboard: answer as a crewkit account on the asks page#16231dbdb32
- dashboard: organization logo on ask pages#162602f01d2
- dashboard: organization logo on the asks page and its admin upload#1626c8469dc
- dashboard: people with their own ask link#16247d2fcfd
Bug Fixes
- api: an organization's hard delete removes its asks logo#162602a8ca9
- api: hop-2 gate 3 findings for Asks#1606#16884c7656b
- api: retention clears every person's link name past the period#16247fcf141
- ci: confine test homes and their sweep to a dedicated root (3b6d52f), closes #1563
- ci: derive the home owner pid from the one home prefix (2ca3965), closes #1563
- ci: own the test-homes root and sweep only homes whose run is gone (de114bc), closes #1563
- ci: run the spawn guard before every runner and sweep stale test homes (dd9fa6c), closes #1563
- cli: gate 3 findings on the second Asks spec hop#1606#16859c9037d
- dashboard: hop-2 gate 3 fixes for the asks app and dashboard#1606#16876c3605f
0.7.12
CompareFeatures
- api: add Ask records, the members API and the public Respondent API#1609dbeece1
- api: ask results and triage#1612ae79762
- api: ask results and triage#1612606ac15
- api: crewkit Asks, first slice (spec #1606 hop)80d6318
- api: first Asks tracer, drafted, published and answered end to end#16093bf9f9a
- api: gate Ask drafting on acceptable use, link the draft#1614e869468
- api: limits on the ask public surface#1610f2e4612
- api: limits on the ask public surface#161066490b1
- api: link the ask owner's notices to the dashboard ask pages#1616185cce2
- api: list and edit Ask drafts, delete them after 30 days#1611e4c5f85
- api: notify the ask owner of new responses#16160d82a63
- api: notify the ask owner of new responses#1616486b30f
- api: report this page, and suspension#162166005a1
- api: report this page, and suspension#1621ebe1db6
- api: the private response link#161938aa349
- api: the private response link#1619b486798
- cli: add the MCP tools create_ask and list_asks#16140e9f6bb
- cli: add the MCP tools create_ask and list_asks#16143e0d729
- cli: tell the ask owner at session start how many asks have new responses#1616fe42032
- dashboard: add the Respondent decision sheet to the asks app#16093a8b7e3
- dashboard: ask results and triage#1612bbb76bf
- dashboard: asks app skeleton with host headers and guards#160744078ed
- dashboard: asks app skeleton with host headers and guards#160760a0f4d
- dashboard: asks list, draft editor and publish#1611f1a2c4b
- dashboard: asks list, draft editor and publish#1611d336173
- dashboard: clear the owner's ask notice from the results view#16125c9e5b3
- dashboard: the private response link on the asks page#16192a9f9b4
Bug Fixes
- api,cli: gate 3 findings for Asks#16068e70d67
- api: backfill digests, null and drop the plaintext invitations.token column (c62769d), closes #1365
- api: backfill invitation token digests, then drop the plaintext token column#13659be2074
- api: bound ask results and triage inputs from gate 3 on #1649#16065e72355
- api: constrain invitations.token_digest NOT NULL after the plaintext token drop (a6bb74f), closes #1405
- api: drop the bare `it` block param that breaks the Ruby 3.3 deploy build#1670a118fe3
- api: drop the retired telemetry key on create too#15072fc9f9c
- api: filter capability tokens out of every request log line7f0ef6e
- api: filter capability tokens out of every request log line (17a5636), closes #1601
- api: floor and purge derived copies of a transcript-tainted session's content#153624fe8ff
- api: floor and purge derived copies of tainted sessions#153663cf1cc
- api: gate 3 findings on #1649 (asks results and triage)#16061a5de97
- api: gate the digest rebuild, purge on erasure, backfill#1536969af32
- api: harden asks drafting, locking and owner notices from gate 3#160672fbf4b
- api: ignore git_integrations.metadata before dropping it#1349#166717e8138
- api: keep develop's schema.rb formatting around the invitations.token drop (f1038ad), closes #1365
- api: make the taint purge write only what it changes#1536566c7fb
- api: move the ip_hmac check migration past create_ask_reports#1606702f7cd
- api: name the orgs that had switched session uploads off#150725c0f20
- api: pass ip: to AskService.submit in the members asks testa4fca8c
- api: pass ip: to AskService.submit in the members asks test (421003b), closes #1610
- api: pin the share floor's review findings#15351cca7ad
- api: renumber the ask owner notification migration#1616db45f07
- api: renumber the invitations.token drop above #1399 and take review nits (37de24e), closes #1365
- api: renumber the invitations.token drop above develop's newest migration (9bb6f26), closes #1365
- api: stop public conversation shares leaking their token#160116ffb08
- api: withhold a disabled org's name and enforce ask response provenance#16065cba795
- api: withhold a transcript-tainted session's content on every share surface#1535eaf9bb1
- api: withhold a transcript-tainted session's content on every share surface#15350ac6c04
- auth: end the cookies when a browser refresh is refused#160225594e1
- auth: harden the #1602 refresh path and CORS refusal#160207f347f
- auth: make the access-token cookie HttpOnly#16029fce258
- auth: make the access-token cookie HttpOnly#16029e1bf0b
- cli: branch create_ask on the api's refusal code and gate the asks notice#160658f9f05
- cli: name a transcript-tainted share refusal#1535f21e804
- cli: tell the agent create_ask never publishes#16065bc93bc
- dashboard: confirm close and revoke, reset extend after an extend#1606cbc1274
- dashboard: gate 3 fixes for the Ask triage panel and results#1606b281cb8
- dashboard: gate 3 fixes for the asks app and dashboard#1606350ccb9
- dashboard: keep share analytics off per tab, not per browser#160107d8649
- dashboard: keep the private token and say try again when an Ask read fails#16065675e28
- dashboard: keep the revealed Ask link out of PostHog capture#1606bb9f2f7
- dashboard: name a transcript-tainted share refusal#153569beabf
- dashboard: say an Ask at the 90-day maximum cannot be extended#1606a314e3c
- dashboard: stop public conversation shares leaking their token#1601bfea67b
- stop public conversation shares leaking their token#1601f2f255c
Code Refactoring
- api: drop the unused git_integrations.metadata column#134952e2591
- api: drop the unused git_integrations.metadata column#1349fa37b8d
- api: inline single-use helpers in the Ask tracer#1609738844a
- api: lock git_integrations before the metadata guard counts#1349db6c12a
- api: one mail-job reader in the report tests#16219ff3cda
- api: retire the dead session_uploads_enabled setting#1507b7a44d3
- api: retire the dead session_uploads_enabled setting#150729f3bb1
- api: return the written revision from a private-link update#1619fa65406
- api: tighten the share-token request-log note#1601743db59
- dashboard: remove the session uploads toggle#15079e1e78c
- dashboard: reuse canAdminister and one counts line for Asks#1611c6db4cf
- dashboard: share canDevelop and skip a reveal without a link id#160647fb662
- dashboard: share the private link's update sheet#16197ea7323
0.7.11
CompareFeatures
- api: declared repository commands and workspace agent settings (CREW-16)c0b98db
- api: declared repository commands and workspace agent settings (CREW-16)4b984da
- api: feature progress from the epic's children (CREW-14)8c692ba
- api: read a feature's progress from its epic's children (CREW-14)4a9cd4d
- api: record work saves and emit the assigned event (CREW-8)48dcc49
- cli: print a feature's progress in work show and list (CREW-14)f7cafa0
- cli: sync workspace agent settings with per-user consent (CREW-16)bc8cbdb
- cli: work save, pickup and assign (CREW-8)9262aa0
- cli: work save, pickup and assign (CREW-8)5f78636
- dashboard: show a feature's epic progress on its work item row (CREW-14)8cd4481
- dashboard: show work saves and reassign from the row (CREW-8)0c20ecb
- dashboard: workspace agent settings panel and repository commands editor (CREW-16)5701824
Bug Fixes
- api,cli,dashboard: never undercount an epic, never blame it for a big field list (CREW-14)7b0ca81
- api,dashboard: agent settings need developer+ as well as the lead role (CREW-16)662695c
- api: parse the OpenAPI spec once per process, never in a shared cache8c9f986
- api: serve each build's own OpenAPI spec, never a cached one (CREW-27)b726183
- api: serve the internal OpenAPI spec per process too, through one loader939de3b
- cli: harden work save against stranded pushes, hooks and refusals (CREW-28)66a1263
- cli: harden work save against stranded pushes, hooks and refusals (CREW-28)a616c50
- cli: keep in-flight save markers per sha and read origin attended (CREW-28)f7c9806
- cli: kill an unattended work save push after two minutes (CREW-8)329822c
- cli: read git in the C locale and report entries a non-TTY sync drops (CREW-16)0b67199
- cli: retract removed MCP servers anywhere and fail closed on git (CREW-16)70ba0c7
Code Refactoring
- api: one Jira client per org batch, order the sync by its one read time (CREW-14)5b8e823
- cli: flatten the stranded-save check and share the save test mock (CREW-28)e24cce6
- cli: keep the push time of a stranded save, name git subcommands (CREW-8)6e84066
- cli: share the marker pattern and skip a needless origin read (CREW-28)6f13137
- cli: share the printable rule and list the vetted set whole (CREW-16)9768641
- monorepo: tighten work save after review (CREW-8)545a873
0.7.10
CompareBug Fixes
- dashboard: accept the /up health stub in the MSW handler guard1c802b1
- dashboard: accept the /up health stub in the MSW handler guard (CREW-26)559a372
- dashboard: lead with Settings, and say crewkit links only when asked4270c7b
- dashboard: point empty repository states at paths that link one5e965d5
- dashboard: point empty repository states at paths that link one (CREW-21)453adbd
- dashboard: reset project settings to what the server saved (CREW-25)#1580f561f86
- explain work start's 422 when there is no Jira connection (CREW-24)#1579827195f
0.7.9
CompareBug Fixes
- api: list a project's git remote as one of its repositories72c7b57
- api: list a project's git remote as one of its repositories (CREW-22)553da66
- api: match a listed repository in any spelling, keep removed ones removedbc40bb8
- cli: a judged registry-lock corpse is pinned so a reused inode cannot pass for it; cli-ci test on webirak-tt-4c16ga9c526c
- cli: ask origin for a branch without ever prompting939b76c
- cli: link repositories with their origin's default branchd2da86e
- cli: link repositories with their origin's default branch (CREW-23)c8956f9
- cli: pin a judged registry-lock corpse so a reused inode cannot pass for it (a30770b), closes #1443
- cli: pin the registry-lock corpse on Unix only and name what guards the pin (d2d63e1), closes #1443
- dashboard: let the New Project form create a workspace2f1c497
- dashboard: let the New Project form create a workspace (CREW-20)b5acf94
- dashboard: name the project kind group, never send a workspace remote6a8eb9e
- sessions: allowlist structured file results and strip nested edit content#1482624d4e9
- sessions: allowlist structured tool results and strip nested edit content#1482f2f18ef
- sessions: clear stored subagent team names in the residency purge#14830555700
- sessions: keep only metadata from Grep, LSP and WebFetch results#1482dbe1009
- sessions: make minimal capture fail closed for every event type#1483491a133
- sessions: make minimal capture fail closed for every event type#1483f17b431
- sessions: purge resident event data by allowlist and strip team names#1483dc08496
- sessions: strip teammate_id under residency and drop the unused teammates scope#1483c5df723
0.7.8
CompareBug Fixes
- api: refuse control characters in a stored link name (862095d), closes #1424
- api: store any remote path segment on a link, refuse only dot-only ones (e66c43b), closes #1424
- cli: detect GitLab subgroup remotes21b3cb6
- cli: detect GitLab subgroup remotes and resolve SSH host aliases (228fb12), closes #1424
- cli: drop the ssh alias rewrite and keep subgroup names off the fallbacks (db41640), closes #1424
- cli: keep legacy cache reads to owner/repo and register sibling subgroups (b8e2215), closes #1424
- cli: register subgroup projects and keep sibling subgroups apart (4beeac9), closes #1424
- cli: remove the pre-digest cache file and bound the cache filename length (83831cf), closes #1424
0.7.7
CompareFeatures
- agents: stop a job container when the API answers 409#1147fa6dfac
- agents: stop a job's container when the API answers 409#11474802093
- api: a convention-set edit creates a ResourceVersion, and key swaps keep ids#1166b65d4e3
- api: a playbook version carries its conventions, and rollback restores them#1229d041484
- api: a playbook version carries its conventions, and rollback restores them#12298c74c5d
- api: add provisioning states to the GitLab grant and reap stale ones#12524360067
- api: add provisioning states to the GitLab grant and reap stale ones#1252205cd35
- api: add the GitLab grant lifecycle: add projects, reconnect, remove the account#1257b1ef7f5
- api: add the GitLab grant lifecycle: add projects, reconnect, remove the account#12577ff0561
- api: add the GitLab Owner-token client and the gitlab_connect state#12515344710
- api: add the GitLab Owner-token client and the gitlab_connect state#1251409fceb
- api: age-prune and meter artifact analysis spend#500ca79847
- api: age-prune artifact analysis spend ledger#5002abcedc
- api: cap waitlist confirmation mails per UTC day#117712a225a
- api: cap waitlist confirmation mails per UTC day#1177afe2977
- api: clear resource version content after the content-bearing term#1246ca3f46f
- api: clear resource version content after the content-bearing term#124622a1312
- api: connect GitLab in one sign-in: start, callback, claim and service account#125486cc1f3
- api: connect GitLab in one sign-in: start, callback, claim and service account#125459082f1
- api: convention-set edits create a ResourceVersion; key swaps keep ids; admin Inert badge#11661161c01
- api: derive adaptation spend caps from billing plans#3840db2297
- api: derive adaptation spend caps from billing plans#3845aeaee9
- api: enforce GitLab default-branch protection at link and each job handshake#1163f7b59d5
- api: enforce GitLab default-branch protection at link and handshake#1163321c7dc
- api: fall back to ENV adaptation cap for lapsed subscriptions#11795943bca
- api: fall back to ENV adaptation cap for lapsed subscriptions#11799aff06f
- api: filter the picker's handle from the request log and Sentry#12513733cf4
- api: gate the waitlist Slack post on the daily confirmation budget#1188a234c70
- api: GitHub sign-in through the detour, and social buttons on device verify (#790, #792)0f3cad9
- api: Google sign-in for a hosted mailbox#7881a33d21
- api: Google sign-in for a hosted mailbox, end to end#78830322a4
- api: hold the GitLab Owner token for one picker submit, then destroy it#12533b77f7c
- api: hold the GitLab Owner token for one picker submit, then destroy it#12537a55e34
- api: magic-link detour for social addresses the provider cannot vouch for#789ddc942f
- api: mint and revoke GitLab job credentials through a host-neutral seam#106093bf070
- api: name GitLab job credentials per install so sweeps stay apart#11866a77a06
- api: name the platform provider in the social amr#6891070c42
- api: one-click GitLab connect: sign in once as the group Owner, service account, project picker, lifecycle#1210df01c24
- api: open a GitLab job's merge request at push_checked_sha, and admit GitLab jobs#106531c21cb
- api: open a GitLab job's merge request at push_checked_sha; admit GitLab jobs#1065bbee78f
- api: per-install discriminator on GitLab job credential names#11868bebacc
- api: picker submit adds the service account, protects consented branches, revokes the Owner token#125535e9ad9
- api: picker submit adds the service account, protects consented branches, revokes the Owner token#125527e8095
- api: platform-admin kill switch that force-ends a live cloud job#1131050e4b7
- api: platform-admin kill switch that force-ends a live cloud job#1131d04156b
- api: playbook wizards write real conventions in one transaction#328a10b81d
- api: promote the GitLab spec (#1046) into develop1043405
- api: retire removed playbook conventions instead of destroying them#12335e5d979
- api: revoke the GitLab Owner tokens no picker submit took#12533a9f82d
- api: serve the orchestrator's GitLab clone-and-push handshake#1064ff1d3df
- api: serve the orchestrator's GitLab clone-and-push handshake#1064d0c046c
- api: sign in with GitHub through the magic-link detour#79062c63aa
- api: sign-in methods panel and social unlink with suppression#791e27c055
- api: sign-in methods panel, and unlink with suppression#7917081630
- api: soft-retire removed playbook conventions so rollback and re-add keep the same row#1233db0e1ab
- api: sweep retired playbook conventions after the content-bearing term#1240ed59545
- api: sweep retired playbook conventions after the content-bearing term#1240cacad02
- api: the social detour — magic link for every non-hosted address, link and create, with device relay#78974cc687
- api: warn at boot when the API's public URL is not https#121237944d6
- api: write a playbook and its conventions in one transaction#328ebd57ef
- auth: social sign-in with Google and GitHub#689b9d11c0
- cli: surface dropped telemetry on the statusline, sidebar and Sentry#1128299d96e
- cli: surface dropped telemetry on the statusline, sidebar and Sentry#11287f08031
- dashboard: add github to the provider contract, with its refusal copy#79031a2304
- dashboard: add the GitLab grant lifecycle: add projects, reconnect, remove the account#12576a9644a
- dashboard: catalog vocabulary for Yours and builder; clarify running sessions#648968a12a
- dashboard: catalog vocabulary for Yours and the skill builder; honest removal copy#6483973702
- dashboard: connect GitLab in one sign-in with a project picker#1256b96ee74
- dashboard: Continue with Google on the login page#78846870f3
- dashboard: deep-link the GitLab connect steps for the typed group#1122a7c451c
- dashboard: label throttled magic-link and passkey events in the activity feed#1176ce681ab
- dashboard: label throttled magic-link and passkey events in the activity feed#1176f608615
- dashboard: playbook wizards write real conventions and flag inert playbooks#32855d64f9
- dashboard: show a GitLab link refusal in the link dialog#121191dec23
- dashboard: show the Inert badge on admin playbook pages#116694c558a
- dashboard: sign-in methods panel on the profile page#79104b81d7
- dashboard: social buttons on the device-verify page#792c11614a
- dashboard: social detour consent page and check-your-mail notice#7893417d0a
- dashboard: the GitLab connect dialog takes the group; partial connects and unreadable rules#1269339e307
- dashboard: the GitLab connect dialog takes the group; partial connects and unreadable rules#126965171d3
Bug Fixes
- agents: own the exec in the terminal watcher and test the run#114765c3c7f
- api: #1046 outside review — mint only on the checked default branch; close only a closed MRd34738c
- api: #1046 stage audit — linear GitLab glob matching, HTTP status in protection refusals61fc688
- api: #1046 stage audit — merge-request lock scope and one leave-group/bound-project path5a662da
- api: #1210 fix round: org-delete custody, group-rules 404 on Free, one revoke pathdbe0a60
- api: #1236 review — create op's conventions text drops the update clause; sentinel compares keys by YAML valueb8e3a3c
- api: #689 stage audit + outside review — unlink/detour race, atomic device approval, provider amr, provider-list sentinel48f50a2
- api: 404 unpublished platform resources for orgs that do not hold them#1152a6f01d6
- api: a failed hand-off no longer 500s a committed force-end#1131deb49db
- api: a live GitLab connect answers 200, and review fixes for the callback#1254b83a94b
- api: a playbook's stacks go to the framework_stacks column, not frontmatter#3289bac56d
- api: a project with no default branch never meets the group's rules#1254e64f06c
- api: a short head leaves its unused LLM room to the conventions#32851c31da
- api: a social detour replacement is described and mailed as one#789026ec24
- api: abandoned GitLab grants no longer hold their group#12526275251
- api: accept current and previous orchestrator secrets for rotation#109963f1b10
- api: account erasure deletes the email-bound sign-in tokens and passkey challenges#1243e215ba1
- api: account erasure deletes the email-bound sign-in tokens and passkey challenges#12432738d99
- api: address the GitLab grant lifecycle review#12572d67f2a
- api: address the picker submit review#1255e31df65
- api: allowlist resource frontmatter keys on write, import and serve#444b419176
- api: an expired trial uses the ENV adaptation cap#117962c97db
- api: answer a failed dependency with its validation reason, not a class#9162e6f5ff
- api: answer a failed token credit with its validation reason, not a class#916759dacc
- api: answer a raced org delete 409, and keep the two sentinels green (5b63217), closes #1210
- api: answer delete_raced only for the gitlab holds' restrict fk (de09bf8), closes #1210
- api: apply the unpublished platform rule to listings and skill toggles#1152cb390f6
- api: approve a device code in one conditional statement#6898d87e2a
- api: approve the integration test's device code by its current name#6898a11b46
- api: ask GitHub for 100 emails a page; one set of social sign-in assertions#79063116ac
- api: audit a capped waitlist day once per cap, not once per signup#117773f18d4
- api: backfill home-directory owners on unattributed sessions#1132b14e811
- api: batch the retraction under short locks, retry deadlocks, audit a failed enqueue#473c9a37ac
- api: bind erased addresses and scrub social sign-in addresses too#124394d633a
- api: bind MCP search and forks into the transcript taint#1034b79c399
- api: bound GitLab branch protection checks and audit refusals#1046827b73c
- api: bound the disconnect's wait on a job lock and record the lost id#1060aa6398a
- api: bound user-written framework_stacks#3285e768ad
- api: close the in-flight embed race and record each retraction#4730621c5a
- api: close the prepared-statements guard gaps found in review#1244ac52acc
- api: close the review findings on GitLab grant provisioning#12528b4cbf3
- api: close the review findings on the retired-convention sweep#12405dc495c
- api: close the review findings on the version content term#12460a0c532
- api: count grants disconnected before a refused hard delete#1060b73d901
- api: count group_projects truncation before dropping malformed rows (0caea5c), closes #1251
- api: declare the sign-in methods controller account-scoped#68913b17c6
- api: disconnect GitLab first in the admin hard delete, refusing on Busy#1060b272fbc
- api: document the inbound-message and admin source verbs; fix the two bugs the docs exposed#1123d356d12
- api: drop client-written Forwarded and Client-IP headers before the client IP is read#122138f3a34
- api: drop client-written Forwarded and Client-IP headers before the client IP is read#122179b6a9c
- api: drop the author id from every agent note the departed user wrote#1103d0f36cb
- api: drop the departed user's author id from their agent notes; state the note rule#1103fb69905
- api: erasure clears the session analysis a document renders from, and reaches agent notes#1103c77eb88
- api: erasure retires the vectorized session copy of a departed user's conversations#1103b187951
- api: erasure scrubs departed logins from session paths; home-segment backfill#11321040d3e
- api: erasure scrubs the vectorized session copy and deletes its chunks (#1103) (b14f268), closes #942
- api: evaluate every protection rule matching the default branch#1163c81f988
- api: every convention writer versions and re-scans; rollback refuses a lost set#116624771a3
- api: fail a job whose push credential fails, and record a passed push check#10646cbfd7c
- api: fork copies playbook conventions; set edits re-scan a published playbook#32867f92ba
- api: framework_stacks bounds apply to every resource type, not playbooks only#328e16d477
- api: gate the waitlist Slack backfill on a confirmed count#11889163e37
- api: gate the waitlist Slack post on the daily cap#11881de0e42
- api: give the social sign-in events deliberate severities#788a19c7ca
- api: grant partial artifact batches within exact spend caps#500108f678
- api: guard the unvalidated served-version save and word the rollback refusal#11668a414a4
- api: hide unpublished marketplace playbooks from nonsubscribers#112011d523a
- api: hide unpublished marketplace playbooks from nonsubscribers#112042e1a9b
- api: hide unpublished platform resources from orgs that do not hold them#11524b51caa
- api: keep a holder's drafts on flat effective; C8 reads not_found#1152de6c23c
- api: keep a nil status on a revoke failure event, drop only a missing session id#12556bfcd5f
- api: keep an identity provider's client_secret out of its JSON#7889328053
- api: keep org bulk off markers for unheld drafts#1152c6df330
- api: keep provider and database prose out of exception log lines, lane D3#916cc5be55
- api: keep provider and database prose out of exception log lines, lane D3#916115e72d
- api: keep transcript deliveries for the life of their user, project or org#124731f1d18
- api: keep transcript deliveries for the life of their user, project or org#1247822da75
- api: keep transcript-tainted session artifacts manager-floored#103486927b9
- api: key every IP throttle on one client-address helper#1180fa11d60
- api: key every IP throttle on one client-address helper#1180f28d78c
- api: leave_group re-checks the link under its lock before destroying it#10461ec5cd2
- api: LLM leg always sees playbook conventions; sweep and findings know them#3282bd48e1
- api: lock the job FOR NO KEY UPDATE so a disconnect cannot deadlock the MR open#10656efe373
- api: log an unconfirmed MR close, and pin the protection check's branch#104655e35bd
- api: log each SSO auth-time fallback so an enabled opt-out is visible#73000c70d6
- api: log the unswept pasted-account mint plainly, clear a taken-over row's PAT ids#125718121d4
- api: mint on the re-read link and bound, guard and record the job lock#1060b85edcc
- api: mint only on the default branch checked, and close only a closed MR#1046b80a17c
- api: name force push in a picker refusal, keep revoking past an audit failure#12556fd423f
- api: neither body nor conventions can starve the LLM leg; token before bytes#3288c050d2
- api: never return a credential minted on a disconnected grant#1060b1668cd
- api: one POST /admin/resources in the internal spec, and a sentinel for duplicate YAML keys95eb69d
- api: one POST /admin/resources in the internal spec; sentinel for duplicate YAML keys27eb11d
- api: only a playbook's framework_stacks are writable through the org resource route#328e2f12f3
- api: pin the platform provider list to one source#689659b87b
- api: post only the confirmed waitlist backfill set#1188f864324
- api: prevent orphan inbound messages and clamp admin source pagination#11231726d9c
- api: prune transcript deliveries at the session content retention term#1247719e397
- api: re-check a terminal job under its row lock before any handshake GitLab call#11485044ce5
- api: re-check a terminal job under its row lock before handshake GitLab calls#11489ca456c
- api: re-read the link at mint completion and revoke on every unlink path#10604a7de64
- api: read the GitLab project before the merge-request lock#1046a332f92
- api: read the rotation map as credentials deliver it, add the pre-deploy check#109914fb6ac
- api: reap the committed rows a non-transactional test leaves behind#123429856ad
- api: reap the committed rows a non-transactional test leaves behind#1234ae057ad
- api: record a veto-lifted retraction as stopped, never completed#473f0eca50
- api: refuse missing SSO auth time unless the owner opts out#7300775c4a
- api: refuse missing SSO auth time unless the owner opts out#730d5c4401
- api: refuse to boot production or staging with prepared statements off#12446d461f7
- api: refuse to boot production with prepared statements off#1244f8f3292
- api: reject malformed admin and artifact input#1164bd88434
- api: reject malformed admin and artifact input instead of raising#1164da0689c
- api: report a failed enqueue_failed audit to Sentry like the other rescues#473e4ddcb9
- api: restrict an org delete past a late gitlab hold, withhold erased user id (4e2b921), closes #1210
- api: restrict new subscriptions to published platform playbooks#11200945a81
- api: retract embedding chunks when an egress veto turns on#4736910439
- api: retract embedding chunks when an egress veto turns on#473ac113be
- api: revoke an erased account's GitLab Owner holds after its transaction commits#1253967b7ce
- api: revoke an unlinked project's job credentials at the unlink#106030e56d3
- api: revoke held GitLab Owner tokens in one transaction, and before erasure#1253b60f068
- api: revoke held gitlab owner tokens on org delete, one revoke path with its receipt (96a6543), closes #1210
- api: revoke the GitHub sign-in token after the account read#6893ca10fb
- api: roll back a refused PATCH's park of a retired convention#1233c40e5e6
- api: rotate the orchestrator secret with current and previous values#1099fdb047c
- api: scan a playbook's conventions; keep plain-save error contracts#328bd76cd3
- api: schedule the expired auth-token sweep in every environment#12268e40753
- api: schedule the expired auth-token sweep in every environment#12269268dbe
- api: scrub departed logins from session JSON paths#1132dc68074
- api: scrub every agent note the departed user wrote; one result shape#1103962fc23
- api: serialise detour completion with unlink on the account row#6897cd0152
- api: serialise the callback's link on the account's lock#6891e42b3d
- api: serialize a segment mint with a concurrent lineage taint#10340dfefcb
- api: state what the IP helper assumes and bucket mapped IPv4#11808a4c423
- api: strip any format suffix in route_path and bucket IPv6 per /64#1171b7f95dc
- api: take both #1229 reviews: verify restored conventions, snapshot every writere7cb8c2
- api: take both D3 reviews: follow prose through a local, pin allowlist counts#9168070b4f
- api: take the #1233 review findings on convention retirement#12334067efd
- api: take the #1251 review findings and the group project list ruling56d8100
- api: take the #689 review findings#68955d1f12
- api: take the transcript-delivery advisory lock through a bind#1034689726b
- api: test the prepared-statements guard against URL-built configs#124431d4ffa
- api: test the public-URL boot gate, and toast a refusal after the dialog closes (#1212) (b0dedde), closes #1211
- api: test the real lineage walk under the lock and note the lock order#1034367d031
- api: the grade re-score probe loads resource_type for scanned bytes#328c052cb6
- api: the home-segment backfill never deletes; case-blind prefixes#1132903caeb
- api: throttle public waitlist signups per IP#117109eaccf
- api: throttle public waitlist signups per IP and strip any format suffix#1171d18fb8f
- api: tighten the paste-flow removal tests and comments#1258117f6b8
- api: unknown branch rules preview as null, and two re-check fixes#12549490176
- api: unlink social identities on an address move; gate 3 round 1#788eb3d730
- api: use literal GitLab globs and retain HTTP diagnostics#10463f29f13
- api: warn on a pre-label mint the sweep cannot resolve by name#1186d197f5f
- api: write a passed push check once, and bound the mint lock for the head read#10641cb6cef
- auth: cap magic links and passkey challenges per address in the app#1154c6c98d2
- auth: cap magic links and passkey challenges per address in the app#11545ab47ef
- auth: count the login cap per mailbox on an indexed key#115488933ee
- ci: create the coverage comment when a PR has none yet4b707aa
- ci: fall back to a new coverage comment instead of --create-if-nonefd88d13
- ci: find the API coverage comment by its marker instead of --edit-last#12183ded715
- ci: find the API coverage comment by its marker instead of --edit-last#1218f2816a0
- cli: accept real subagent ids and type the remaining path ids#1084318f611
- cli: count a 2xx delivered only for a data envelope#108477080dd
- cli: give share_update's 422 fixture the envelope the API sendsa01de9a
- cli: give share_update's 500 fixture the real error envelope tooc58ee17
- cli: give share_update's error fixtures the envelope the API sendsf47b0e0
- cli: key vaults by exact recorded host and re-home legacy ones#809722544c
- cli: key vaults by exact recorded host and re-home legacy ones#80913fa956
- cli: pass typed ids in the resumed-context test after the develop merge#10341e56477
- cli: per-conversation, identity-free telemetry-loss reports#11287a4f078
- cli: redact all buffer failures and pin stop refusals#7626db1ddc
- cli: refuse pidfile signals without a recorded start time#762677334f
- cli: refuse pidfile signals without a recorded start time#7622679de9
- cli: refuse re-homing on an unreadable uid; re-check twins before removal#80959f8f48
- cli: refuse vault re-homing beside any crewkit process; logout takes twins#80942146cc
- cli: reset the loss ledger in one critical section; floor stall events#1128c10237f
- cli: surface discarded telemetry and require accepted in 2xx#10848551353
- cli: take the gate-3 findings on vault re-homing#8099807452
- cli: typed, validated ids for every API path segment#108468b1b44
- cli: typed, validated ids for session, task and save-state path segments#10844db9d08
- dashboard: claim the catalog fallback only for agents and skills; badge forks Your copy#6483298f94
- dashboard: clamp the protect request at submit for unreadable rules#1269be86b5b
- dashboard: clear the GitLab carrier on every callback exit, trim and cap the group#1122588b554
- dashboard: close the PostHog paths before_send cannot see#1228f6770f0
- dashboard: contain long artifact names in blueprint generation#1153a62624b
- dashboard: contain long artifact names in blueprint generation#11535581f15
- dashboard: hold the AUP publish open in its in-flight test#121758a35d4
- dashboard: hold the AUP publish open in its in-flight test#1217c17a345
- dashboard: keep one-time tokens out of analytics pageviews and take review findings#689fd50586
- dashboard: keep the connect group across the callback; accurate disclosure#1269945762e
- dashboard: keep the GitLab connect handle and callback code out of URLs#1256dea45d5
- dashboard: keep the GitLab connect handler free of a throw the React Compiler cannot optimize#1256396a239
- dashboard: keep the GitLab connect handler free of a throw the React Compiler cannot optimize#12569b05a07
- dashboard: move the picker-submit spec entry to T6, with its route#125686c4924
- dashboard: name pushes and force push together in a picker refusal#12557cdc057
- dashboard: name what Yours' button really does and drop the unverified session claim#648d18e745
- dashboard: passkey changes refresh the sign-in panel; pin the unlink notice failure#791a1c16c3
- dashboard: protect social sign-in completion and explain refusals#689d7fa9bb
- dashboard: read only the detour preview fields the page uses#68973677d7
- dashboard: scope the Sentry code/state redaction and cover transactions#1256c44a46e
- dashboard: send the gitlab picker back to a fresh start once its handle is spent (2c43006), closes #1210
- dashboard: social sign-in dashboard and docs, lane B#68973f15d4
- dashboard: strip query and fragment from every URL PostHog records#122811fd5f7
- dashboard: strip query and fragment from every URL PostHog records#1228dba32c9
Code Refactoring
- api: /simplify pass over the one-click GitLab connect#1210e372f50
- api: build the resource Scope with the flat effective org#115233a2f3a
- api: check the GitLab group once per connect purpose and mint PATs through one helper#1210a4c4417
- api: count the refused hard delete's grants on a plain relation#1060b7a8d2c
- api: drop the legacy job-credential name branch#1186f42ee28
- api: drop the needless rollback guard on the GitLab safety CHECKs#1252ab644ee
- api: drop the redundant integer type guard and a duplicate assertion#1164b1f8fb5
- api: drop the unobservable refusal guard on the relayed code#689b15b2b1
- api: fold the social sign-in migrations#6894763dfd
- api: framework stack bounds live on Resource, shared with for_stacks#328ab466c6
- api: keep JobMergeRequest's post-commit link re-derivation#1046b558d25
- api: let pundit_user build the context for a given org#1152c670d42
- api: let the unique indexes refuse a stale social detour#789f8c8885
- api: meter artifact analysis batches once per org#500caf5f3d
- api: name the erasure's artifact set QUALIFYING_ARTIFACTS#1103c41b6a5
- api: name the Owner-token revoke event by T4's constant#1254f1afd3e
- api: one list of detour refusal codes#689ae91e1f
- api: one provider registry and one detour result#689b520fa7
- api: one provider-name fallback and an inline unlink notice#79148f3235
- api: one version lookup per snapshot, and cite the pin-serving issue (#1246) (b08dc08), closes #1264
- api: plainer lapsed-subscription check; drop an unreachable test#11798afcfea
- api: read push_checked_sha under the job's row lock alone#10657f7cfe6
- api: read the adaptation cap through BillingPlan#limit#38467e2b2e
- api: read the install label from per-environment credentials#118633bc2a2
- api: remove the paste-a-token GitLab connect flow#12588bee255
- api: remove the paste-a-token GitLab connect flow#1258c1a927a
- api: retire artifact collection content after consumer audit#500990abf1
- api: share one GitLab list pager and pin the group-rule ruling#1163371fb23
- api: share the browser sign-in leg and the sign-up follow-up#788d709398
- api: simplify the GitLab spec before its develop merge#10467c58bb5
- api: stack constants beside the model's others; #444 comment names its bound#32864977cb
- cli: trim the vault re-homing module#809c1be560
- dashboard: drop the detour notice's fragment guard, which guarded nothing#789f9b0417
- dashboard: inline the shared social refusal copy#6891d10f69
- dashboard: name the trimmed GitLab group instead of reassigning the parameter#112251ed1b5
- dashboard: one hook for a wizard's convention check#3281bb2afc
- dashboard: one loading card and one copy of the shared social refusals#789a29b800
- dashboard: remove the paste-a-token GitLab connect form#12580ce4d4f
- dashboard: share activity feed and filter labels#11760ba9169
- dashboard: type pickedProjects from the submit request#126968a216e
0.7.6
CompareFeatures
- api: catch "disregard previous …" without a quantifier in the injection scan (#463) (3271d84), closes #462
- api: catch "disregard previous" at high and narrow two rows against prose (#463) (e5b6377), closes #462
- api: count-only mode for the residency purge that reports what it would destroy#694f337b43
- api: count-only rake task listing active_storage_blobs whose object is gone (#803) (78c31a1), closes #467
- api: let org admins set the embedding egress opt-out#47467d155f
- api: let org admins set the embedding egress opt-out (#474) (1feb108), closes #466 #473 #437
- api: mark the attribution pre-fix window with a constant meta.attribution_since (#612) (8a7de4a), closes #615 #645
- api: per-source generally_available under the global marketplace GA flag#646c9e1c1b
- api: per-source generally_available under the global marketplace GA flag (#646) (0dfed8a), closes #158 #640
- api: port the prompt-injection patterns into the static security scan#463c37281d
- api: port the prompt-injection patterns into the static security scan (#463) (e03274a), closes #462
- api: record the version a subagent ran on, bucket nil as unattributed#612158e458
- api: record the version a subagent ran on, bucket nil as unattributed (#612) (417b3db), closes #615 #645
- api: register this repo's colliding .claude/ resources as project-tier Resources#3352fe35e9
- api: register this repo's colliding .claude/ resources as project-tier Resources (#335) (a8440e6), closes #378 #158
- api: serve a project's vocabulary terms to the Notetaker#5266f2ccef
- api: serve a project's vocabulary terms to the Notetaker#526668f669
- api: store how a resource adoption originated instead of inferring it (#651) (860159d), closes #258
- ci: lift the mutation-check harness into scripts/ with four verdicts and three runners#77635aa573
- ci: lift the mutation-check harness into scripts/ with four verdicts and three runners (#776) (9534ba7), closes #752 #586
- cli: add --sensitive and --no-llm-gateway to crewkit blueprint (#822) (7bc48f2), closes #805
- cli: give status an injectable runtime dir and config dir through the _in seam#830ec31719
- cli: merge bound-project vocabulary ahead of the user list in the one resolver (#526) (a47f7ef), closes #529
- cli: read the org's telemetry settings for a session-less command (#822) (0fd7f9c), closes #805
- cli: run the LLM gateway for the life of a crewkit blueprint command, uploads off (#822) (ce05448), closes #805
- cli: send the served resource version hash with subagent stats (#612) (638252d), closes #615 #645
- dashboard: give the AUP consent dialog a Decline path (#518) (af34f8b), closes #370 #372
- dashboard: regenerate the API types for the project vocabulary route#5261b036d5
- dashboard: show an external source's last sync error and retry state#6408c8449a
- dashboard: tell the user to remove the Slack app when the revoke was not confirmed (#771) (b83dda7), closes #756 #770
Bug Fixes
- api: attribute invitation declines too, and say what versions.organization_id means (#437) (42b2259), closes #424 #447 #355
- api: attribute the opt-out flip's version and refuse non-scalar values (#474) (1ba743d), closes #466 #473 #437
- api: cite Law 25 s. 27/28.1 and drop the stale skeleton comments (#518) (e4b6dc6), closes #370
- api: clear cloud-job diffs, patches and logs under the session-content retention term#51949cc33e
- api: clear cloud-job diffs, patches and logs under the session-content retention term (#519) (f03242a), closes #513 #493 #447
- api: close the bulk envelope's error tokens and survive one item's raise#650219e056
- api: close the bulk envelope's error tokens and survive one item's raise (#650) (4c160df), closes #647
- api: compare whodunnit as an integer so privilege-escalation detection can fire (#437) (6a5b0c5), closes #424 #447 #355
- api: count only the embedding chunks the purge retracts, stop materialising version ids#6949403951
- api: deliver the unconfirmed-revoke event to Sentry and allowlist Slack's error detail#77192e28dd
- api: document only the statuses the import and convention-override routes emit#8546dd0057
- api: document the seven CLI-consumed routes and the object error envelope in the spec#8544e63044
- api: document the seven CLI-consumed routes and the object error envelope in the spec (#854) (229b27f), closes #816 #375
- api: drop attribution_since meta and bound every version-hash writer#6129a1ee33
- api: drop the inert trailing-dot guard from the TXT lookup#7670c3572d
- api: encrypt session_shares.share_token at rest, deterministic for lookups#434505ba47
- api: encrypt session_shares.share_token at rest, deterministic for lookups (#434) (9e750ee), closes #433 #356 #447
- api: exempt agent_job ingest from the AUP gate — consent is at the door#440695b610
- api: exempt agent_job ingest from the AUP gate — consent is at the door (#440) (51c6bc7), closes #370 #373 #478
- api: fold the PR-write test into its existing peer and sharpen #800's comments (1214238), closes #514
- api: four defects the first executed run found in the slug guard and bulk item (#649) (bb89887), closes #650 #651
- api: gate the plane token mints on AUP consent and put them under the sentinel#478f386464
- api: gate the plane token mints on AUP consent and put them under the sentinel (#478) (7392519), closes #370
- api: gate the single-listing adopt route on the per-source bit#646db286ba
- api: keep a per-source dark group out of the slug-holder annotation#6466f9d376
- api: keep cloud-job diffs, patches and prompts out of PaperTrail versions (#519) (d94ca9e), closes #447
- api: keep every cloud-job content column out of PaperTrail versions#5194fd2928
- api: keep the primary key in the origin backfill's batched select (#651) (234e186), closes #650
- api: key the slug lock per tenant, lock the marketplace batch door, cap ids (#649) (6074833), closes #650 #651
- api: lock the slug per organization, keep malformed bulk items in request order (#649) (cae867f), closes #650
- api: make the active integration scope require a token like active? does#5106329dfd
- api: name no per-source dark holder in the slug guard's 409; count on from lit items#646c126a00
- api: park budget-exhausted and deterministic parser refusals instead of retrying#6400266e1a
- api: populate PaperTrail whodunnit from the API's auth, drop IP/user-agent#43713a1157
- api: populate PaperTrail whodunnit from the API's auth, drop IP/user-agent (#437) (2e991f4), closes #424 #447 #355
- api: preload the agent directory's projects on the plane policy pull#6769f105a4
- api: preload the agent directory's projects on the plane policy pull#676d878da1
- api: purge SaveState versions with no created_at, and close the purge's public door#69405ee068
- api: purge SaveState versions with no created_at, and close the purge's public door#694e5f4aa7
- api: queue the re-scan a failed platform publish refuses on, and log the refusal (#462) (7e8627b), closes #436 #422 #463
- api: record the account deletion and export routes as consent-exempt rights#51838420d3
- api: record the account deletion and export routes as consent-exempt rights (#518) (0f866ef), closes #370
- api: record the delivered-slug advisory lock as a Brakeman false positive#6507dfd22e
- api: refuse a same-slug adoption at write time with 409 slug_taken (#649) (0ec563e), closes #641 #650
- api: refuse the ciphertext envelope as a share token (#434) (debeddd), closes #433 #356 #447
- api: refuse the unattributed bucket as a comparison arm at the door#61239bb2ae
- api: refuse to publish a platform resource whose LLM scan failed or never ran#4629a78538
- api: refuse to publish a platform resource whose LLM scan failed or never ran (#462) (aed261b), closes #436 #422 #463
- api: renumber the generally_available migration after the #651 origin migration#646a5403aa
- api: report whether Slack confirmed the auth.revoke on disconnect#771bea184b
- api: report whether Slack confirmed the auth.revoke on disconnect#77131c0d8a
- api: rescue only the storage call and pin the orphan task's no-write contract#803c736343
- api: rescue only the storage call and pin the orphan task's no-write contract#8039efb8ae
- api: resolve the domain-verification TXT name as absolute#7676e38c90
- api: resolve the domain-verification TXT name as absolute#76757f7dbf
- api: retry a failed LLM security leg instead of leaving the row refused (#462) (c9cf61e), closes #422
- api: retry only classified transient failures, and select them through one scope#64019b6b10
- api: retry transient external-source sync failures after a backoff#640c0f3626
- api: retry transient external-source sync failures after a backoff (#640) (a78d4e4), closes #646
- api: revoke the GitHub token upstream when a connection or integration is disconnected#799b196560
- api: run batch_adopt's per-source gate inside the item guard#64664af0c1
- api: say what the dark-marketplace holder withholds, and gate it in one place#650052f57b
- api: scan registered local resources and share the frontmatter parser#3358016e96
- api: scope, bound and sanitize the derived project vocabulary#526ba3c4f9
- api: share the log-capture and residency test helpers behind #804's gates (a46affe), closes #475
- api: stamp whodunnit on the optional-auth path and the org id on every audited write (#437) (5279455), closes #424 #447 #355
- api: stop the orchestrator worker setting a cloud job's PR fields#800c5c6586
- api: stop the orchestrator worker setting a cloud job's PR fields (#800) (58abac1), closes #514
- api: take the gate-3 findings on the per-source GA bit#6466ab271a
- api: withdraw the gitlab and bitbucket connect flows until they are real#510979c670
- api: withdraw the gitlab and bitbucket connect flows until they are real (#510) (8901043), closes #509
- api: withhold artifact context from Blueprint and agent-reply prompts for resident orgs#80432425d2
- api: withhold artifact context from Blueprint and agent-reply prompts for resident orgs (#804) (11fef0e), closes #475
- api: zero an empty aggregate scope and give tests real version hashes#612b7ebbcf
- ci: close four mutation-check instrument gaps found in review#7769e21b54
- ci: kill the runner's process group on timeout and name the backup on interrupt#7760e4526d
- ci: make the process-group case fail under a reverted group kill#776850bddc
- cli: budget the vocabulary fetch at its own timeout and test the non-200 path#5267dece32
- cli: check the error envelope rule before the free-form early return#81627c0d48
- cli: count recovery outcomes, not decisions, and pin the recovery entry points#639b7a5d72
- cli: decide a bounded run's timeout on the kill, not on a clock that races it#82388ca608
- cli: decide a bounded run's timeout on the kill, not on a clock that races it#8235bdcda0
- cli: escape bidi controls in refusal paths too#778fac3ca2
- cli: fail closed on the orphan re-read and count sidecars apart (#811) (dafea1b), closes #775
- cli: fold #774's review — fd-based repair, symlink-refusing reader, one marker seam (0a80f8d), closes #752
- cli: guard config::cache_dir_opt like the config and data doors#828fbdc13f
- cli: guard config::cache_dir_opt like the config and data doors (#828) (47d7b2c), closes #808
- cli: isolate every cli/tests binary from the real HOME and pin it with a sentinel (#828) (7ec68d8), closes #808
- cli: keep the sidebar's Remote Control hint silent where it would clip the command#7720d6545f
- cli: log the runtime-dir listing refusal and record an unreadable subdir in the digest#8303e91940
- cli: make the bound-probe control block instead of racing the binary (#823) (87d3192), closes #830
- cli: make the HOME-isolation sentinel see every spelling of a test binary spawn (#828) (c8c9d2f), closes #808
- cli: name a refused cache dir in status and escape control bytes in refusals#77854c2c27
- cli: pin the cache guard's relocation half and name a refused cache dir#778a1b74fd
- cli: pin the exempt door's caller list and refuse it an unrelocated HOME (#808) (3978676), closes #781 #692
- cli: reap Notetaker account sidecars whose capture never wrote a transcript#811600c2d8
- cli: reap Notetaker account sidecars whose capture never wrote a transcript (#811) (b288e59), closes #775
- cli: refuse a credential dir under a devcontainer, .envrc or .vscode tree, not only .git#778f12da75
- cli: refuse a credential dir under a devcontainer, .envrc or .vscode tree, not only .git#778e395a71
- cli: refuse the real config directory from a test binary#808d74942c
- cli: refuse the real config directory from a test binary (#808) (fe3d931), closes #781 #692
- cli: reopen audio legs with the machine lock released, and log the decision#639171d223
- cli: reopen audio legs with the machine lock released, and log the decision#639cd54469
- cli: repair an owner-read-stripped dir before the fd checks, label the open failure (#774) (57583af), closes #752
- cli: require an explicit directory at every config-dir door in a test binary (#808) (e5e5481), closes #781
- cli: route crewkit blueprint's claude children through the LLM gateway#822ab62410
- cli: route crewkit blueprint's claude children through the LLM gateway (#822) (e32b913), closes #805
- cli: route the observer's own claude children through the LLM gateway#805fb5acc0
- cli: route the observer's own claude children through the LLM gateway (#805) (9736fa3), closes #364
- cli: show the Remote Control state in the TUI sidebar, off the same gateway value#772fdc0b33
- cli: show the Remote Control state in the TUI sidebar, off the same gateway value (#772) (bc3623c), closes #533
- cli: survive a lost runtime-dir create race; drive the LSP marker test#774a29bdb2
- cli: survive a lost runtime-dir create race; drive the LSP marker test (#774) (38d4860), closes #752
- cli: take the gate-3 findings on the blueprint gateway seam (#822) (fdd39a1), closes #805
- cli: take the gate-3 findings on the cache-dir door's in-suite control (#828) (01d1c69), closes #808
- cli: take the gate-3 findings on the fixture guard#8165f8b2da
- cli: take the gate-3 findings on the gateway child routing (#805) (fab92d2), closes #364
- dashboard: decline the AUP in one navigation and pin the exemption (#518) (a5b20f7), closes #370
- dashboard: do not call a paused source retrying#640a1de4b0
- dashboard: explain a user-level GitHub failure on the Runs page#798eb7c77c
- dashboard: explain a user-level GitHub failure on the Runs page#7985ce04be
- dashboard: keep a connected legacy provider visible so it can be disconnected#5109e5b2c2
- dashboard: keep connect disabled past the redirect bound and clear it on pagehide#520a27586c
- dashboard: label the unattributed bucket instead of rendering it as a hash#6127c80ec5
- dashboard: list only the git providers that can be connected#510ce2c63d
- dashboard: match the API GitHub-connection error exactly before offering support#798acabd7d
- dashboard: name the cloud-job columns the retention term clears#5196a20daf
- dashboard: pin the integrations outline and bound the connect spinner#520b9d8734
- dashboard: pin the integrations outline and bound the connect spinner (#520) (a1b8f19), closes #459
- dashboard: read slack_revoked as required and say when no token was held#77112503ea
- dashboard: regenerate api types for unavailable bulk-item token after the #875 rebase#6466e5d6bf
- dashboard: regenerate the API types after the vocabulary description change#52618ad94b
- dashboard: show nothing for a paused source's error summary#6407552ea4
- dashboard: state the retention term for cloud-job content on the integrations page (#519) (6166b52), closes #513
- dashboard: wrap the last bare logout callback and release the decline lock#518e2bee8b
- sessions: match a multipart field on its Content-Disposition name, pin the boundary#900d9d7806
- sessions: match a multipart field on its Content-Disposition name, refuse duplicates#90026dd209
- sessions: pin the multipart boundary and refuse ambiguous parts#900f07e27d
Code Refactoring
- api: normalise the share token once and share the test helper#434c7267bd
- api: pin the NULL provenance stamp and share the agent_job test helpers#440c4944c9
- api: table the residency purge's steps so a count can read the same relations#694c248bc8
- ci: drop the redundant OSError subclasses from the group reaper#776d5f8016
- cli: one telling of the #808 incident, and a for_test constructor (#808) (003c62f), closes #781
- cli: read a path in both spellings through one helper#77897b94d4
- dashboard: rename transcript-view to transcript-presentation#801d854379
- dashboard: rename transcript-view to transcript-presentation (#801) (b6c25da), closes #457
- sessions: bind the form-data kind once and fold the raw multipart helper#9007c09889
Showing the 20 most recent releases. Older releases are on GitHub.