Post-Labor Economics Platform - Prosperity Beyond Work. A web application with Netlify serverless functions providing APIs for activity logging, architecture alignment, content management, authentication, auto-ingestion, AI chat, and comments.
PLE Platform exposes 30 tools with consistent naming (verb_noun pattern) and reasonable descriptions (avg ~120 chars). However, critical gaps undermine production readiness: (1) Input schemas are inferred from parameter lists but NOT explicitly visible in source code, no JSON Schema definitions found in tool registration. (2) Many parameter descriptions lack type constraints, ranges, or enums (e.g., 'element' in get_alignments_by_element says 'Element ID or code' but no format/pattern specified). (3) Output schemas are completely undocumented, no tool declares what fields it returns or their types. (4) Error handling is minimal; activity.mjs shows generic 500 errors with stack traces rather than actionable recovery guidance. (5) No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels (READ_ONLY, WRITE, DESTRUCTIVE). Naming is strong (get_, create_, delete_, list_ verbs used correctly), and descriptions exist for all tools, but lack of formal schemas and output documentation prevents LLMs from reliably chaining tools.
Approve a discovered item for addition to the knowledge base.
Send a message to the PLE AI Assistant for RAG-powered Q&A grounded in the knowledge base. Supports conversation history.
Link an item (proposal, content, discussion, or project) to an architecture element. Requires admin or editor role.
Create a new comment on an entity or reply to an existing comment. Requires authentication.
Unlink an item from its architecture element. Requires admin or editor role.
Delete a comment (soft delete). Only the comment author or admin can delete. Also soft-deletes all replies.
Dismiss a discovered item from the discovery queue.
No JSON Schema definitions visible in source code. Tool input schemas are inferred from parameter lists but not formally registered with type constraints, enums, or patterns. LLMs cannot validate inputs or understand parameter relationships.
Output schemas completely undocumented. No tool declares what fields it returns, their types, or structure. Agents cannot plan downstream tool calls or extract required IDs for chaining (e.g., does get_user return user_id or userId?).
Parameter descriptions lack format constraints and ranges. E.g., 'element' param in get_alignments_by_element says 'Element ID or code (uppercase)' but no regex pattern or length limit. 'limit' in get_activity_log says 'max 100' but no minimum specified. LLMs cannot self-validate.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
Retrieve activity log entries with optional filtering by user, entity type, limit, and offset. Returns formatted activity descriptions with user information.
Get the architecture element aligned to a specific item (proposal, content, discussion, or project).
Get overview of all architecture element alignments with counts of linked proposals, content, discussions, and projects.
Get all items (proposals, content, discussions, projects) aligned to a specific architecture element by ID or code.
Get a single architecture element by ID with its relationships, aligned proposals, content, and discussions.
Get a single architecture element by code (uppercase) with its relationships and alignments.
Get the status of the auto-ingest pipeline including pending discoveries, approval counts, and recent items.
Get information about the PLE AI Assistant including capabilities, active provider, and model.
Get a single comment by ID with all its replies.
Get the authenticated user's profile information from their session token.
Get top 20 contributors ranked by content count, proposals, discussions, comments, and total views.
Get a user's public profile information including content, proposal, and discussion counts.
List all architecture elements with optional filtering by type, status, and search query. Returns elements grouped by type.
List all comments for a specific entity (project, task, content, proposal, discussion, working_group) with optional nested replies.
List all active community members with their roles, avatars, bios, and contribution statistics.
Authenticate a user with email and password. Returns session token valid for 30 days.
Invalidate the current user session by deleting the session token.
Register a new user with email, password, and display name. Password must be at least 8 characters.
List all pending items in the discovery queue awaiting admin review and approval.
Execute the auto-ingest pipeline to scan Substack RSS, HackerNews (via Composio), and web search for PLE-relevant content. Stores results in discovery queue for admin review.
Update an existing comment. Only the comment author or admin can edit.
Update authenticated user's display name, bio, and avatar URL.
Update a user's role (member, editor, or admin). Requires admin authentication. Cannot change own role.
Error handling is generic and non-actionable. activity.mjs returns 500 with stack trace ('Internal server error, details: error.message') instead of guiding recovery. No error classification (retryable vs user-fixable vs fatal). Agents cannot self-correct.
No tool annotations despite clear risk levels. Tools marked WRITE (create_alignment, update_user_role) and DESTRUCTIVE (delete_comment) lack readOnlyHint/destructiveHint annotations. Agents cannot distinguish safe reads from irreversible operations.