Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions .audit/qbraid-code-org-profiles.tsv
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
ts phase decision why evidence result
2026-08-21T03:17:06Z frame Started from a clean origin/main worktree The current checkout was a merged feature branch and would mix unrelated history origin/main 2427263; git status clean feature branch
2026-08-21T03:17:06Z research Used named account profiles and a model capability catalog as the leading design candidates Read-only architecture scout found one key drives several unsynchronized artifacts and model facts are scattered agent message arch-history; docs/research design exploration open
2026-08-21T03:17:12Z frame Defined the run exit predicate The unattended run needs an objective stop condition session todo and native checks predicate defined
2026-08-21T03:19:05Z baseline Ran every local CI-equivalent shell check before changes A clean baseline separates existing failures from regressions shellcheck; bash -n; tests/statusline.sh; tests/extractors.sh; tests/model-routing.sh; install.sh --help 24 behavior tests and all checks green
2026-08-21T03:19:05Z brand Chose the dark-mode qBraid violet for terminal branding and kept credit warning colors The published brand spends one violet accent on chrome and permits separate state colors /tmp/qbraid-brand.md from https://vessa.design/brand/qbraid brand facts captured
2026-08-21T03:22:17Z architecture Opened the visual architecture report and chose account profiles as the first deepening Account cross-talk can charge and display different organizations; profiles also give model state a stable owner /var/folders/1v/_4ktp36n22d72l98hgy_xj3w0000gn/T/architecture-review-20260820-222213.html report opened; selection implicit from user request
2026-08-21T03:25:27Z probe Kept Opus adaptive thinking blocked pending an API fix A live production request returned HTTP 400 because qbraid-api changed adaptive to enabled redacted curl probe; qbraid-api origin/staging 1942979c reproduced exact failure
2026-08-21T03:25:27Z probe Confirmed Sol accepts Claude Code default thinking through CLIProxyAPI when tool count is under 128 The first probe failed on the documented 128-tool limit; strict MCP isolated thinking compatibility /tmp/probe-sol-thinking.sh; CLIProxyAPI 7.2.135 Sol returned OK over translated /v1/messages
2026-08-21T03:28:45Z impact Treat qbraid-api and qbraid-code as a coordinated contract despite an empty impact route The mapper does not index qbraid-code; zero consumers is a coverage gap, not safety /tmp/qbraid-impact-ai-messages.json; repos.json qbraid-code note required deploy order will be explicit
2026-08-21T03:28:50Z research Captured primary-source constraints in the repository research note Claude Code has process-wide context policy, no organization field in status JSON, and no in-process credential switch docs/research/2026-08-20-gateway-capabilities-and-organizations.md research complete
2026-08-21T03:30:07Z prototype Removed legacy --global gateway env from the viable profile design A fake gateway proved user settings env overrides process env and would silently select the wrong profile /tmp/fake_anthropic_server.py; captured settings-model request settings precedence reproduced
2026-08-21T03:30:07Z prototype Included adaptive display and effort in the API fix contract Claude Code sent adaptive display omitted and output_config effort high; qbraid-api currently drops both /tmp/fake-anthropic-requests.jsonl wire shape captured
2026-08-21T03:34:09Z design Selected per-profile directories with an atomic active pointer It isolates secrets, proxies, ports, and caches without a daemon or registry parser /tmp/qbraid-code-selected-architecture.md arena dropouts documented; selected
2026-08-21T03:35:24Z api-fix Preserved adaptive type, display, and effort at the Bedrock provider boundary Live Claude Code payload and SDK serialization proved all three fields are meaningful qbraid-api thinking + validation tests focused tests and typecheck green
2026-08-21T05:37:53Z security Removed plain-Claude --global mode Project settings can override only the base URL and exfiltrate a user-settings bearer Claude 2.1.238 fake-gateway precedence probe; contested review installer rejects --global and removes legacy gateway env
2026-08-21T05:37:53Z architecture Replaced mutable profile directories with atomic metadata generations A crash between in-place writes mixed credentials, labels, models, and proxy state failed-update fixture with rotated key and disabled proxy current pointer changes only after a complete generation
2026-08-21T05:37:53Z security Moved keys to OS vaults with a Linux 0600 fallback Status hooks and Claude tools must never receive the reusable upstream key Keychain/Credential Locker guidance; secret-free snapshot tests Claude receives only a random per-launch loopback bearer
2026-08-21T05:37:53Z lifecycle Replaced shared profile proxies with per-launch owned proxies Refcounts and shared ports created teardown, update, and Terminal Services races real CLIProxyAPI launch; occupied-port fixture; contested review runtime config is unlinked after health and process stops on exit
2026-08-21T05:37:53Z compatibility Disabled gateway model discovery and required relaunch for model changes Claude Code context policy is process-wide while gateway rows span 200k to 1m context-policy fixtures and wire probe each process has one conservative capability policy
2026-08-21T05:44:21Z lifecycle Kept the private runtime config until proxy shutdown CLIProxyAPI starts its file watcher after the first healthy response and exits if the config was already unlinked CLIProxyAPI 6.8.40 delayed watcher repro; watcher-lifetime fixture supersedes early-unlink result; cleanup removes the private runtime directory
2026-08-21T05:51:13Z security Pruned superseded generations and credentials after atomic commit Profile updates already reject live sessions, so retaining old keys only enlarged exposure rotated-key fixture checks old generation and secret removal only current generation remains recoverable
2026-08-21T05:51:13Z migration Scrubbed plaintext legacy env after vault migration Running sessions already hold launch credentials and status needs only label/cache files migration fixture checks non-secret root state remains idempotent migration leaves no root token duplicate
2026-08-21T05:51:13Z portability Preferred Linux Secret Service and retained a 0600 headless fallback Desktop Linux provides an OS credential store but minimal servers may not fake secret-tool migration and failure fallback fixtures secret-service backend selected only after a successful store
2026-08-21T05:51:13Z identity Rendered a shortened verified organization-ID tag beside local labels API-key auth often lacks an authoritative organization name organization-id provenance file and status fixture local text stays marked and gains verified account evidence
2026-08-21T05:52:35Z validation Kept proxy healthy after delayed watcher initialization First health can precede CLIProxyAPI watcher startup real CLIProxyAPI delayed second /v1/models returned HTTP 200; runtime removed on exit per-launch config lifetime and cleanup verified
2026-08-21T05:55:21Z migration Deferred legacy plaintext scrub until successful generation commit Immediate scrub broke the old launcher when later installation steps failed pre-commit migration fixture retains root token; post-commit helper scrubs it supersedes immediate-scrub timing while preserving final no-duplicate state
2026-08-21T05:58:51Z migration Removed legacy secret-bearing proxy config after safe handoff The old singleton proxy template embedded the upstream key twice migration fixture covers inactive cleanup, live watcher preservation, and dead-owner scavenging new launchers remove residue once no legacy proxy watches it
17 changes: 8 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,17 @@ jobs:
run: brew install shellcheck

- name: shellcheck
run: shellcheck -S warning install.sh qbraid-code statusline.sh tests/statusline.sh tests/extractors.sh tests/model-routing.sh
run: shellcheck -S warning install.sh qbraid-code statusline.sh tests/*.sh

- name: syntax
run: |
bash -n install.sh
bash -n qbraid-code
bash -n statusline.sh

- name: statusline tests
run: tests/statusline.sh

- name: extractor tests
run: tests/extractors.sh

- name: model routing tests
run: tests/model-routing.sh
- name: shell tests
run: |
for test in tests/*.sh; do bash "$test"; done

- name: installer --help does not touch the machine
run: bash install.sh --help
Expand Down Expand Up @@ -62,6 +57,10 @@ jobs:
"parsed $($f.Name)"
}

- name: Windows profile tests
shell: powershell
run: tests/windows-profiles.ps1

- name: batch launcher is CRLF and BOM-free
shell: pwsh
run: |
Expand Down
Loading
Loading