Commit Graph
100 Commits
Author SHA1 Message Date
RaymondVerhoef 7b6a5b4bf0 feat: add GraphControls component and useGraphData hook for knowledge graph management 2026-05-27 15:05:26 +02:00
RaymondVerhoef 3aa32c383e feat: implement quiz results tracking and caching for user tests
On Push to Main / test (push) Successful in 47s
On Push to Main / publish (push) Successful in 1m27s
On Push to Main / deploy-dev (push) Successful in 2m7s
2026-05-27 10:05:56 +02:00
RaymondVerhoef 07af2783dc Add comprehensive documentation for key organizational aspects
On Push to Main / test (push) Successful in 1m33s
On Push to Main / publish (push) Successful in 1m31s
On Push to Main / deploy-dev (push) Successful in 2m3s
- Introduced "Pension Scheme & Benefits" detailing secondary employment benefits and pension specifics.
- Created "Roles & Accountabilities" outlining the Holacracy role structure and responsibilities within Respellion.
- Added "Security" section covering GDPR compliance and workplace safety protocols.
- Established "Spending and Contracting" policy detailing expense categories and submission processes.
- Documented "Who We Are" to define Respellion's identity, services, and operational model under Holacracy and ISO 9001.
2026-05-27 08:24:56 +02:00
RaymondVerhoef 7066f881f9 feat: implement onboarding process and enrollment status tracking for users 2026-05-26 21:33:20 +02:00
RaymondVerhoef febc9dc7f2 Merge branch 'main' of https://git.labs.respellion.tech/rve/learning-platform
On Push to Main / test (push) Successful in 41s
On Push to Main / publish (push) Successful in 1m12s
On Push to Main / deploy-dev (push) Successful in 1m39s
2026-05-26 14:23:15 +02:00
RaymondVerhoef 46d2735237 Merge branch 'main' of https://git.labs.respellion.tech/rve/learning-platform
On Push to Main / test (push) Successful in 41s
On Push to Main / deploy-dev (push) Has been cancelled
On Push to Main / publish (push) Has been cancelled
2026-05-26 14:22:08 +02:00
RaymondVerhoef daec9cf5b5 Add hot update files for layout and webpack with source maps
- Created new hot update JSON and JS files for app layout and webpack.
- Included eval-source-map for development purposes in the layout hot update.
- Added full hash retrieval function in the webpack hot update.
2026-05-26 14:22:01 +02:00
RaymondVerhoefandClaude Opus 4.7 9b3d7fde8c fix: end micro-learning sessions explicitly and route to test
Every micro-learning format used to call onComplete implicitly — scroll
to the bottom of the explainer, flip the last flashcard, or pick any
scenario option — which yanked users out of the content before they
were done with it.

Replace the implicit triggers with a Finish session button on each
format. The scenario quiz exposes the button only after an option is
chosen so explanations still get read; the flashcard set exposes a
viewed-cards counter next to it.

The topic-reviewed landing screen now offers Back to Station, Try
another format, and Go to test, so finishing a session leads somewhere
useful instead of dead-ending. Drop the unreachable completion box that
the container was rendering underneath the parent's success screen.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:20:41 +02:00
RaymondVerhoefandClaude Opus 4.7 84e7468841 feat: drop reflection_prompt type and flag cached micro-learnings
Remove the reflection_prompt micro-learning format end-to-end: type
config, tool definition, container case, selector tile, and the
ReflectionPrompt component file. The format wasn't pulling its weight as
a learning surface.

Add a Beschikbaar badge to selector tiles whose topic already has a
published micro-learning of that type, so users know which formats open
instantly instead of triggering a fresh generation. Cached records are
fetched once per topic via the new getExistingTypesForTopic helper, and
re-fetched after a generation returns so newly-created formats light up
without a manual refresh.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 13:41:20 +02:00
RaymondVerhoefandClaude Opus 4.7 9ea5d5444d fix: generate weekly quiz in a single batch LLM call
The weekly quiz path made up to six sequential LLM calls (one per topic)
with three retries each, blowing past the 30s budget. Worse, the
quiz_banks collection has been dropped, so getQuizBank/setQuizBank are
no-ops and every generated batch was thrown away — the assembled quiz
ended up empty and surfaced as "Could not assemble enough questions."

