4.4 KiB
4.4 KiB
Task: Diagnose missing interactive outline prompt template
Identity
- Task ID: 20260819-openmaic-prompt-template-8b4d
- Mode: Feature
- Branch: codex/20260819-openmaic-prompt-template-8b4d-openmaic-prompt-template
- Worktree: D:\w\omprompt-8b4d
- Base commit:
58d1ddc264 - Owner: codex
- Status: Ready-for-integration
Scope
- Trace the production error
Interactive outline prompt template not foundfrom the classroom job runner to its runtime file dependency. - Compare the runtime file path with the standalone Docker and learning-artifact packaging configuration.
- Provide a read-only Kubernetes check, implement the durable standalone packaging fix requested after diagnosis, and add a regression test.
Intent And Constraints
- The user requested direct analysis without subagents.
- Preserve the existing dirty main worktree owned by
20260818-next-build-7f3a; diagnosis ran in this isolated worktree at the same base commit. - Distinguish source-level facts from the still-unverified contents of the deployed image.
- Keep the code change surgical: configure Next.js file tracing rather than duplicating copy rules across the Dockerfile and artifact builder.
Outcome
- Confirmed that
lib/server/classroom-outline-mode.tsraises the reported error only when the app prompt loader returnsnullforinteractive-outlines. - Confirmed that the loader reads Markdown dynamically from
<cwd>/lib/prompts/templates/<promptId>and that both interactive-outline source files exist. Its broad catch also converts snippet-loading failures into the same outer error, while logging the original cause underPromptLoader. - Confirmed that
interactive-outlines/system.mdincludes three package-owned snippets (image-instructions,video-instructions, andmedia-safety-guidelines) that are dynamically read from@openmaic/generation. - Confirmed that standalone output is enabled but
next.config.tshas nooutputFileTracingIncludes, while both the Docker runner andbuild-learning-artifact.mjscopy only standalone output, static assets, and public assets. - Production root cause confirmed: the deployed Pod reports
ENOENTfor/app/lib/prompts/templates/interactive-outlines/system.md, and bothsystem.mdanduser.mdare absent whilecwdis correctly/app. The standalone image omitted the app-owned prompt Markdown. - A direct eval import of
@openmaic/generationfrom/appalso returnedERR_MODULE_NOT_FOUND. This is not the current first failure because template loading stops at the missingsystem.md; package snippet availability must be verified after the app templates are packaged, preferably through the built application or by inspecting the standalone trace/layout rather than assuming root-level package resolution. - Added global standalone file-tracing includes for app-owned prompts, app PBL prompts, and the three package-owned generation prompt directories.
- Added
tests/config/standalone-prompt-assets.test.tsto lock the runtime prompt asset contract.
Verification
- Source template presence check: PASS (
system.mdanduser.mdexist). - Packaging contract check: RED by design; source assets exist while neither file tracing includes nor an explicit runner copy is configured.
- Runtime path inspection: PASS (
WORKDIR /appplusprocess.cwd()/lib/promptsresolves to/app/lib/prompts). - Production Pod filesystem check: FAIL as expected; both interactive-outline files are missing from
/appand thePromptLoaderlog records the exactENOENTpath. - Targeted Vitest regression: PASS (1 test).
- ESLint on both changed product/test files: PASS.
- Prettier check on both changed product/test files: PASS.
- Learning-engine production build: webpack compilation PASS; final Next.js build FAILS on the pre-existing unrelated missing
@xmldom/xmldomtype declaration inpackages/@openmaic/importer/src/parser/XmlParser.ts, before standalone output is emitted.
Follow-ups
- Rebuild the image in an environment with the importer dependency installed, verify the prompt assets in the emitted standalone artifact, deploy, and rerun generation.
- Verify the package-owned snippets through a generation request; the root-level eval import is not a reliable proxy for bundled route resolution.
- Audit the other dynamically read app prompt directory
lib/pbl/v2/promptsas part of the same packaging fix.
Promotion Candidates
- None recorded.