Repository navigation
Maintainer Runbook
How this repository is actually run. Not learner-facing — it lives here rather than in docs/ because it is operational, and it changes as the tooling does.
| Surface | Governed by | Gate |
|---|---|---|
modules/ |
Review |
Validate workflow |
cheatsheets/ |
Review |
Validate workflow |
labs/ |
Review + self-verification |
L.A.B. Simulator workflow |
| Discussions | Labels + conventions | Human |
| Workflow | Protects against |
|---|---|
| Validate | Broken notebook JSON, Python syntax errors, broken relative links, leaked secrets/account IDs/local paths, client branding returning |
| L.A.B. Simulator | A lab shipping broken: every reference must pass all three phases, every starter must fail, the index must be current, no lab may touch the network |
| Freshness (weekly) | Link rot — opens or comments on an issue when something breaks |
| Welcome | First-contribution friction |
The account-ID check is the one to never weaken. It greps for any 12-digit number that is not the placeholder 123456789012. It has already caught a real leak.
-
modules/NN-topic/withslides/ notebooks/ exercises/ solutions/ activities/ src/ - A
README.mdmatching the existing shape — objectives, concept table, ordered sequence, recording row, common mistakes, folder map, navigation - An LLD at
docs/architecture/lld/NN-topic.md - Rows in the root
README.mdtable,modules/README.md, and the relevant learning paths - A Field guide for this module section linking the relevant frameworks
Seven files; labctl verify enforces the two rules that matter.
python labs/runner/labctl.py verify # references pass, starters fail, DAG acyclic
python labs/runner/labctl.py index --write # regenerate the catalog tableThen mark it ✅ in PATHWAY.md. Full guide: CONTRIBUTING-A-LAB.md.
verifycaught four real bugs in the labs' own reference solutions during authoring. Never bypass it.
Every practice thread needs a track, a level and a format label, and a row in the index.
Titles: <Topic> <N> · <what it teaches>. No day numbers, no cohort references, no schedule artefacts — discussions are a large part of how people find this repository, and those mean nothing in a search result.
Taxonomy and conventions: docs/DISCUSSIONS.md.
Three things have leaked before and are now checked:
| Never | Placeholder |
|---|---|
| Real AWS account IDs | 123456789012 |
| Local filesystem paths | /workspace/ |
| Client or cohort branding | — |
Notebook outputs are committed on purpose — seeing expected output is part of the teaching. That is exactly why they leak. Before committing a notebook you ran:
grep -rlE '[0-9]{12}' --include='*.ipynb' .
grep -rl "$(whoami)" --include='*.ipynb' .Discussions are not covered by CI. They were scrubbed by hand once, after a real account ID was found in a thread. Check any long paste before posting.
Save the rediscovery:
| Thing | Why |
|---|---|
| Creating discussion categories | No createDiscussionCategory mutation — repo settings only |
| Creating native polls |
CreateDiscussionInput takes only title, body, category. Poll threads here use reactions |
| Pinning discussions | No pinDiscussion mutation — UI only. Maximum four. pinnedDiscussions is readable via GraphQL, so you can verify. The wiki _Sidebar mirrors the four: change the pins, change the sidebar |
| Setting the social preview image | No REST field; the API silently ignores it — Settings → General |
| Creating the wiki | No API. The wiki git repo does not exist until the first page is created in the UI |
| Syncing the boards from Actions |
GITHUB_TOKEN cannot access Projects v2, and a fine-grained PAT cannot access user-owned projects. Needs a classic PAT, project scope only — see the board sync token below |
One secret, PROJECT_TOKEN, turns on two of the three boards. It is the only secret this repository
needs, and the only maintenance it asks of you is a rotation when it expires.
| Powers | Hands-on Tracker and Repo Pulse |
| Does not power | The Scoreboard wiki page, /leaderboard, /progress, the weekly digest, or the PDLC board. All of those work without it |
| Used by |
Pulse & Scoreboard — every six hours, after every Arena run, and on demand |
| Kind of token | A classic PAT with the project scope only. Nothing else |
| First-time setup | docs/setup/project-token.md |
Two dead ends, both worth remembering so they are not rediscovered:
-
GITHUB_TOKEN— the token Actions provides automatically — has no access to Projects v2 at all. - A fine-grained PAT has no permission that covers user-owned Projects. It works for organisation-owned projects; these boards belong to a user account, so it does not.
That leaves a classic PAT. Its project scope covers every project on the account and cannot be
narrowed, which is exactly why the token carries no other scope and a short expiry.
gh secret list -R akash-coded/aws-bedrock-agentcore-strandsPROJECT_TOKEN should be listed. That proves the secret exists, not that the token behind it is still
valid — for that, read the last run:
gh run view --log $(gh run list --workflow=pulse.yml --limit 1 --json databaseId --jq '.[0].databaseId') | grep -E "tracker board|pulse board|Boards not synced"| You see | Meaning |
|---|---|
tracker board: N rows and pulse board: N live items
|
Working |
Boards not synced — PROJECT_TOKEN is not set |
The secret is missing or misnamed |
Boards not synced — … with a permission error |
The token has expired, been revoked, or lost its scope |
The run does not fail. The sync emits a warning annotation, the scoreboard still publishes, and only the two boards stop refreshing. That is deliberate: an expired token must never be able to take the scoreboard down with it.
So the failure is quiet. The signal to watch is a board whose rows have stopped moving while the Arena is still receiving submissions.
Two steps, about two minutes, and nothing to redeploy.
-
Generate a replacement at https://github.com/settings/tokens/new?scopes=project&description=aws-bedrock-agentcore-strands+board+sync — classic token,
projectscope only, 90 days. Copy it once. -
Store it, pasting at the prompt so it never enters shell history:
gh secret set PROJECT_TOKEN -R akash-coded/aws-bedrock-agentcore-strands
Then force a run rather than waiting six hours:
gh workflow run pulse.yml -R akash-coded/aws-bedrock-agentcore-strandsNever pass the value with --body, and never paste it into a file, an issue or a chat. If it is ever
exposed, revoke it first and rotate second — revoking is instant and the boards degrade gracefully.
gh secret delete PROJECT_TOKEN -R akash-coded/aws-bedrock-agentcore-strandsThen delete the token itself under Settings → Developer settings → Tokens (classic). The workflow returns to scoreboard-only mode on its own, with a warning on each run.
No versions — this is teaching material, not a library. Instead:
- Land the change with CI green
- Add a
CHANGELOG.mdentry, calling out anything that breaks deep links - For anything learner-visible, add a section to the release notes discussion
Deep links matter more than usual here. People bookmark specific exercises and modules. Moving a file is a breaking change; say so.
| Comes in as | Route |
|---|---|
| Broken notebook / wrong doc | Issue → fix → note in changelog if learner-visible |
| "AWS changed" | Highest priority. Nothing degrades this material faster |
| Question | Q&A. Mark the answer. Add a row to Community Answers |
| Idea | Ideas → extension board if adopted |
| Contact-form message | Arrives by e-mail (reply-to is the sender) and as an issue in the private inbox repo. Reply, then close the issue |
| New error |
Error Index; promote to troubleshooting.md once seen twice |
Live at https://akash-coded.github.io/aws-bedrock-agentcore-strands/ · source in site/
The written companion is on this wiki, starting at The Agentic PDLC. When the tool changes substantively, the wiki pages are what need re-checking — they carry the same numbers.
| Task | How |
|---|---|
| Update the tool | Replace site/app/SkyWays-Architect.html with the new export and push. The Pages workflow builds and deploys |
| Change the footer, disclaimer or links |
site/frame/frame.js (text) and site/frame/config.js (links, contact delivery) |
| Turn the contact relay on |
site/contact-relay/deploy.sh in your own AWS account → click the SES verification link → paste the Function URL into site/frame/config.js
|
| Mirror messages into GitHub | Create the skyways-contact-relay/github secret in Secrets Manager with a fine-grained token limited to the inbox repo (Issues: read/write) |
| Preview locally | python site/build.py && python -m http.server -d site/_site 8000 |
| Regenerate the wiki's generated pages | In order: python3 site/build.py --shots, node site/tools/shoot.mjs, python3 site/wiki_export.py (journeys), python3 site/wiki_pictures.py (pictures on hand-written pages), python3 site/export_models.py (mental models; --check says whether the page is current), python3 site/learn_export.py (tutorial index), python3 site/course_export.py (course and labs companion), python3 wiki/check.py --strict, push, wait for Pages, then run the Wiki sync workflow (Actions, Wiki sync, Run workflow), which runs wiki/sync.sh with GitHub's own token. From a machine where gh is signed in, bash wiki/sync.sh does the same. Every generated page names its source in its footer |
- Is
PROJECT_TOKENstill alive? Check the lastPulse & Scoreboardrun fortracker board: N rows. If it saysBoards not synced, rotate it — the run will not fail to tell you
-
Freshnessworkflow result — any link rot? - Open issues labelled
aws-update - Unanswered Q&A older than a week
- Dependabot alerts
- New discussions missing labels
This wiki is the connective layer. The repository is canonical and versioned; these pages are the cross-surface maps and the notes that change too often to live in a reviewed file. Anyone can edit — see Editing this wiki.
▶ Start here · 55 lessons, on the site ↗
- Getting started · 2
- Agentic PDLC fundamentals · 9
- Methods decoded · 7
- Running delivery · 13
- By role · 9
- Teams and organisation · 4
- Practice · 4
- Interviews and careers · 7
The method
The Agentic PDLC
The Eight Loops
Gates & Governance
The Evidence Pack
The journey · end to end
Product manager
Solution architect
Engineering lead
QA lead
DevOps & platform
The method · by role
Product manager
Solution architect
Engineering lead
QA lead
DevOps and platform
Sponsor
How to
Run an NFR workshop
Design an agent on paper
Build, buy or borrow
Cut sprints into bolts
Review by risk band
Prove the bar
Control the token bill
Hold the security boundary
Run a missing-control postmortem
Reference
Mental Models
Glossary
Formulas & Calculators
Decision Trees
Scenario Library
Exercises & Answers
Anti-Patterns
Sources & Confidence
Where do I find…?
The 16 modules
- Agentic Foundations
- LLM Intuition and the AWS Bridge
- Amazon Bedrock Essentials
- Amazon Bedrock Agents
- Agent Builder, Knowledge Bases and Guardrails
- The Agent Loop: No Framework to Strands
- Strands Foundations: Tools, Memory and MCP
- Multi-Agent Patterns with Strands
- LangChain and LangGraph
- LLM Memory Mechanics
- RAG, OpenSearch and LiteLLM
- Amazon Bedrock AgentCore
- A2A and A2UI: Agent Interoperability
- Agentic QA and Evaluation
- End-to-End Production Pipeline
- Agentic Product Lifecycle
Learning paths · Field guide
Study Plans
Eight sessions
Living notes
Error Index
Community Answers
Field Notes
Model & Region Notes
Cost Log
Scoreboard 🧪
The project
Roadmap
Editing this wiki
Maintainer Runbook
📘 The manual · live
🛫 Ninety Days, the simulator
🧰 The workbench
👔 For leadership
🧠 Mental models
Templates · Prompts
Frameworks & acronyms
The repository · Setup
Pinned discussions
Discussion map — where to post what
Exercise & lab index
Simulator Arena — get a lab graded
Pitch an idea
All discussions →