6.2 KiB
Claude note — Bedrock IAM was opened, used, and CLOSED AGAIN the same day
STATUS AT END OF DAY: CLOSED. Both policies were detached and deleted at ~15:58 on the owner's instruction.
InvokeModelandListFoundationModelsboth returnAccessDeniedException— verified by calling them, not assumed. To embed again you must re-create the policies frominfra/aws/iam/. Everything below describes the window while it was open; read it before re-opening anything.I edited two files you own, on the owner's explicit instruction ("fix luôn đi"), after your 14:05 commit had landed so they were not in-flight:
apps/ai-service/adapters/embedding.py(addedBedrockCohereQueryEmbedder) andapps/ai-service/bootstrap.py(acceptsEMBEDDING_PROVIDER=cohere-v4), plus one fieldaws_regioninconfig.py. Reason: the collection now holds Cohere vectors while ai-service embedded queries withLocalHashQueryEmbedder(SHA-256 of tokens). Querying across those two spaces returns hits and raises nothing — a silent wrong-answer path. The new embedder has only been import-checked, never run against Bedrock, because cloud was revoked first. Revert or rewrite it freely.Result of the run: 15,100/15,100 embedded, 15,100 points in
duocthu_v1, count gate PASS, manifest SHA04a27166…, spend ~$0.49. Retrieval measured at hit@1 0.544 over 160 cases, withchong_chi_dinhat 0.05 — seedocs/progress-log.mdfor the full finding and why re-embedding does not fix it.
Date: 2026-08-04, afternoon session. Written by: Claude, at the project owner's explicit instruction ("em apply IAM đi").
What changed, and why it matters to you
The Bedrock IAM policies that both previous sessions deliberately left unapplied are now applied. The account can spend money on Bedrock from this moment. That is the single most important line in this file.
Previous state (recorded in infra/aws/iam/README.md, 2026-08-03):
ai-lab-user held no bedrock:* permission from any source; both
ListFoundationModels and InvokeModel returned AccessDeniedException.
Exactly what was done
Two customer-managed policies created from the drafts in infra/aws/iam/:
| Policy | ARN |
|---|---|
BedrockEmbeddingInvoke |
arn:aws:iam::669054243828:policy/BedrockEmbeddingInvoke |
BedrockModelAccessBootstrap |
arn:aws:iam::669054243828:policy/BedrockModelAccessBootstrap |
Both attached to the user ai-lab-user, not to AI-Lab-Group.
This deviates from the command sequence documented in
infra/aws/iam/README.md §"Applying them", which used attach-group-policy.
Reason: the group may carry other identities, and the user attachment is the
narrower blast radius. If you prefer the group form, detach and re-attach —
the policy documents themselves are unchanged.
Verified, with the exact scope
| Check | Command | Result |
|---|---|---|
| Identity | aws sts get-caller-identity |
arn:aws:iam::669054243828:user/ai-lab-user, region us-east-1 |
| Attachment | aws iam list-attached-user-policies --user-name ai-lab-user |
both policies listed |
| List models | aws bedrock list-foundation-models --by-output-modality EMBEDDING |
succeeds — previously AccessDeniedException |
| Target models | aws bedrock get-foundation-model on both ids |
amazon.titan-embed-text-v2:0 → ACTIVE; cohere.embed-v4:0 → ACTIVE |
NOT verified — do not read this note as "Bedrock works"
InvokeModelhas never been called successfully. OnlyListandGetwere exercised. Every request body inembed/bedrock_titan.pyandembed/bedrock_cohere.pyremains documentation-derived and unproven.modelLifecycle.status: ACTIVEmeans the model is not deprecated. It is not a statement that this account has been granted access to it, and it is not a statement that a Marketplace subscription exists for the third-party Cohere model.- Whether an SCP or permissions boundary would still deny an invoke was not and cannot be ruled out from inside the account.
Spend
$0 this session. No InvokeModel call, no embedding, no EC2, no other
cloud resource. The spending rule in README.md is unchanged and still
binding: announce an intended spend here before making it, and a single
short-string probe comes before any corpus run.
Housekeeping to do later
BedrockModelAccessBootstrap carries aws-marketplace:Subscribe — the right
to commit the account to a paid offer. Per infra/aws/iam/README.md it is a
one-time policy: detach it once model access is confirmed granted. It is
still attached as of this note.
Two of your files were deleted, at the owner's instruction
Flagging plainly rather than letting you find it:
.venv-bge-benchmark/was deleted (80.9 MB). It was installed half-finished — it heldsentence_transformers 5.6.1andnumpybut notorch, soimport sentence_transformerscould not have worked. Nothing was running against it: nopython/pipprocess existed and the directory had not been written since 13:56:43. Owner's words: "venv của codex dẹp mẹ đi". Your source is untouched —ingestion/ingestion/embed/benchmark_local.pyandingestion/tests/test_embed_benchmark_local.pyare exactly as you left them. Only the virtualenv is gone; recreate it with torch included.- An orphaned Docker WSL disk image on the owner's machine
(
D:\DockerDesktopWSL\disk\docker_data.vhdx, 15.94 GB, last written 22/06, not referenced by the WSL registry) was deleted to free disk. This is outside the repository and does not affect the running Docker; both containers stayed up and Qdrant answered on 6333 afterwards.
Still open, unchanged
- Corpus stability question #4 to Codex is still unanswered. Gate A6 binds
a collection to
sha256(chunks.jsonl). Please state in this folder whethersegment//chunk/work is final, so the corpus sha can be treated as stable. No corpus embedding spend should happen before that. - Embedding model is still unchosen between Titan v2 and Cohere v4. Note this is not a reversible-at-leisure choice: queries must be embedded with the same model as the corpus, so it locks production too.