Replace the per-topic loop with a single batched call on the fast tier
that emits all five questions in one round-trip, using the review topics
as prompt context instead of separate calls.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 13:22:44 +02:00
RaymondVerhoef a653812cd8 feat: implement micro-learning generation service and UI components for interactive topic-based learning
On Push to Main / test (push) Successful in 32s
On Push to Main / publish (push) Successful in 59s
On Push to Main / deploy-dev (push) Successful in 1m33s
2026-05-25 22:17:26 +02:00
RaymondVerhoef f16438c1bc feat: implement micro learning generation service with cached LLM content delivery and UI components
On Push to Main / test (push) Successful in 32s
On Push to Main / publish (push) Successful in 1m2s
On Push to Main / deploy-dev (push) Successful in 1m32s
2026-05-25 22:14:00 +02:00
RaymondVerhoef 7164317908 feat: implement quiz generation service with topic selection, LLM integration, and question bank management 2026-05-25 22:08:18 +02:00
RaymondVerhoef 3c04bab1b9 fix
On Push to Main / test (push) Successful in 31s
On Push to Main / publish (push) Successful in 58s
On Push to Main / deploy-dev (push) Successful in 1m31s
2026-05-25 21:38:53 +02:00
RaymondVerhoef 80532b6d1b fix 2026-05-25 20:51:11 +02:00
RaymondVerhoef e4030868b4 fix 2026-05-25 19:46:04 +02:00
RaymondVerhoef 7d1fe83f72 fix 2026-05-25 19:41:20 +02:00
RaymondVerhoef b24ddc5490 fix
On Push to Main / test (push) Successful in 31s
On Push to Main / publish (push) Successful in 59s
On Push to Main / deploy-dev (push) Successful in 1m31s
2026-05-25 19:35:52 +02:00
RaymondVerhoef 74e18d2638 fix 2026-05-25 19:23:06 +02:00
RaymondVerhoef 9ba9ec94ad fix 2026-05-25 19:18:24 +02:00
RaymondVerhoef 8291a52ba9 fix test 2026-05-25 19:09:17 +02:00
RaymondVerhoef 6968bebbc2 fix
On Push to Main / test (push) Successful in 30s
On Push to Main / publish (push) Successful in 1m1s
On Push to Main / deploy-dev (push) Successful in 1m31s
2026-05-25 18:50:53 +02:00
RaymondVerhoef ac88c95b46 Bug fix 2026-05-25 18:43:12 +02:00
RaymondVerhoef d4066a8f61 fix 2026-05-25 18:39:21 +02:00
RaymondVerhoef 042dfb2d92 Feat: microlearning implementation 2026-05-25 18:32:45 +02:00
RaymondVerhoef 18e98380d9 feat: implement micro-learning collections and completion tracking hook 2026-05-24 23:50:08 +02:00
RaymondVerhoef cd151aace4 feat: implement core micro-learning components and hooks for diverse educational formats 2026-05-24 23:45:26 +02:00
RaymondVerhoef 55bcb689e7 feat: implement micro-learning system with content delivery components, completion tracking hooks, and database schema migrations 2026-05-24 23:40:59 +02:00
RaymondVerhoef 8930ac03ae rename micro-learning-generation-spec.md to micro-learning-spec.md 2026-05-24 23:29:18 +02:00
RaymondVerhoef f55ec950aa feat: implement curriculum service for auto-generating, validating, and managing 26-week learning schedules
On Push to Main / test (push) Successful in 32s
On Push to Main / publish (push) Successful in 1m2s
On Push to Main / deploy-dev (push) Successful in 1m32s
2026-05-24 23:16:01 +02:00
RaymondVerhoef 967c68d27d feat: add curriculum management admin dashboard with AI generation and draft approval workflows 2026-05-24 23:09:58 +02:00
RaymondVerhoef b07c4808a6 feat: implement knowledge extraction pipeline and centralized LLM client service
On Push to Main / test (push) Successful in 31s
On Push to Main / publish (push) Successful in 59s
On Push to Main / deploy-dev (push) Successful in 1m32s
2026-05-24 22:38:46 +02:00
RaymondVerhoef e9f37056b6 feat: implement text extraction pipeline and centralized LLM interface for knowledge graph generation 2026-05-24 22:26:13 +02:00
RaymondVerhoef 5965793f11 feat: add specification for micro learning generation and remove deprecated pipeline planning files 2026-05-24 21:14:32 +02:00
RaymondVerhoef 10d5066be8 feat: add curriculum management service and database integration for 26-week schedule generation
On Push to Main / test (push) Successful in 32s
On Push to Main / publish (push) Successful in 1m2s
On Push to Main / deploy-dev (push) Successful in 1m32s
2026-05-24 19:58:18 +02:00
RaymondVerhoef c5e23c77cd feat: implement curriculum management system including automated generation, enrichment, and versioning workflows 2026-05-24 19:50:20 +02:00
RaymondVerhoef 8e01b21a50 feat: implement RAG-enabled chat hook and admin file upload component 2026-05-24 16:59:11 +02:00
RaymondVerhoef 7d8999255f Add hot-update files for layout and webpack with eval-source-map configuration
- Created multiple hot-update JavaScript files for app layout and webpack.
- Each file includes a warning about the use of "eval-source-map" for development purposes.
- Added source mapping for CSS files in the app layout.
- Generated corresponding hot-update JSON files to manage module updates.
2026-05-24 11:16:21 +02:00
RaymondVerhoef 815cf0f673 feat: add status field to themes collection and update migration scripts
- Added a new "status" field to the themes collection with options: draft, published, and rejected.
- Updated the migration script to include the new field and its options.
- Created a new ingestion migration script to ensure the "status" field includes "rejected" as an option if not already present.
- Added multiple hot-update files for webpack to support the new changes in the frontend.
2026-05-24 10:56:45 +02:00
RaymondVerhoef 8684ffa35b feat: add new page and migration scripts for access rules and collections
- Introduced new page component for library topics with type checks.
- Added migration scripts to update access rules for various collections including badges, curriculum versions, and themes.
- Implemented PocketBase integration for managing collection access rules dynamically.
- Ensured proper type validation for page props and metadata generation functions.
2026-05-23 22:26:40 +02:00
RaymondVerhoef 14286d6cb1 Add TypeScript type definitions for app components and layout
- Created type definitions for `auth`, `layout`, and `page` components to ensure type safety and consistency.
- Implemented checks for entry validity and prop types using utility types.
- Added a `package.json` file to specify module type for TypeScript compatibility.
2026-05-23 22:10:58 +02:00
RaymondVerhoef f4d0c85c55 Refactor code structure for improved readability and maintainability 2026-05-23 19:37:17 +02:00
RaymondVerhoef 472685f0d7 Add specifications for gamification, generation, and R42 chat services
- Introduced gamification service spec detailing responsibilities, API surface, XP calculation, levels, streaks, badges, milestone cards, and heatmap data.
- Added generation service spec outlining the process for generating micro learning content, including API endpoints, AI call configuration, prompt strategies, and error handling.
- Created R42 chat service spec covering chatbot interactions, retrieval pipeline, prompt construction, response generation, and stateless design principles.
2026-05-23 18:13:08 +02:00
RaymondVerhoef dda20612e9 Add comprehensive documentation for employee learning platform
- Created handover document outlining design decisions and application functionality.
- Developed implementation plan detailing phased approach for service development.
- Specified ingestion service responsibilities, API surface, and processing pipeline.
2026-05-23 15:38:09 +02:00
RaymondVerhoef 881148357e refactor: remove Diagnostics component and related LLM call telemetry
On Push to Main / test (push) Successful in 31s
On Push to Main / publish (push) Successful in 58s
On Push to Main / deploy-dev (push) Successful in 1m30s
2026-05-22 20:00:47 +02:00
RaymondVerhoef 7b6ae265db feat: implement pbUpsert helper for streamlined database operations and update related functions 2026-05-22 19:56:23 +02:00
RaymondVerhoef ca8945ea5b refactor: remove handbook sync state and related functionality
On Push to Main / test (push) Successful in 31s
On Push to Main / publish (push) Successful in 1m4s
On Push to Main / deploy-dev (push) Successful in 1m31s
2026-05-22 19:45:14 +02:00
RaymondVerhoef dc628644b6 feat: add caveman skill with detailed README and SKILL documentation
On Push to Main / test (push) Successful in 47s
On Push to Main / publish (push) Successful in 1m11s
On Push to Main / deploy-dev (push) Successful in 1m37s
2026-05-22 16:47:44 +02:00
RaymondVerhoefandClaude Opus 4.7 3626cc0525 feat: add "Reset for Smoke Test" button in admin settings
Truncates sources, curriculum, content, quiz banks/results/cache, topics
and relations in dependency order so AI-generated state can be wiped
between smoke runs without leaving dangling references. Handbook sync
state is cleared by default (otherwise re-sync is a no-op); user
progress and leaderboard are opt-in. Team members, settings, and LLM
telemetry are preserved.

