Center Admin โ
Operational manual for the developer center administrator โ the operator role responsible for the catalog (groups, missions, events), content publishing, taxonomy, BTP user access, and pipeline health for the tutorial system.
Persona summary โ
- Role: Day-to-day operator of the tutorial platform.
- Tools and access:
- BTP subaccount admin (community-tools subaccount)
- CF Space Developer in the prod space
- GitHub admin in the
sap-tutorialsorganization (granted via SAP OSPO) - "Tutorials Admin" role collection (scopes:
Admin,DisplayApp,DeveloperApp,Everyone) โ sufficient for day-to-day operations. - "Tutorials SuperAdmin" role collection (adds
SuperAdminscope) โ required for destructive operations such as DB schema changes. CONTENT_API_KEYenv var value (held by the Center Admin team; required forPOST /content/publishandPOST /content/rollback)- Local clone of
tutorials-imsfor emergency operations and rebuilds
Layout of this guide โ
The tasks below are grouped by concern:
A short decommissioned-tasks.md appendix maps tasks from the old run-book to their replacements.
Content & catalog ops โ
Task: Add / revise / delete a Group โ
- Interval: On demand
- Status: Active
- Purpose and Objective: Groups are thematic collections of tutorials that do not carry completion tracking. They appear as filtered views in the Tutorial Navigator. Every group needs a slug for the build pipeline to generate a page at
/group.<slug>.
Prerequisites:
Tutorials Adminrole collection in BTP cockpit (scope:Admin)- Access to
/admin-ui/in the deployed app
Steps:
Navigate to
<approuter-url>/admin-ui/and open the Groups tile.To add: press + (Create). To revise: select the row and press Edit. To delete: select the row and press Delete.
Fill in or update:
Title โ display name shown in the navigator.
Description โ short paragraph surfaced on the group landing page.
Slug โ URL segment used at
/group.<slug>. Use only lowercase letters, digits, and-as word separators. Choose a prefix based on the primary product topic:Primary topic Prefix Business Technology Platform btpIntegration Suite integrationABAP abapCAP capKyma kymaAI Business Suite aiJoule Studio jouleSAP Build buildExample:
btp-security-best-practices.Tags โ link to taxonomy tags that have been imported (see Task: Import a new tag from the SAP taxonomy).
Tutorials โ ordered list of tutorial slugs belonging to the group.
Save. The change is now in HANA.
Trigger a content rebuild so Hugo regenerates the group page and the navigator catalog picks up the change:
- GitHub โ
tutorials-imsโ Actions โ Rebuild Content โ Run workflow โ leave slug blank โ choose environment โ Run workflow.
- GitHub โ
Verify:
GET /build/catalogreturns the group with the new slug. The navigator at/tutorial-navigator.htmlreflects the update after the rebuild completes.
Slug population check: If after a fresh environment deploy group slugs are missing (the navigator shows numeric IDs), run:
cf login # DEV space
npx cds bind --exec -- node scripts/setup-dev-data.cjsRelated:
Task: Add / revise / delete a Mission โ
- Interval: On demand
- Status: Active
- Purpose and Objective: Missions are structured learning paths with completion tracking and badge/prize awards. A mission contains one or more Completion Paths (ordered sequences of tutorials). The build pipeline generates a page at
/mission/<slug>.
Prerequisites:
Tutorials Adminrole collection (scope:Admin)- Access to
/admin-ui/โ Missions tile
Steps:
Navigate to
/admin-ui/โ Missions tile.To add: press + (Create). To revise: select the row and press Edit. To delete: select the row and press Delete.
Fill in:
- Title and Description โ shown on the mission landing page and in the navigator.
- Slug โ follows the same conventions as group slugs above.
- Completion Paths โ a mission may have multiple completion paths (e.g., one for Node.js, one for Java). Each path is an ordered list of tutorial slugs. Add paths via the Completion Paths sub-section.
- Tags โ taxonomy tags (same pool as groups).
- Accomplishments โ optional: link to an accomplishment record for badge awards on completion.
Save. Trigger a full rebuild (leave slug blank) so the navigator catalog and mission page are regenerated.
Verify:
GET /build/catalogreturns the mission with the correct slug and all paths populated.
Slug population check: Same as for groups โ run setup-dev-data.cjs if slugs are blank after a fresh deploy.
Related:
Task: Define an App Space event โ
- Interval: Per-event
- Status: Active
- Purpose and Objective: App Space events configure the event-themed tutorial space (Joule/Sapphire/default visual themes, QR-code registration, real-time display dashboard). An event record links an event display to a mission and controls what is shown on the event monitor.
Prerequisites:
Tutorials Adminrole collection (scope:Admin)- Access to
/admin-ui/โ Events tile - Optional:
DisplayAppscope to view the display dashboard at/display-app/
Steps:
Navigate to
/admin-ui/โ Events tile โ + (Create).Fill in:
- Event name, Start/End dates, Location.
- Mission โ link the mission whose completion paths constitute the event curriculum.
- Theme โ choose
horizon(default SAP Fundamental),joule, orsapphire. The display dashboard at/display-app/?eventId=<id>&theme=<theme>applies the corresponding palette. - Active โ toggle on when the event goes live. Only one event should be active at a time for the AppSpace to display the correct theme.
QR code generation: After creating the event, retrieve the registration QR code:
bashcurl -s "<approuter-url>/api/qrcode?eventId=<event-id>" -o event-qr.pngThe
/api/qrcodeendpoint is unauthenticated and returns a PNG suitable for printing on name badges and banners.Event display (big monitors): Open the display dashboard on the event monitor browser:
<approuter-url>/display-app/?eventId=<id>&chartCount=6&theme=jouleThe dashboard connects via Socket.IO to
EventStreamServiceon the/ws/event-streamnamespace (anonymous WebSocket). It rotates through views (Board, Statistics, Leaderboard) automatically.Switching the live event: To change which event is active mid-conference, update the Active flag in the admin UI. The display dashboard and AppSpace pick up the change in real-time via WebSocket without a page reload.
Related:
- docs/developers/reference/theme-variants.md โ detailed palette variables for Joule, Sapphire, and TechEd
Task: Retire a tutorial (admin side) โ
- Interval: On demand
- Status: Active
- Purpose and Objective: Source-side retirement (removing the Markdown file from the
sap-tutorialsrepo) is handled by the tutorial author. See repo-group-owners.md#task-retire-a-tutorial. The admin's residual responsibility is to set up a redirect if the retired slug had meaningful production traffic.
Prerequisites:
Tutorials Adminrole collection (scope:Admin)- Access to
/admin-ui/โ Operations tile and optionally the Analytics Explorer at/analytics-ui/
Steps:
- Confirm whether the slug had production traffic. Check
/analytics-ui/โ SQL tab โ queryCompletionAnalyticsorTasksfiltered by tutorial slug, or check with the Analytics Admin (see analytics-admin.md). - If the slug had significant traffic:
- Navigate to
/admin-ui/โ Operations tile. - Create a redirect rule mapping the old slug path to the successor tutorial or a relevant landing page.
- Save and verify the redirect resolves correctly in the deployed environment.
- Navigate to
- Confirm the publish pipeline has run since the Markdown was deleted. After the next rebuild,
GET /content/hasheswill no longer include the retired slug, and/tutorials/<slug>will return 404.
Related:
Task: Import a new tag from the SAP taxonomy โ
- Interval: On demand
- Status: Active
- Purpose and Objective: Tutorial authors reference taxonomy tags in frontmatter (
primary_tag,tags). Tags not yet in the platform database will cause validation warnings during fetch. Adding a tag makes it available to the next build.
Prerequisites:
Tutorials Adminrole collection (scope:Admin)- Access to
/admin-ui/โ Tags tile
Steps:
Obtain the tag details from the product owner making the request:
- ID โ machine-readable identifier (e.g.,
software-product>sap-btp-build-code). - Internal Name โ slug-derived legacy field (e.g.,
sap btp build code); kept for migration compatibility, not user-facing. - Display Label โ the human-readable label shown to users on the navigator filter and tutorial cards (e.g.,
SAP BTP Build Code). This is the field that recovers slug information lossy formats can't preserve, likeS/4HANAinstead ofS 4hana. Inline-editable in the admin Tags app. - Parent tag โ the parent in the taxonomy hierarchy (e.g.,
software-product). - Taxonomy URL โ link to the tag definition in the SAP taxonomy system (for reference).
- ID โ machine-readable identifier (e.g.,
Navigate to
/admin-ui/โ Tags tile โ + (Create).Enter the ID, internal name, display label, parent, and taxonomy URL. Save.
The tag is immediately available in the HANA catalog. On the next
npm run fetch-tutorials(or full rebuild), the fetch script reads/build/tag-labelsfrom CAP and resolves the slug against the registered Display Label โ authors' tutorials referencing it will render with the correct label everywhere.Notify the requesting author that the tag is live.
Bulk seeding from AEM: at cutover,
npm run seed-tag-labelsharvests(slug โ label)pairs from the legacy developers.sap.com AEM Solr endpoint and PATCHes them intoTags.labelin HANA. Re-run only if AEM ships new tags before going dark; for tags AEM doesn't know about, edit the Display Label column manually here.
Related:
- writing-tutorials.md โ frontmatter field reference for
primary_tagandtags
Task: Force-rebuild content โ
- Interval: On demand (after catalog changes, emergency refreshes, single-tutorial fixes)
- Status: Active
- Purpose and Objective: Trigger the CI pipeline to re-fetch tutorial Markdown from GitHub, rebuild Hugo, and publish updated HTML BLOBs to HANA. Use a full rebuild for catalog changes; use a single-slug rebuild for isolated tutorial fixes.
Prerequisites:
- Write access to the
tutorials-imsGitHub repository - CI secrets already configured (
CONTENT_API_KEY,TUTORIALS_APP_ID/TUTORIALS_APP_PRIVATE_KEYorTUTORIALS_GITHUB_TOKEN)
Steps โ full rebuild:
- GitHub โ
tutorials-imsโ Actions โ Rebuild Content โ Run workflow. - Choose environment (
dev,qa, orprod). - Leave slug blank.
- Press Run workflow.
The pipeline: fetches all tutorials from GitHub โ generates Hugo pages โ builds Hugo โ publishes all changed HTML BLOBs to HANA via POST /content/publish --force.
Steps โ single-tutorial refresh:
- Same as above, but fill in the slug field (e.g.,
abap-cloud-ui-from-interface). - The fetch step busts only that slug's markdown cache and regenerates from cache for the rest.
Important: Single-slug runs skip the HANA
RepoCatalogupload (the discovery baseline is a production artifact). Do not use a single-slug run when group or mission metadata has also changed โ use a full rebuild in that case.
Related:
Task: Content rollback โ
- Interval: On demand (after a bad publish; before a corrective PR is merged)
- Status: Active
- Purpose and Objective: Revert the active content manifest to the previous version. This does not undo the source Markdown โ it only moves the manifest pointer so
/tutorials/*serves the prior HANA BLOB set. A corrective PR to the source repo should follow.
Prerequisites:
CONTENT_API_KEYvaluecurlor equivalent HTTP client- Deployed CAP srv URL
Steps:
Confirm the manifest is in a bad state:
bash# Check active manifest status curl -s "$CAP_BASE_URL/content/hashes" | python3 -c \ "import sys,json; d=json.load(sys.stdin); print(f'{len(d)} slugs in active manifest')"Trigger rollback:
bashcurl -s -X POST "$CAP_BASE_URL/content/rollback" \ -H "Authorization: Bearer $CONTENT_API_KEY" \ -H "Content-Type: application/json" \ -d '{}'Expected response:
{ "rolledBackTo": <version>, "status": "ACTIVE" }.If the response is
404 No rollback target found, there is no priorACTIVEorSUPERSEDEDmanifest to revert to โ escalate to a full rebuild.Verify:
/tutorials/<affected-slug>now serves the previous version.Open a corrective PR in the relevant
sap-tutorialsrepo to fix the source Markdown. After it merges, therepository_dispatchtrigger firesrebuild-content.ymlautomatically.
What rollback does not do: It does not touch source Markdown. It moves the manifest pointer in HANA โ the next full rebuild overwrites it again. If the bad content is in the source, fix the source first.
Related:
Pipeline & operations โ
Task: Monitor the publish pipeline โ
- Interval: Daily / after deploys
- Status: Active
- Purpose and Objective: Catch failed publishes, stalled jobs, and HANA errors before they affect readers.
Prerequisites:
Tutorials Adminrole collection (scope:Admin)- CF Space Developer in prod space (for Cloud Logging)
Steps:
Admin UI pipeline logs: Navigate to
/admin-ui/โ Operations tile โ Pipeline Logs tab. Each workflow run has a row. ThecfLogsUrlvirtual field in each log row opens SAP Cloud Logging pre-filtered to a ยฑ30-second window around the run โ click it for detailed server-side traces.GitHub Actions: GitHub โ
tutorials-imsโ Actions โ filter by Rebuild Content or Deploy. Red runs need investigation.Smoke tests: After any deploy, the CI pipeline automatically runs smoke tests. Check the Actions run summary for smoke-test results. Key smoke targets include:
GET /healthandGET /health/dbโ liveness and HANA connectivity.GET /build/catalogโ catalog availability.GET /content/hashesโ active manifest present.GET /tutorials/<canonical-slug>โ BLOB serving.
Content GC: A daily cron job at 03:00 prunes
SUPERSEDEDandROLLED_BACKcontent manifest versions older than 7 days (keeping the three most recent for rollback). No action needed unless the job shows errors in the Pipeline Logs.
Related:
Task: Pipeline incident playbook โ
- Interval: On demand
- Status: Active
- Purpose and Objective: Reference table for diagnosing common failure modes quickly.
Prerequisites:
- CF Space Developer in prod
- Access to GitHub Actions on
tutorials-ims CONTENT_API_KEYfor rollback operations
| Symptom | Likely cause | First check | Fix |
|---|---|---|---|
| Author's PR merged but content not live after 15 min | repository_dispatch from the source repo did not reach tutorials-ims | Source repo Actions tab โ check whether the dispatch step ran and what HTTP status it received | Verify TUTORIALS_DISPATCH_TOKEN secret on the source repo (e.g., sap-tutorials/abap-core-development) is still valid; rotate if expired |
| All publishes failing with HANA LOB errors | A recent code change is SELECTing a BLOB column alongside metadata in a single CDS QL query, triggering locator expiry | cfLogsUrl on the failing Pipeline Log row โ look for LOB locator expired or invalid locator handle | In srv/lib/content-store.js (or whichever handler regressed), split the query: use db.run() raw SQL for BLOB retrieval, and a separate CDS QL query for metadata โ never mix them in a single SELECT on HANA |
Manifest stuck in PUBLISHING status | Publish job crashed mid-run (network timeout, OOM, pod restart) leaving the manifest in a non-ACTIVE state | GET /content/hashes returns an error or empty; Pipeline Log shows status PUBLISHING with no ACTIVE follow-up | Run POST /content/rollback (see Task: Content rollback) to revert to the previous manifest; then trigger a full rebuild |
| GitHub rate-limit errors during fetch | Too many cold builds without a valid GitHub token | Actions log โ look for 403 rate limit exceeded from GitHub API calls | Ensure TUTORIALS_APP_ID + TUTORIALS_APP_PRIVATE_KEY secrets are set on tutorials-ims (preferred โ generates short-lived app tokens); fallback is TUTORIALS_GITHUB_TOKEN PAT |
/tutorials/<slug> returns 404 after rebuild | Slug not in the active manifest (BLOB never published for it) | GET /content/hashes โ check whether the slug appears | Run a single-slug rebuild with that slug; if the tutorial source was deleted, the 404 is expected โ set up a redirect via the Operations admin app |
Smoke tests failing on /build/catalog | CAP srv is down or HANA binding is broken | GET /health/db โ check HANA status | Check CF app status (cf app tutorials-srv); restart if crashed; check HANA Cloud instance status in BTP cockpit |
| Admin UI shows no data / OData 401 | XSUAA token expired or role-collection missing | /auth/user endpoint โ check scopes array | Assign the correct role collection in BTP cockpit; wait for token expiry (or log out and back in) |
Related:
- Monitor the publish pipeline โ daily health checks and Pipeline Log access
- build.md โ deep-dive on the fetch โ Hugo โ publish pipeline
Task: Backup and recovery โ
- Interval: Quarterly (restore-test); automated (backup)
- Status: Active
- Purpose and Objective: HANA Cloud provides automated point-in-time recovery within its retention window. The
ExportsServiceprovides logical exports of tutorials, users, and progress for off-system archiving.
Prerequisites:
- BTP subaccount admin (to access HANA Cloud backup controls in BTP cockpit)
Tutorials Adminrole collection (forExportsServicelogical exports)
Automated HANA Cloud backups:
SAP HANA Cloud performs continuous incremental backups automatically. Point-in-time recovery is available from:
https://cockpit.btp.cloud.sap โ your subaccount โ SAP HANA Cloud โ <instance> โ Manage HANA CloudThe retention window and recovery options depend on your HANA Cloud service plan. Recovery restores the entire instance โ coordinate with the team before initiating.
Logical exports via ExportsService:
The ExportsService at /admin/exports exposes a streaming download action:
# Export as CSV (requires Admin scope โ use a BTP-authenticated session or cf ssh + curl with XSUAA token)
GET /admin/exports/exportLegacyData?format=csv
GET /admin/exports/exportLegacyData?format=xlsxThis covers tutorial progress records and user data. Use for off-system archiving or pre-migration snapshots. The export is streamed and may be large for the full production dataset.
Restore-test cadence:
Quarterly, perform a restore-test into a dev or sandbox HANA Cloud instance. Verify that:
- The instance restores to a consistent state.
GET /health/dbreturns OK after binding the restored instance.GET /build/catalogreturns the expected missions and groups.- A smoke test run passes against the restored environment.
Document the result (date, duration, success/fail) in the team's incident log.
Related:
- mta-deployment.md โ MTA build and CF deploy reference, including HANA binding setup
- analytics-admin.md โ Export data action for logical off-system archiving
Access & identity โ
Task: Add a user to the system โ
- Interval: On demand
- Status: Active
- Purpose and Objective: Grant a new user the correct role collection for their persona. All access is via XSUAA role collections assigned in BTP cockpit โ there are no local user stores.
Prerequisites:
- BTP subaccount admin rights on the community-tools subaccount
Role collections and their purpose (from xs-security.json):
| Role collection | Included scopes | Typical assignee |
|---|---|---|
Tutorials Admin | Admin, DisplayApp, DeveloperApp, Everyone | Center Admin team members |
Tutorials SuperAdmin | SuperAdmin, Admin, DisplayApp, DeveloperApp, Everyone | Elevated operators (publish/unpublish, rollback) |
Tutorials Developer | DeveloperApp, Everyone | Internal developer tooling / service accounts |
Tutorials Display | DisplayApp, Everyone | Event-monitor screens (read-only) |
Tutorials Author | Tutorial.Author, Everyone | Tutorial authors who need access to the QA preview channel (/tutorials-qa/*) |
Steps:
- Go to
https://cockpit.btp.cloud.sapโ your subaccount. - In the left menu, navigate to Security โ Users.
- Search for the user by email address or SAP ID. If the user does not exist yet, press Create and enter their email.
- Click the > arrow at the right of the user's row to open the user detail.
- Click on Role Collections โ Assign Role Collection.
- Select the appropriate role collection from the table above and confirm.
Note: Users assigned
Tutorials Authorgain access to the QA preview channel at/tutorials-qa/*only. They cannot create or modify catalog records. For repo group owner registration, see repo-group-owners.md.
Related:
Task: Anonymize a user (GDPR / DSR) โ
- Interval: On demand (Data Subject Requests)
- Status: Active
- Purpose and Objective: Fulfill a GDPR right-to-erasure request by anonymizing all personally identifiable information for a user while preserving anonymized completion records for analytics integrity.
Prerequisites:
Tutorials Adminrole collection (scope:Admin)- Access to
/admin-ui/โ Accounts tile - The user's SAP ID or DSR request number
What gets anonymized:
- Name, email address, account number (replaced with an opaque token).
What is preserved:
- Anonymized completion records (task records remain linked to an anonymous identity โ no PII, but aggregate analytics remain accurate).
What is emitted:
- A
SecurityEventaudit log entry (via@cap-js/audit-logging) is written for every anonymization action. This is required for GDPR compliance and is visible in the SAP Audit Log Service connected to the subaccount.
Steps:
- Navigate to
/admin-ui/โ Accounts tile. - Search for the user by SAP ID or email.
- Open the user detail and locate the Privacy section.
- Press Anonymize User. Confirm the dialog.
- Alternatively, for a formal DSR request with a request number: use the Anonymize by DSR Request action and supply the DSR request number. This links the anonymization event to the request for audit trail purposes.
- Verify: the user's record now shows anonymized fields. The
SecurityEvententry appears in the audit log within seconds.
Do not delete the record. Deletion removes the completion history. Anonymization is the correct GDPR response โ PII is removed but the record structure is preserved for analytics.
Related:
- authentication.md โ XSUAA, BTP identity, and audit-logging setup
- Add a user to the system โ role collection assignment reference (Task 11)
Author support & coordination โ
Task: Handle author support requests โ
- Interval: As needed
- Status: Stub
- Purpose and Objective: Provide guidance to tutorial authors on taxonomy, access, preview deploys, and authoring best practices. The Center Admin is the first escalation point for authors who cannot resolve an issue with the standard writing-tutorials.md guide or their repo group owner.
Note (Stub): The intake channel for author support is currently internal Slack and GitHub Issues on
tutorials-ims. This task will be updated once a formal support channel and SLA are established.
Prerequisites:
- Familiarity with writing-tutorials.md and repo-group-owners.md
Tutorials Adminrole collection (for access/tag operations on behalf of authors)
Common request types and responses:
| Request | Response |
|---|---|
| "My tag isn't recognized by the validator" | Import the tag: Task: Import a new tag from the SAP taxonomy |
| "I can't see my tutorial after merge" | Check the rebuild pipeline โ did rebuild-content.yml fire? Check the source repo's dispatch step in Actions. |
| "I need access to the QA preview channel" | Assign Tutorials Author role collection in BTP cockpit: Task: Add a user to the system |
| "I need to move a tutorial to a different repo" | Direct to repo group owners: repo-group-owners.md#task-migrate-a-tutorial-to-another-repository |
| "My tutorial has a broken image after merge" | Confirm image path convention in writing-tutorials.md ยง3.4; if path is correct, trigger a single-slug rebuild |
Escalation paths:
- Technical platform issues โ open a GitHub Issue on
tutorials-imswith theplatformlabel. - Product taxonomy questions โ route to the product owner or SAP taxonomy team.
- GitHub org access โ route to SAP OSPO.
Related:
- writing-tutorials.md โ the primary authoring reference authors should consult first
- repo-group-owners.md โ repo group owner responsibilities and escalation paths
Task: Maintain the repo group owner list โ
- Interval: On demand (when an owner changes)
- Status: Active
- Purpose and Objective: Keep two records in sync: the JSON file in
tutorial-checker(used by the CI lint tool) and the Accounts records in the admin UI (used for in-app contact lookups and author support routing).
Prerequisites:
- Write access to
sap-tutorials/tutorial-checker Tutorials Adminrole collection (for admin UI Accounts edits)
Two sources of truth:
sap-tutorials/tutorial-checker/data/repository.owner.jsonโ the canonical list. Each top-level key is a repository group name; the value object hasname(GitHub username) andemail(SAP email). This file drives CI checks and contact lookups.Admin UI Accounts app โ
/admin-ui/โ Accounts tile โ holds the platform-side owner record linked to a user's SAP ID and role collection.
Steps:
- When an owner changes, update
repository.owner.jsonin a PR tosap-tutorials/tutorial-checker. - Also update the corresponding record in the admin UI Accounts app to reflect the new owner's SAP ID.
- If the outgoing owner held the
Tutorial.AuthorQA scope, remove theTutorials Authorrole collection from their BTP user. Assign it to the incoming owner. - Notify the new owner of their responsibilities: link to repo-group-owners.md.
Related:
Task: Conduct author office hours โ
- Interval: Monthly (suggested)
- Status: Stub
- Purpose and Objective: A recurring touchpoint where tutorial authors can ask questions, get live help with authoring issues, and stay current on platform changes. Helps surface recurring pain points before they become support tickets.
Note (Stub): The cadence and format below are recommended starting points. Adjust based on team availability and author community size.
Prerequisites:
- Meeting facilitation access (calendar invite, video call link)
- Prepared agenda template (see below)
Suggested cadence: Monthly, 60 minutes. Schedule in the first or second week of the month to give time to action items before month-end.
Agenda template:
Author Office Hours โ <Month YYYY>
1. Catalog status (5 min)
- New groups / missions added this month
- Upcoming taxonomy changes
2. Platform updates (10 min)
- Relevant changes to writing-tutorials.md since last session
- Any tooling or pipeline changes authors should know about
3. Author Q&A (30 min)
- Open floor for authoring questions
- Live demos of new features if applicable
4. Action items review (10 min)
- Review open items from previous session
- Assign new action items
5. AOB / Next session date (5 min)Tips:
- Record the session if authors in other time zones cannot attend.
- Post a written summary as a GitHub Discussion or internal Slack message after each session.
- Track recurring questions โ if the same question comes up twice, update writing-tutorials.md.
Related:
- Handle author support requests โ common request types and escalation paths (Task 13)
- repo-group-owners.md#task-office-hours-and-author-support-intake โ repo group owner perspective on office hours
See also โ
- decommissioned-tasks.md โ tasks from the old run-book that have been replaced or removed
- analytics-admin.md โ analytics platform operations (tutorial engagement, query explorer)
- build.md โ deep-dive on the fetch โ Hugo โ publish pipeline
- mta-deployment.md โ MTA build and CF deploy reference
- authentication.md โ XSUAA, BTP identity, AppRouter auth flows
- testing-endpoints.md โ canonical endpoint reference with auth/scope mapping