{"nodes": [{"id": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design", "label": "Spec: Post & Page Editor WordPress-style Features", "file_type": "document", "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_sortable_sidebar", "label": "SortableSidebar component", "file_type": "code", "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "localStorage per-browser persistence chosen as cheapest path; can migrate to a userPreferences collection later."}, {"id": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_derive_publish_status", "label": "derivePublishStatus helper", "file_type": "code", "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "Removes manual Scheduled status to prevent status=scheduled without scheduledFor."}, {"id": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_hash_visibility_password", "label": "hashVisibilityPassword beforeChange hook", "file_type": "code", "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "bcrypt cost 12, plaintext never persisted (CLAUDE.md hard rule 5)."}, {"id": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_visibility_field", "label": "Visibility group (public / private / password)", "file_type": "concept", "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_unlock_cookie", "label": "HMAC unlock cookie + unlock route", "file_type": "code", "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_password_gate", "label": "PasswordGate component", "file_type": "code", "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "Renderer, not Payload, enforces the password gate so the prompt page can show the title without leaking the body."}], "edges": [{"source": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design", "target": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_sortable_sidebar", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "weight": 1.0}, {"source": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design", "target": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_derive_publish_status", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "weight": 1.0}, {"source": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design", "target": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_hash_visibility_password", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "weight": 1.0}, {"source": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design", "target": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_visibility_field", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "weight": 1.0}, {"source": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design", "target": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_unlock_cookie", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "weight": 1.0}, {"source": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design", "target": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_password_gate", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "weight": 1.0}, {"source": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_hash_visibility_password", "target": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_visibility_field", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "weight": 1.0}, {"source": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_password_gate", "target": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_unlock_cookie", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "weight": 1.0}, {"source": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_unlock_cookie", "target": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_visibility_field", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "weight": 1.0}, {"source": "ads_backend_apps_docs_adrs_0001_admin_shell_integration_admin_shell", "target": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_sortable_sidebar", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.75, "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "weight": 1.0}, {"source": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_derive_publish_status", "target": "ads_backend_codebase_report_save_page_action", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "weight": 1.0}, {"source": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_visibility_field", "target": "ads_backend_codebase_report_permission_keys", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "weight": 1.0}, {"source": "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_derive_publish_status", "target": "ads_backend_apps_docs_byoi_cron_vercel_cron", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md", "source_location": null, "weight": 1.0}], "hyperedges": [{"id": "post_editor_wordpress_features", "label": "Post/page editor WordPress-style features", "nodes": ["ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_sortable_sidebar", "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_derive_publish_status", "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_hash_visibility_password", "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_visibility_field", "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_unlock_cookie", "ads_backend_docs_superpowers_specs_2026_05_13_post_editor_wordpress_features_design_password_gate"], "relation": "form", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "ads-backend/docs/superpowers/specs/2026-05-13-post-editor-wordpress-features-design.md"}]}