UI lives in Admin → Settings → Danger Zone and requires typing RESET
before the button enables. Per-collection deletion counts are reported.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 16:42:54 +02:00
RaymondVerhoefandClaude Opus 4.7 25cae2fea9 fix: speed up handbook sync and stop llm_calls 404 noise
Handbook sync ran files sequentially under a 5 req/min limiter with a
hardcoded 60s LLM timeout, causing long syncs and AbortError timeouts on
large files. Now: limiter at 20 req/min, files processed with concurrency
4, handbook extraction timeout raised to 180s, and near-empty files skip
the LLM call.

callLLM gains a timeoutMs option; passing a signal no longer silently
disables the per-request timeout.

llm_calls telemetry self-disables after the first 404 so deploys without
the migration applied don't spam the console.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 16:35:56 +02:00
RaymondVerhoefandClaude Opus 4.7 229246f7b6 feat: phase 5 of AI pipeline hardening — R42 retrieval & telemetry
On Pull Request to Main / deploy-dev (pull_request) Successful in 1m34s
On Pull Request to Main / test (pull_request) Successful in 32s
On Pull Request to Main / publish (pull_request) Successful in 57s
- Add dependency-free TF-IDF retrieval (src/lib/retrieval.js) with NL+EN
  stopwords and a WeakMap-cached index.
- Rewrite buildKbContext to ship the top-K relevant topics + verbatim-
  mentioned ids only, filter relations to the included set, and append a
  [kb_hash: <8 hex>] suffix so the ephemeral prompt cache busts when the
  graph changes. Returns { context, retrievedTopics, allTopics }.
- Add LOOKUP_TOPIC_TOOL and drive useChat through callLLM directly with a
  multi-hop tool_result loop capped at 3 hops; preserve Anthropic-provided
  tool_use ids through callLLM so the loop can echo correct tool_use_id.
- Truncate R42 history to the last 12 turns and prepend a single
  "(earlier conversation truncated)" assistant message.
- Set R42 chat defaults: temperature 0.3, maxTokens 2048.
- Add pb_migrations/1780500002_created_llm_calls.js (the best-effort
  logger in callLLM was already wired) and a new Admin → Diagnostics
  view showing the last 100 calls with token usage, cache-hit rate, and
  USD cost from a local Anthropic price table.
- Finalize AI_PIPELINE_HARDENING_PLAN.md: mark Phases 1–5 shipped and
  Phase 6 (eval harness) explicitly out of scope.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 21:36:40 +02:00
RaymondVerhoefandClaude Opus 4.7 66e0c275da feat: phase 4 of AI pipeline hardening — quiz & content quality
On Pull Request to Main / test (pull_request) Successful in 31s
On Pull Request to Main / publish (pull_request) Successful in 1m1s
On Pull Request to Main / deploy-dev (pull_request) Successful in 1m31s
- src/lib/random.js: Fisher–Yates shuffle/sample/pickInt; replace every
  biased .sort(() => 0.5 - Math.random()) site in testService.
- testService: debias correctIndex via prompt + runtime re-roll (up to 2x
  when one position holds >50%); quality gate rejecting <4 distinct
  options, banned filler ("all of the above" etc) and explanations
  shorter than 20 chars; dedup new questions against the existing bank
  via normalised question text.
- Quiz schema/tool/prompt require difficulty ('easy'|'medium'|'hard');
  db.getQuizBank defaults legacy records to 'medium' on read.
- learningService.generateCustomTopic: kebab-case slug ID from the
  polished label with collision suffixes; default learning_relevance
  'standard' when the model omits it.
- Tests for random helpers, dedup/quality-gate behaviour and the
  extended quiz schema.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 19:22:10 +02:00
RaymondVerhoefandClaude Opus 4.7 c82e4fc3a1 feat: reduce initial question batch size for a topic to 5
On Push to Main / test (push) Successful in 32s
On Push to Main / publish (push) Successful in 1m0s
On Push to Main / deploy-dev (push) Successful in 1m33s
When a topic's quiz bank is empty (or below the requested count), we
previously seeded it with a fresh batch of 10 questions. That meant the
first weekly quiz for any new topic triggered a 10-question LLM call —
heavy for what's ultimately a 1-question sample for review topics, and
overkill for the typical 5-question primary topic.

- forceGenerateTopicQuestions default count: 10 → 5
- getOrGenerateTopicQuestions seed amount: 10 → 5
- TestManager "Generate" defaults + empty-state button copy: 10 → 5
- QUIZ_SYSTEM difficulty hint: rewritten for a 5-question batch (2 easy
  / 2 medium / 1 hard) with explicit "scale proportionally for larger
  batches" so admins can still generate 10+ via TestManager when they
  want more depth.

Tests 61/61 pass, lint clean (0 errors), build clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 19:12:16 +02:00
RaymondVerhoefandClaude Opus 4.7 aeb197d5f4 feat: phase 3 of AI pipeline hardening — extraction quality
On Pull Request to Main / publish (pull_request) Successful in 1m1s
On Pull Request to Main / deploy-dev (pull_request) Successful in 1m32s
On Pull Request to Main / test (pull_request) Successful in 31s
Replace stateless one-shot extraction with a stateful, paced, cancellable
pipeline. Six subtasks:

- 3.1 Sentence-aware chunking with 800-char overlap (was paragraph-only
  at 4000 chars). Hard-split fallback for runaway sentences.
- 3.2 Stateful extraction: chunks 2+ receive an "already-extracted topic
  IDs" hint capped at 200 IDs, so the model reuses IDs instead of
  inventing variants like software-developer vs software-engineer.
- 3.3 Token-bucket limiter in llmRetry.js (extractionLimiter, 5 req/min).
  callLLM awaits the limiter before fetch; 429+Retry-After calls
  pauseUntil. Replaces hard setTimeout(12000) and setTimeout(15000).
- 3.4 relevance_locked column on topics — admin edits to relevance are
  sticky across re-extraction. Migration + merge respects the flag +
  unlock checkbox in KnowledgeGraph edit form.
- 3.5 Unify relation vocabulary — handbook prompt no longer mentions
  legacy "executes"; one-shot migration rewrites existing executes rows
  to executed_by with source/target swapped.
- 3.6 Cancellation — Cancel button on UploadZone wired to an
  AbortController threaded into callLLM; aborted runs persist status =
  "cancelled" rather than "failed".

Tests: 16 new unit tests for chunkText, buildKnownIdsHint, and
createLimiter. All 61 tests pass, 0 lint errors, build clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 17:56:45 +02:00
RaymondVerhoefandClaude Opus 4.7 40eff976b4 Fix: exclude temperature parameter for reasoning-tier models
On Pull Request to Main / test (pull_request) Successful in 31s
On Pull Request to Main / publish (pull_request) Successful in 1m3s
On Pull Request to Main / deploy-dev (pull_request) Successful in 1m33s
Anthropic has deprecated the temperature parameter for their reasoning
models (claude-opus-4-7). This was causing a 400 error when analyzeGraph
called callLLM with tier: 'reasoning'.

Solution: conditionally exclude temperature from the request body when
tier === 'reasoning'. Fast and standard tiers retain their temperature
parameter.

This unblocks the "Analyse and Optimize" button in the Knowledge Graph
admin panel post-Phase-2 deployment.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 17:14:17 +02:00
RaymondVerhoefandClaude Opus 4.7 f838755991 feat: phase 2 of AI pipeline hardening — tool-based structured outputs + prompt caching
On Pull Request to Main / test (pull_request) Successful in 31s
On Pull Request to Main / publish (pull_request) Successful in 1m1s
On Pull Request to Main / deploy-dev (pull_request) Successful in 1m31s
Every structured-output call now uses an Anthropic tool instead of
parsing JSON out of free-form prose, and stable system prompts are
sent as cacheable blocks. Behaviour-equivalent to phase 1 from the
caller's point of view; the savings show up in token usage and in the
absence of "AI returned non-JSON response" failure modes.

* src/lib/llmTools.js — single source of truth for tool definitions:
  emit_knowledge_graph, emit_handbook_delta, emit_learning_article /
  _slides / _infographic / _all, emit_custom_topic, emit_quiz_questions,
  emit_graph_actions, plus five article-patch tools (set_intro,
  set_section, add_section, remove_section, replace_takeaways).
* src/lib/articlePatches.js — pure applyArticlePatches +
  applyAndValidate; rebuilds the article from a sequence of patch tool
  calls and re-validates against learningArticleSchema. set_section
  falls back to appending when no matching heading exists so the
  model's intent is preserved rather than silently dropped.
* src/lib/llmSchemas.js — Zod schemas for the five patch ops,
  registered in toolSchemaRegistry so callLLM validates them
  automatically.
* src/lib/llm.js — simulation mode now returns a tool_use stub matching
  toolChoice.name, so the UI keeps working with Simulation Mode on
  after the structured-output migration.
* src/lib/extractionPipeline.js — processSourceText and
  analyzeHandbookDelta migrated to callLLM + tool use. System prompts
  sent as { cache_control: ephemeral } blocks. Handbook results pass
  through normalizeHandbookResult to collapse legacy "executes"
  relations into executed_by with swapped source/target.
* src/lib/learningService.js — generateLearningContent picks the right
  tool per selectedType; generateCustomTopic uses emit_custom_topic;
  refineLearningContent now drives the five patch tools with
  toolChoice 'any' and rejects the whole turn if the patched article
  fails validation. Article-only refinement is intentional for phase 2;
  refining a topic without an article surfaces a clear error.
* src/lib/testService.js — quiz generation via emit_quiz_questions.
* src/components/admin/KnowledgeGraph.jsx — analyzeGraph routed through
  the reasoning tier (Opus) since graph-wide consolidation benefits
  from a stronger reasoner.
* src/components/chat/prompts.js — buildSystemPrompt now returns three
  text blocks: stable preamble (cached), KB context (cached, hash-bust
  deferred to phase 5), per-turn user/admin tail (uncached).
* src/lib/__tests__/ — 13 new tests covering each patch op, multi-op
  sequencing, post-patch validation failure, and tool/registry shape.

Acceptance: lint and 45/45 tests green; build succeeds; no
`match(/\{[\s\S]*\}/)` JSON extraction left in src/. Live verification
of cache hits on a second extraction within 5 minutes is deferred to
manual smoke testing — needs real `/api/anthropic` traffic.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 15:47:20 +02:00
RaymondVerhoefandClaude Opus 4.7 8a8745fad2 feat: show build SHA + timestamp in a small footer for deploy verification
On Push to Main / test (push) Successful in 30s
On Push to Main / publish (push) Successful in 59s
On Push to Main / deploy-dev (push) Successful in 1m33s
Adds a BuildStamp component pinned to the bottom-right of every page
(desktop only, dim monospace text) so it's obvious at a glance which
build is currently running.

The git short SHA and an ISO build timestamp are injected at build time
via Vite's `define`, falling back to 'unknown' if git is not available.
ESLint config declares the two compile-time constants as readonly
globals so no per-file disable comments are needed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 15:20:46 +02:00
RaymondVerhoefandClaude Opus 4.7 b85785a0cb chore: ignore .claude/ local agent state
On Pull Request to Main / test (pull_request) Successful in 44s
On Pull Request to Main / publish (pull_request) Successful in 1m0s
On Pull Request to Main / deploy-dev (pull_request) Successful in 1m33s
Adds Claude Code's per-user .claude/ directory (settings.local.json
allowlists, etc.) to .gitignore so it doesn't get accidentally
committed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:54:57 +02:00
RaymondVerhoefandClaude Opus 4.7 4a8dbee7df feat: phase 1 of AI pipeline hardening — single LLM client + tier-aware models
Implements phase 1 of AI_PIPELINE_HARDENING_PLAN.md. Every Anthropic call
now goes through one module that owns retry, timeout, abort, structured-
output parsing, schema validation, and best-effort call telemetry.

* src/lib/llm.js — single callLLM entry point. Resolves model per tier
  (fast / standard / reasoning) with admin:model legacy fallback for the
  standard tier; 60s default timeout via AbortController; balanced-brace
  JSON extraction; LLMHttpError, LLMTruncatedError, LLMOutputError, and
  LLMValidationError surface clearly distinct failure modes.
* src/lib/llmRetry.js — exponential backoff with full jitter, retries
  only on transient HTTP statuses, honours Retry-After up to 60s, never
  retries on AbortError.
* src/lib/llmSchemas.js — Zod schemas for every structured task plus
  normalizeHandbookResult (collapses legacy "executes" relations into
  the canonical "executed_by" vocabulary).
* src/lib/api.js — thin shim over callLLM so existing callers (extraction
  pipeline, learning, quiz, R42, knowledge graph) keep working unchanged.
* src/lib/__tests__/ — 32 Vitest cases covering parse paths, error
  surfaces, simulation mode, model resolution, and schema validation.
* src/pages/Admin/index.jsx — three model inputs (fast / standard /
  reasoning) replacing the single legacy field; legacy value falls back
  for the standard tier so existing overrides survive.

Adds Zod and Vitest, plus an "npm run test" script.

Also cleans up the pre-existing repo-wide ESLint failures so phase 1's
"npm run lint passes" acceptance criterion can be checked: drops unused
React imports across the JSX tree (React 19 JSX runtime auto-imports),
attaches cause to rethrown errors in the service modules, ignores
pb_migrations in the ESLint config (PocketBase JSVM globals), and
removes one dead handleCreateCustom function in Leren.jsx. A real
behaviour bug surfaced in Testen.jsx — the quiz timer captured a stale
finishQuiz via setInterval closure; now updated via finishQuizRef so the
timer always invokes the latest callback.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:50:09 +02:00
RaymondVerhoefandClaude Opus 4.7 db5bb854c3 docs: add AI pipeline hardening plan; rename giteaService to githubService
On Pull Request to Main / test (pull_request) Successful in 30s
On Pull Request to Main / publish (pull_request) Successful in 58s
On Pull Request to Main / deploy-dev (pull_request) Successful in 1m35s
Adds AI_PIPELINE_HARDENING_PLAN.md — a phased, self-contained plan an AI
agent can execute to harden the Anthropic integration (central LLM
client, tool-based structured outputs, prompt caching, retrieval-based
R42 context, eval harness).

Renames src/lib/giteaService.js to src/lib/githubService.js. The module
calls api.github.com and raw.githubusercontent.com; the previous name
was misleading. No behaviour change. Updates the single import site in
src/components/admin/KnowledgeGraph.jsx.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 12:03:25 +02:00
RaymondVerhoef 6fe66bbd93 feat: implement curriculum service and learning automation infrastructure
On Push to Main / test (push) Successful in 30s
On Push to Main / publish (push) Successful in 57s
On Push to Main / deploy-dev (push) Successful in 1m33s
2026-05-20 11:44:58 +02:00
RaymondVerhoef 2752fb95d9 feat: implement AI-driven knowledge extraction pipeline for company documentation
On Push to Main / test (push) Successful in 30s
On Push to Main / publish (push) Successful in 59s
On Push to Main / deploy-dev (push) Successful in 1m32s
2026-05-20 09:35:57 +02:00
RaymondVerhoef caaf2b9eba feat: implement extraction pipeline for knowledge graph generation from text and handbook updates 2026-05-20 09:29:21 +02:00
RaymondVerhoef d6c1813f75 feat: add extractionPipeline to process source text and handbook updates into a structured knowledge graph 2026-05-20 09:29:16 +02:00
RaymondVerhoef d5655d2232 feat: implement automated knowledge graph extraction pipeline and visualization component 2026-05-20 08:55:27 +02:00
RaymondVerhoef 08aaed591f feat: add KnowledgeGraph component for visualizing and managing learning topics and relationships
On Push to Main / test (push) Successful in 30s
On Push to Main / publish (push) Successful in 57s
On Push to Main / deploy-dev (push) Successful in 1m37s
2026-05-19 12:33:12 +02:00
RaymondVerhoef 8529def748 feat: add UploadZone component and database utility for file processing
On Push to Main / test (push) Successful in 31s
On Push to Main / publish (push) Successful in 59s
On Push to Main / deploy-dev (push) Successful in 1m35s
2026-05-19 12:00:14 +02:00
RaymondVerhoef d23b0b6b16 feat: add learning_relevance field to topics and implement KnowledgeGraph UI with handbook synchronization capabilities
On Push to Main / test (push) Successful in 30s
On Push to Main / publish (push) Successful in 58s
On Push to Main / deploy-dev (push) Successful in 1m39s
2026-05-19 08:40:52 +02:00
RaymondVerhoef fa5dcaeb01 feat: add docker-compose configuration and ansible playbook for production deployment
On Push to Main / test (push) Successful in 30s
On Push to Main / publish (push) Successful in 59s
On Push to Main / deploy-dev (push) Successful in 1m36s
2026-05-19 07:54:52 +02:00
RaymondVerhoef 190d1a6e0b feat: add KnowledgeGraph component for visualizing, editing, and syncing handbook content with AI-driven analysis
On Push to Main / test (push) Successful in 31s
On Push to Main / publish (push) Successful in 59s
On Push to Main / deploy-dev (push) Successful in 1m49s
2026-05-18 22:12:19 +02:00
RaymondVerhoef d2b067735c feat: add UploadZone component for drag-and-drop file processing
On Push to Main / test (push) Successful in 31s
On Push to Main / publish (push) Successful in 57s
On Push to Main / deploy-dev (push) Successful in 1m34s
2026-05-18 22:03:10 +02:00
RaymondVerhoef 00541f4a08 feat: add KnowledgeGraph visualization and handbook synchronization component for admin interface 2026-05-18 22:01:02 +02:00
RaymondVerhoef 3555048308 chore: update document title to Learning Platform 2026-05-18 21:48:20 +02:00
RaymondVerhoef 590912ac04 feat: add KnowledgeGraph component for visualizing and managing knowledge base topics and relations 2026-05-18 21:42:14 +02:00
RaymondVerhoef d71caa41f6 feat: implement interactive Knowledge Graph visualization with AI-driven content analysis and handbook synchronization tools 2026-05-18 21:30:05 +02:00
RaymondVerhoef f68d76e3d2 feat: add giteaService for fetching files and content from GitHub repositories 2026-05-18 21:25:18 +02:00
RaymondVerhoef 7b84545dc5 feat: add KnowledgeGraph component for D3-based visualization and AI-driven graph management 2026-05-18 21:21:58 +02:00
RaymondVerhoef f35550f270 feat: add knowledge graph component and persistent handbook sync state collection 2026-05-18 21:13:17 +02:00
RaymondVerhoef 9f3e1113a6 chore: update pocketbase command to include migrations directory and set working directory
On Push to Main / test (push) Successful in 30s
On Push to Main / publish (push) Successful in 59s
On Push to Main / deploy-dev (push) Successful in 1m32s
2026-05-18 20:46:34 +02:00
RaymondVerhoef 07a41938f1 feat: add created and updated autodate fields to sources collection via migration 2026-05-18 20:35:03 +02:00
RaymondVerhoef 3afef7785e feat: perform extensive database collection migrations and updates to PocketBase schema
On Push to Main / test (push) Successful in 43s
On Push to Main / publish (push) Successful in 1m6s
On Push to Main / deploy-dev (push) Successful in 1m38s
2026-05-18 20:12:40 +02:00
RaymondVerhoef d68164880f chore: update package-lock.json dependencies 2026-05-18 19:57:43 +02:00
RaymondVerhoef 08f5b1fe18 feat: implement 52-week annual curriculum system with admin management and automated topic progression 2026-05-18 19:49:05 +02:00
RaymondVerhoef 228d0d7a54 docs: update README and AI_AGENT.md with platform architecture, selective content generation, and deployment details
On Push to Main / test (push) Successful in 28s
On Push to Main / publish (push) Successful in 54s
On Push to Main / deploy-dev (push) Successful in 1m27s
2026-05-17 20:35:12 +02:00
RaymondVerhoef 06eb974825 feat: add Anthropic API client and knowledge graph extraction pipeline
On Push to Main / test (push) Successful in 30s
On Push to Main / publish (push) Successful in 58s
On Push to Main / deploy-dev (push) Successful in 1m35s
2026-05-17 18:20:29 +02:00
RaymondVerhoef 5659ff6726 feat: implement learning module page with AI-generated content and feedback workflow
On Push to Main / test (push) Successful in 29s
On Push to Main / publish (push) Successful in 58s
On Push to Main / deploy-dev (push) Successful in 1m34s
2026-05-17 17:53:09 +02:00
RaymondVerhoef 5b37c04588 feat: implement AI-driven learning content generation service and interactive student dashboard
On Push to Main / test (push) Successful in 30s
On Push to Main / publish (push) Successful in 57s
On Push to Main / deploy-dev (push) Successful in 1m32s
2026-05-17 17:10:40 +02:00
RaymondVerhoef 98e32d8ac0 feat: implement R42 chat infrastructure with Anthropic API integration and custom design system
On Push to Main / publish (push) Successful in 57s
On Push to Main / deploy-dev (push) Successful in 1m31s
On Push to Main / test (push) Successful in 30s
2026-05-17 16:48:40 +02:00
RaymondVerhoef 43d01dff58 docs: document global disablement of PocketBase auto-cancellation in AI_AGENT.md 2026-05-17 16:03:48 +02:00
RaymondVerhoef b28956bbe7 feat: initialize PocketBase client with global auto-cancellation disabled and custom session expiry handling
On Push to Main / test (push) Successful in 30s
On Push to Main / publish (push) Successful in 57s
On Push to Main / deploy-dev (push) Successful in 1m33s
2026-05-17 15:27:34 +02:00
RaymondVerhoef e2de7f0729 feat: add GitHub repository synchronization functionality with document extraction pipeline and update security policy to permit GitHub API access.
On Push to Main / test (push) Successful in 29s
On Push to Main / publish (push) Successful in 58s
On Push to Main / deploy-dev (push) Successful in 1m32s
2026-05-17 15:15:51 +02:00
RaymondVerhoef 2374413282 feat: add anthropic-dangerous-direct-browser-access header to Anthropic proxy in Caddyfile
On Push to Main / test (push) Successful in 30s
On Push to Main / publish (push) Successful in 57s
On Push to Main / deploy-dev (push) Successful in 1m34s
2026-05-17 14:47:11 +02:00
RaymondVerhoef 77d411b77e feat: implement Anthropic API client with simulation support and add PocketBase configuration with session expiry handling
On Push to Main / test (push) Successful in 30s
On Push to Main / publish (push) Successful in 58s
On Push to Main / deploy-dev (push) Successful in 1m33s
2026-05-17 14:27:31 +02:00
RaymondVerhoef 775c3030d5 feat: implement PocketBase database schema setup script and core API service for content management
On Push to Main / publish (push) Successful in 59s
On Push to Main / deploy-dev (push) Successful in 1m33s
On Push to Main / test (push) Successful in 29s
2026-05-17 14:18:26 +02:00
RaymondVerhoef 1bc51b3cb6 feat: initialize PocketBase backend with database structure, API helpers, and setup scripts 2026-05-17 14:16:00 +02:00
RaymondVerhoef 1ba647fecd feat: add roles documentation and database configuration files while removing deployment guide
On Push to Main / test (push) Successful in 38s
On Push to Main / publish (push) Successful in 1m4s
On Push to Main / deploy-dev (push) Successful in 1m38s
2026-05-17 13:39:58 +02:00
RaymondVerhoef 271baba860 chore: add environment variable configuration for Anthropic API key
On Push to Main / test (push) Successful in 40s
On Push to Main / publish (push) Successful in 1m6s
On Push to Main / deploy-dev (push) Successful in 1m41s
2026-05-17 10:39:40 +02:00
RaymondVerhoef 8b57e10754 feat: implement admin dashboard with management modules and PocketBase setup script 2026-05-17 10:29:06 +02:00
RaymondVerhoef e68335e159 feat: implement automated Ansible deployment workflows and secure Anthropic API key management via reverse proxy injection
On Push to Main / test (push) Successful in 41s
On Push to Main / publish (push) Successful in 1m8s
On Push to Main / deploy-dev (push) Successful in 1m39s
2026-05-17 10:00:14 +02:00
RaymondVerhoef bb39a5fa71 feat: add script to initialize and configure PocketBase collections
On Push to Main / test (push) Successful in 39s
On Push to Main / publish (push) Successful in 1m8s
On Push to Main / deploy-dev (push) Successful in 1m43s
2026-05-16 20:00:28 +02:00