limn-review 0.1.123
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +110 -0
- package/README.md +133 -0
- package/dist/ai/runtime.js +535 -0
- package/dist/api/plugins/auth.js +169 -0
- package/dist/api/plugins/error-handler.js +114 -0
- package/dist/api/plugins/rate-limit.js +855 -0
- package/dist/api/plugins/security.js +321 -0
- package/dist/api/routes/activity.js +103 -0
- package/dist/api/routes/ai-runtime.js +67 -0
- package/dist/api/routes/auth.js +194 -0
- package/dist/api/routes/billing.js +209 -0
- package/dist/api/routes/bot-triage.js +1289 -0
- package/dist/api/routes/conflicts.js +730 -0
- package/dist/api/routes/contact.js +318 -0
- package/dist/api/routes/daily-brief.js +58 -0
- package/dist/api/routes/flow.js +71 -0
- package/dist/api/routes/health.js +7 -0
- package/dist/api/routes/insights.js +200 -0
- package/dist/api/routes/me.js +458 -0
- package/dist/api/routes/mentions.js +22 -0
- package/dist/api/routes/mergers.js +8 -0
- package/dist/api/routes/ml-labels.js +109 -0
- package/dist/api/routes/open-prs.js +35 -0
- package/dist/api/routes/prs.js +1633 -0
- package/dist/api/routes/reactions.js +217 -0
- package/dist/api/routes/repos.js +563 -0
- package/dist/api/routes/search.js +41 -0
- package/dist/api/routes/threads.js +118 -0
- package/dist/api/routes/timeline.js +150 -0
- package/dist/api/routes/users.js +67 -0
- package/dist/api/routes/webhooks.js +181 -0
- package/dist/api/routes/workspaces.js +322 -0
- package/dist/app.js +274 -0
- package/dist/ascii.js +19 -0
- package/dist/auth/account.js +482 -0
- package/dist/auth/crypto.js +46 -0
- package/dist/bot-triage/resolve.js +59 -0
- package/dist/cli.js +388 -0
- package/dist/coding/activity.js +80 -0
- package/dist/coding/agent.js +288 -0
- package/dist/coding/ai-fix/auto-fix.js +212 -0
- package/dist/coding/ai-fix/manager.js +370 -0
- package/dist/coding/ai-fix/persist.js +213 -0
- package/dist/coding/ai-fix/pr-context.js +58 -0
- package/dist/coding/ai-fix/prompts.js +138 -0
- package/dist/coding/ai-fix/review-seed.js +357 -0
- package/dist/coding/ai-fix/routes.js +425 -0
- package/dist/coding/git-ops.js +321 -0
- package/dist/coding/git.js +184 -0
- package/dist/coding/merge.js +262 -0
- package/dist/coding/safe-path.js +75 -0
- package/dist/coding/schema.js +43 -0
- package/dist/config.js +648 -0
- package/dist/conflict/diff.js +304 -0
- package/dist/conflict/git.js +118 -0
- package/dist/conflict/hash.js +73 -0
- package/dist/conflict/janitor.js +218 -0
- package/dist/conflict/land.js +675 -0
- package/dist/conflict/model-types.js +2 -0
- package/dist/conflict/model.js +1081 -0
- package/dist/conflict/parse.js +142 -0
- package/dist/conflict/seam.js +136 -0
- package/dist/conflict/session.js +532 -0
- package/dist/conflict/suggestion.js +398 -0
- package/dist/conflict/tokens.js +72 -0
- package/dist/data-dir.js +112 -0
- package/dist/db/actor-lanes.js +213 -0
- package/dist/db/automation-ids.js +97 -0
- package/dist/db/automation-output.js +349 -0
- package/dist/db/blast-radius-query.js +36 -0
- package/dist/db/blast-radius.js +226 -0
- package/dist/db/bot-dormancy.js +115 -0
- package/dist/db/bot-overlap.js +579 -0
- package/dist/db/bot-volume.js +722 -0
- package/dist/db/bot-window.js +35 -0
- package/dist/db/branch-queries.js +310 -0
- package/dist/db/change-shape.js +243 -0
- package/dist/db/changepoint.js +75 -0
- package/dist/db/cleanup.js +36 -0
- package/dist/db/client.js +102 -0
- package/dist/db/code-loc.js +388 -0
- package/dist/db/credits.js +79 -0
- package/dist/db/daily-brief.js +406 -0
- package/dist/db/dependency-cards.js +145 -0
- package/dist/db/erase-account.js +255 -0
- package/dist/db/export-account.js +189 -0
- package/dist/db/failing-checks.js +124 -0
- package/dist/db/file-coupling.js +197 -0
- package/dist/db/flow-detail.js +661 -0
- package/dist/db/flow-pointers.js +197 -0
- package/dist/db/flow-settings.js +67 -0
- package/dist/db/forecast.js +114 -0
- package/dist/db/line-overlap.js +81 -0
- package/dist/db/merge-queue.js +189 -0
- package/dist/db/migrate.js +17 -0
- package/dist/db/migrations/0000_purple_ben_grimm.sql +155 -0
- package/dist/db/migrations/0001_colorful_ozymandias.sql +31 -0
- package/dist/db/migrations/0002_famous_sersi.sql +9 -0
- package/dist/db/migrations/0003_clever_shinobi_shaw.sql +3 -0
- package/dist/db/migrations/0004_pale_scalphunter.sql +1 -0
- package/dist/db/migrations/0005_daffy_guardian.sql +2 -0
- package/dist/db/migrations/0006_cute_violations.sql +45 -0
- package/dist/db/migrations/0007_dark_anthem.sql +2 -0
- package/dist/db/migrations/0008_multitenant_accounts.sql +44 -0
- package/dist/db/migrations/0009_lean_bodies.sql +13 -0
- package/dist/db/migrations/0010_lean_bodies_nullable.sql +56 -0
- package/dist/db/migrations/0011_pr_diff_size.sql +10 -0
- package/dist/db/migrations/0012_findings_included_default.sql +7 -0
- package/dist/db/migrations/0013_review_routing.sql +9 -0
- package/dist/db/migrations/0014_account_last_active.sql +6 -0
- package/dist/db/migrations/0015_repos_inbox_watch.sql +9 -0
- package/dist/db/migrations/0016_repo_viewer_permission.sql +7 -0
- package/dist/db/migrations/0017_account_display_name.sql +7 -0
- package/dist/db/migrations/0018_finding_comment_kind.sql +7 -0
- package/dist/db/migrations/0019_finding_file_in_diff.sql +7 -0
- package/dist/db/migrations/0020_claude_review_cost_telemetry.sql +11 -0
- package/dist/db/migrations/0021_account_feed_last_seen.sql +7 -0
- package/dist/db/migrations/0022_ci_status_events.sql +21 -0
- package/dist/db/migrations/0023_ai_usage.sql +21 -0
- package/dist/db/migrations/0024_pr_head_ref_name.sql +6 -0
- package/dist/db/migrations/0025_account_billing.sql +7 -0
- package/dist/db/migrations/0026_ai_credit_allowance.sql +5 -0
- package/dist/db/migrations/0027_user_github_type.sql +6 -0
- package/dist/db/migrations/0028_bot_review_classification.sql +21 -0
- package/dist/db/migrations/0029_bot_mute_rules.sql +19 -0
- package/dist/db/migrations/0030_teams.sql +32 -0
- package/dist/db/migrations/0031_events_pr_idx.sql +7 -0
- package/dist/db/migrations/0032_benchmark_contributions.sql +29 -0
- package/dist/db/migrations/0033_thread_addressed_confidence.sql +9 -0
- package/dist/db/migrations/0034_thread_resolved_at.sql +6 -0
- package/dist/db/migrations/0035_pr_first_review_requested_at.sql +5 -0
- package/dist/db/migrations/0036_search_index.sql +25 -0
- package/dist/db/migrations/0037_author_indexes.sql +15 -0
- package/dist/db/migrations/0038_auto_merge_requests.sql +37 -0
- package/dist/db/migrations/0039_branch_status.sql +44 -0
- package/dist/db/migrations/0040_pr_review_decision.sql +10 -0
- package/dist/db/migrations/0041_branch_commit_detail.sql +38 -0
- package/dist/db/migrations/0042_repo_reviewers.sql +176 -0
- package/dist/db/migrations/0043_account_reviewers.sql +131 -0
- package/dist/db/migrations/0044_workspaces.sql +138 -0
- package/dist/db/migrations/0045_workspace_reviewers.sql +180 -0
- package/dist/db/migrations/0046_drop_inbox_watch.sql +25 -0
- package/dist/db/migrations/0047_ml_comment_labels.sql +40 -0
- package/dist/db/migrations/0048_ml_vendor_severity.sql +31 -0
- package/dist/db/migrations/0049_seat_pricing_repo_description.sql +21 -0
- package/dist/db/migrations/0050_users_app_slug.sql +12 -0
- package/dist/db/migrations/0051_auto_merge_queue.sql +17 -0
- package/dist/db/migrations/0052_trunk_ci_status_events.sql +43 -0
- package/dist/db/migrations/0053_automation_roles.sql +79 -0
- package/dist/db/migrations/0054_automation_vendor_kinds.sql +514 -0
- package/dist/db/migrations/0055_auto_merge_phase.sql +12 -0
- package/dist/db/migrations/0056_pr_mentions.sql +22 -0
- package/dist/db/migrations/0057_large_pr_threshold.sql +14 -0
- package/dist/db/migrations/0058_pending_mute.sql +53 -0
- package/dist/db/migrations/0059_merge_queue_state.sql +33 -0
- package/dist/db/migrations/0060_drop_my_turn_dismissals.sql +33 -0
- package/dist/db/migrations/0061_auto_merge_durable_anchors.sql +27 -0
- package/dist/db/migrations/0062_blast_radius_config.sql +21 -0
- package/dist/db/migrations/0063_repo_file_coupling.sql +33 -0
- package/dist/db/migrations/0064_pr_content_kind.sql +21 -0
- package/dist/db/migrations/0065_workspace_flow_settings.sql +13 -0
- package/dist/db/migrations/0066_review_request_events.sql +31 -0
- package/dist/db/migrations/0067_pr_security_signals.sql +86 -0
- package/dist/db/migrations/0068_my_turn_settings.sql +18 -0
- package/dist/db/migrations/0069_my_turn_dismissals.sql +41 -0
- package/dist/db/migrations/0070_claude_review_follow_up_ticket.sql +22 -0
- package/dist/db/migrations/0071_claude_review_trigger.sql +11 -0
- package/dist/db/migrations/0072_commit_message_headline.sql +13 -0
- package/dist/db/migrations/0073_claude_review_chat.sql +31 -0
- package/dist/db/migrations/0074_adopt_agentic_tables.sql +98 -0
- package/dist/db/migrations/0075_review_lens_drop_learnings.sql +15 -0
- package/dist/db/migrations/0076_claude_review_threads.sql +17 -0
- package/dist/db/migrations/0077_claude_review_ci_failures.sql +10 -0
- package/dist/db/migrations/0078_ai_fix_change_report.sql +17 -0
- package/dist/db/migrations/0079_claude_finding_story.sql +16 -0
- package/dist/db/migrations/meta/0000_snapshot.json +1116 -0
- package/dist/db/migrations/meta/0001_snapshot.json +1321 -0
- package/dist/db/migrations/meta/0002_snapshot.json +1375 -0
- package/dist/db/migrations/meta/0003_snapshot.json +1396 -0
- package/dist/db/migrations/meta/0004_snapshot.json +1416 -0
- package/dist/db/migrations/meta/0005_snapshot.json +1430 -0
- package/dist/db/migrations/meta/0006_snapshot.json +1745 -0
- package/dist/db/migrations/meta/0007_snapshot.json +1759 -0
- package/dist/db/migrations/meta/_journal.json +566 -0
- package/dist/db/migrations-pg/0000_tired_alex_power.sql +268 -0
- package/dist/db/migrations-pg/0001_dizzy_mockingbird.sql +3 -0
- package/dist/db/migrations-pg/0002_glorious_ikaris.sql +4 -0
- package/dist/db/migrations-pg/0003_melted_secret_warriors.sql +2 -0
- package/dist/db/migrations-pg/0004_numerous_triton.sql +1 -0
- package/dist/db/migrations-pg/0005_thick_blockbuster.sql +2 -0
- package/dist/db/migrations-pg/0006_majestic_dracula.sql +1 -0
- package/dist/db/migrations-pg/0007_same_human_torch.sql +2 -0
- package/dist/db/migrations-pg/0008_slimy_toxin.sql +1 -0
- package/dist/db/migrations-pg/0009_fuzzy_jubilee.sql +4 -0
- package/dist/db/migrations-pg/0010_late_hammerhead.sql +1 -0
- package/dist/db/migrations-pg/0011_happy_leech.sql +16 -0
- package/dist/db/migrations-pg/0012_woozy_captain_midlands.sql +16 -0
- package/dist/db/migrations-pg/0013_yielding_nicolaos.sql +1 -0
- package/dist/db/migrations-pg/0014_wakeful_bill_hollister.sql +2 -0
- package/dist/db/migrations-pg/0015_aspiring_black_tom.sql +1 -0
- package/dist/db/migrations-pg/0016_cute_ghost_rider.sql +30 -0
- package/dist/db/migrations-pg/0017_far_changeling.sql +24 -0
- package/dist/db/migrations-pg/0018_fancy_miss_america.sql +1 -0
- package/dist/db/migrations-pg/0019_benchmark_contributions.sql +22 -0
- package/dist/db/migrations-pg/0020_majestic_edwin_jarvis.sql +3 -0
- package/dist/db/migrations-pg/0021_green_salo.sql +1 -0
- package/dist/db/migrations-pg/0022_wise_baron_strucker.sql +1 -0
- package/dist/db/migrations-pg/0023_search_index.sql +19 -0
- package/dist/db/migrations-pg/0024_author_indexes.sql +9 -0
- package/dist/db/migrations-pg/0025_auto_merge_requests.sql +26 -0
- package/dist/db/migrations-pg/0026_branch_status.sql +32 -0
- package/dist/db/migrations-pg/0027_pr_review_decision.sql +5 -0
- package/dist/db/migrations-pg/0028_branch_commit_detail.sql +9 -0
- package/dist/db/migrations-pg/0029_repo_reviewers.sql +127 -0
- package/dist/db/migrations-pg/0030_account_reviewers.sql +77 -0
- package/dist/db/migrations-pg/0031_workspaces.sql +131 -0
- package/dist/db/migrations-pg/0032_workspace_reviewers.sql +165 -0
- package/dist/db/migrations-pg/0033_drop_inbox_watch.sql +14 -0
- package/dist/db/migrations-pg/0034_ml_comment_labels.sql +33 -0
- package/dist/db/migrations-pg/0035_ml_vendor_severity.sql +16 -0
- package/dist/db/migrations-pg/0036_seat_pricing_repo_description.sql +12 -0
- package/dist/db/migrations-pg/0037_users_app_slug.sql +9 -0
- package/dist/db/migrations-pg/0038_auto_merge_queue.sql +10 -0
- package/dist/db/migrations-pg/0039_trunk_ci_status_events.sql +27 -0
- package/dist/db/migrations-pg/0040_automation_roles.sql +63 -0
- package/dist/db/migrations-pg/0041_automation_vendor_kinds.sql +488 -0
- package/dist/db/migrations-pg/0042_auto_merge_phase.sql +8 -0
- package/dist/db/migrations-pg/0043_pr_mentions.sql +19 -0
- package/dist/db/migrations-pg/0044_large_pr_threshold.sql +6 -0
- package/dist/db/migrations-pg/0045_pending_mute.sql +26 -0
- package/dist/db/migrations-pg/0046_merge_queue_state.sql +18 -0
- package/dist/db/migrations-pg/0047_drop_my_turn_dismissals.sql +21 -0
- package/dist/db/migrations-pg/0048_auto_merge_durable_anchors.sql +27 -0
- package/dist/db/migrations-pg/0049_blast_radius_config.sql +8 -0
- package/dist/db/migrations-pg/0050_repo_file_coupling.sql +13 -0
- package/dist/db/migrations-pg/0051_pr_content_kind.sql +6 -0
- package/dist/db/migrations-pg/0052_workspace_flow_settings.sql +4 -0
- package/dist/db/migrations-pg/0053_review_request_events.sql +18 -0
- package/dist/db/migrations-pg/0054_pr_security_signals.sql +59 -0
- package/dist/db/migrations-pg/0055_my_turn_settings.sql +6 -0
- package/dist/db/migrations-pg/0056_my_turn_dismissals.sql +21 -0
- package/dist/db/migrations-pg/0057_claude_review_follow_up_ticket.sql +8 -0
- package/dist/db/migrations-pg/0058_claude_review_trigger.sql +4 -0
- package/dist/db/migrations-pg/0059_commit_message_headline.sql +3 -0
- package/dist/db/migrations-pg/0060_claude_review_chat.sql +24 -0
- package/dist/db/migrations-pg/0061_adopt_agentic_tables.sql +79 -0
- package/dist/db/migrations-pg/0062_review_lens_drop_learnings.sql +5 -0
- package/dist/db/migrations-pg/0063_claude_review_threads.sql +7 -0
- package/dist/db/migrations-pg/0064_claude_review_ci_failures.sql +4 -0
- package/dist/db/migrations-pg/0065_ai_fix_change_report.sql +9 -0
- package/dist/db/migrations-pg/0066_claude_finding_story.sql +7 -0
- package/dist/db/migrations-pg/meta/0000_snapshot.json +2137 -0
- package/dist/db/migrations-pg/meta/0001_snapshot.json +2143 -0
- package/dist/db/migrations-pg/meta/0002_snapshot.json +2170 -0
- package/dist/db/migrations-pg/meta/0003_snapshot.json +2182 -0
- package/dist/db/migrations-pg/meta/0004_snapshot.json +2188 -0
- package/dist/db/migrations-pg/meta/0005_snapshot.json +2201 -0
- package/dist/db/migrations-pg/meta/0006_snapshot.json +2207 -0
- package/dist/db/migrations-pg/meta/0007_snapshot.json +2219 -0
- package/dist/db/migrations-pg/meta/0008_snapshot.json +2226 -0
- package/dist/db/migrations-pg/meta/0009_snapshot.json +2250 -0
- package/dist/db/migrations-pg/meta/0010_snapshot.json +2256 -0
- package/dist/db/migrations-pg/meta/0011_snapshot.json +2412 -0
- package/dist/db/migrations-pg/meta/0012_snapshot.json +2528 -0
- package/dist/db/migrations-pg/meta/0013_snapshot.json +2534 -0
- package/dist/db/migrations-pg/meta/0014_snapshot.json +2547 -0
- package/dist/db/migrations-pg/meta/0015_snapshot.json +2553 -0
- package/dist/db/migrations-pg/meta/0016_snapshot.json +2774 -0
- package/dist/db/migrations-pg/meta/0017_snapshot.json +2999 -0
- package/dist/db/migrations-pg/meta/0018_snapshot.json +3020 -0
- package/dist/db/migrations-pg/meta/0020_snapshot.json +3228 -0
- package/dist/db/migrations-pg/meta/0021_snapshot.json +3234 -0
- package/dist/db/migrations-pg/meta/0022_snapshot.json +3240 -0
- package/dist/db/migrations-pg/meta/_journal.json +475 -0
- package/dist/db/ml-labels.js +1666 -0
- package/dist/db/my-turn-dismissals.js +343 -0
- package/dist/db/my-turn-settings.js +34 -0
- package/dist/db/pending-classify.js +46 -0
- package/dist/db/pending-mute.js +171 -0
- package/dist/db/pending-tabs.js +238 -0
- package/dist/db/period-metrics.js +820 -0
- package/dist/db/person-period.js +763 -0
- package/dist/db/pr-intervals.js +930 -0
- package/dist/db/pr-liveness.js +240 -0
- package/dist/db/pr-mentions.js +279 -0
- package/dist/db/pr-merge-queue-stamp.js +91 -0
- package/dist/db/queries.js +14631 -0
- package/dist/db/reaction-targets.js +94 -0
- package/dist/db/repo-activity.js +171 -0
- package/dist/db/retention.js +138 -0
- package/dist/db/review-threads-for-review.js +240 -0
- package/dist/db/run-migrations.js +24 -0
- package/dist/db/schema.pg.js +1220 -0
- package/dist/db/schema.sqlite.js +1801 -0
- package/dist/db/search.js +317 -0
- package/dist/db/security-alerts.js +218 -0
- package/dist/db/synthesis-input.js +565 -0
- package/dist/db/triage.js +320 -0
- package/dist/db/usage.js +63 -0
- package/dist/db/work-plan.js +1086 -0
- package/dist/db/working-hours.js +161 -0
- package/dist/feed/my-turn.js +122 -0
- package/dist/github/actions-logs.js +397 -0
- package/dist/github/auth.js +86 -0
- package/dist/github/branch-queries.js +229 -0
- package/dist/github/client.js +454 -0
- package/dist/github/codeowners.js +221 -0
- package/dist/github/commit-checks.js +105 -0
- package/dist/github/compare.js +110 -0
- package/dist/github/diff-anchor.js +227 -0
- package/dist/github/mutations.js +706 -0
- package/dist/github/pr-file-content.js +254 -0
- package/dist/github/pr-liveness.js +161 -0
- package/dist/github/queries.js +875 -0
- package/dist/github/rate-budget.js +129 -0
- package/dist/github/reactions.js +161 -0
- package/dist/github/reviewer-suggest.js +104 -0
- package/dist/github/team-reviewers.js +96 -0
- package/dist/index.js +184 -0
- package/dist/merge/auto-merge-runner.js +960 -0
- package/dist/ml/severity-client.js +218 -0
- package/dist/pr/detail-enricher.js +26 -0
- package/dist/pro/bind.js +302 -0
- package/dist/pro/contract.js +37 -0
- package/dist/pro/migrate.js +64 -0
- package/dist/review/agent-context.js +127 -0
- package/dist/review/agent.js +385 -0
- package/dist/review/agentic.js +59 -0
- package/dist/review/auth.js +94 -0
- package/dist/review/chat-agent.js +179 -0
- package/dist/review/claude-review/ai-ready.js +16 -0
- package/dist/review/claude-review/auto-settings.js +139 -0
- package/dist/review/claude-review/auto.js +244 -0
- package/dist/review/claude-review/chat.js +489 -0
- package/dist/review/claude-review/ci-failures.js +350 -0
- package/dist/review/claude-review/follow-up.js +310 -0
- package/dist/review/claude-review/manager.js +686 -0
- package/dist/review/claude-review/persist.js +996 -0
- package/dist/review/claude-review/prompts.js +357 -0
- package/dist/review/claude-review/routes.js +518 -0
- package/dist/review/claude-review/routing.js +61 -0
- package/dist/review/claude-review/specialists.js +190 -0
- package/dist/review/claude-review/threads.js +265 -0
- package/dist/review/claude-review/ticket.js +282 -0
- package/dist/review/clone-hygiene.js +380 -0
- package/dist/review/clone-manager.js +367 -0
- package/dist/review/llm.js +113 -0
- package/dist/review/model-options.js +48 -0
- package/dist/review/plugin-providers.js +12 -0
- package/dist/review/post-review.js +216 -0
- package/dist/review/post-seam.js +161 -0
- package/dist/review/prepare.js +168 -0
- package/dist/review/pricing.js +17 -0
- package/dist/review/schema.js +156 -0
- package/dist/review/submit-map.js +41 -0
- package/dist/review/usage.js +90 -0
- package/dist/shared/claude-review.js +335 -0
- package/dist/shared/conflict-fold.js +151 -0
- package/dist/shared/conflicts.js +30 -0
- package/dist/shared/flow-settings.js +191 -0
- package/dist/shared/index.js +8 -0
- package/dist/shared/my-turn-settings.js +238 -0
- package/dist/shared/pending-rules.js +281 -0
- package/dist/shared/product.js +54 -0
- package/dist/shared/types.js +896 -0
- package/dist/status.js +386 -0
- package/dist/sync/adaptive.js +185 -0
- package/dist/sync/app-attribution.js +66 -0
- package/dist/sync/auth-notices.js +36 -0
- package/dist/sync/backfill-ci-history.js +315 -0
- package/dist/sync/backfill-commit-headlines.js +136 -0
- package/dist/sync/backfill-pr-security.js +175 -0
- package/dist/sync/backfill-review-requests.js +97 -0
- package/dist/sync/benchmark-rollup.js +50 -0
- package/dist/sync/bot-detection.js +309 -0
- package/dist/sync/bot-resolution-markers.js +30 -0
- package/dist/sync/branch-status.js +634 -0
- package/dist/sync/classify-change-shape.js +150 -0
- package/dist/sync/commit-files.js +74 -0
- package/dist/sync/derive-thread-state.js +99 -0
- package/dist/sync/drain-review-threads.js +212 -0
- package/dist/sync/hydrate-detail.js +482 -0
- package/dist/sync/mention-scan.js +89 -0
- package/dist/sync/ml-enrichment.js +478 -0
- package/dist/sync/pr-change-signal.js +96 -0
- package/dist/sync/pr-liveness-sweep.js +139 -0
- package/dist/sync/pr-settle.js +381 -0
- package/dist/sync/refresh-pr.js +163 -0
- package/dist/sync/reparse-vendor-badges.js +495 -0
- package/dist/sync/resync-after-write.js +280 -0
- package/dist/sync/review-fingerprint.js +117 -0
- package/dist/sync/reviewer-behavior.js +103 -0
- package/dist/sync/reviewer-classify.js +503 -0
- package/dist/sync/routing-files.js +97 -0
- package/dist/sync/scheduled-jobs.js +12 -0
- package/dist/sync/scheduler.js +159 -0
- package/dist/sync/security-detect.js +521 -0
- package/dist/sync/sync-manager.js +750 -0
- package/dist/sync/sync-one-pr.js +205 -0
- package/dist/sync/sync-repo.js +400 -0
- package/dist/sync/unsettled-prs.js +506 -0
- package/dist/sync/upsert.js +1190 -0
- package/package.json +56 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/assets/AiFixTab-CQP6PT5u.js +2 -0
- package/public/assets/ClaudeReviewTab-DQJ-58ZA.js +8 -0
- package/public/assets/PrBotBehaviourTab-CCnFrWbC.js +1 -0
- package/public/assets/archivo-latin-600-BN-JkNrl.woff2 +0 -0
- package/public/assets/highlight-BEHUn5zE.css +10 -0
- package/public/assets/highlight-CIIZLa6Z.js +12 -0
- package/public/assets/index-BDnYs6zg.js +73 -0
- package/public/assets/index-mCuI--RC.css +1 -0
- package/public/assets/markdown-I_JLLVAZ.js +32 -0
- package/public/assets/perfProbe-Da13EhTE.js +1 -0
- package/public/assets/tanstack-5qsxxaLe.js +17 -0
- package/public/assets/vis-C3BCkP5U.js +1280 -0
- package/public/assets/vis-ziCVehMy.css +1 -0
- package/public/favicon-16.png +0 -0
- package/public/favicon-32.png +0 -0
- package/public/favicon-48.png +0 -0
- package/public/favicon.svg +5 -0
- package/public/index.html +41 -0
- package/public-landing/apple-touch-icon.png +0 -0
- package/public-landing/assets/archivo-latin-500-BWmvx2Mg.woff2 +0 -0
- package/public-landing/assets/archivo-latin-600-BN-JkNrl.woff2 +0 -0
- package/public-landing/assets/index-CA3eEGXO.js +40 -0
- package/public-landing/assets/index-naQrQ6Fe.css +1 -0
- package/public-landing/assets/jetbrains-mono-latin-400-RruCX7RW.woff2 +0 -0
- package/public-landing/assets/newsreader-latin-400-DExrRRrN.woff2 +0 -0
- package/public-landing/assets/newsreader-latin-400-italic-b0I-AwbV.woff2 +0 -0
- package/public-landing/bots/index.html +156 -0
- package/public-landing/contact/index.html +156 -0
- package/public-landing/cookies/index.html +156 -0
- package/public-landing/demo/limn-walkthrough-poster.jpg +0 -0
- package/public-landing/demo/limn-walkthrough.cues.json +44 -0
- package/public-landing/demo/limn-walkthrough.mp4 +0 -0
- package/public-landing/favicon-16.png +0 -0
- package/public-landing/favicon-32.png +0 -0
- package/public-landing/favicon-48.png +0 -0
- package/public-landing/favicon.svg +5 -0
- package/public-landing/features/index.html +156 -0
- package/public-landing/for-developers/index.html +156 -0
- package/public-landing/for-managers/index.html +156 -0
- package/public-landing/how-it-works/index.html +156 -0
- package/public-landing/how-we-measure/index.html +156 -0
- package/public-landing/icon-192.png +0 -0
- package/public-landing/icon-512.png +0 -0
- package/public-landing/index.html +156 -0
- package/public-landing/insights/index.html +156 -0
- package/public-landing/og-image.png +0 -0
- package/public-landing/pricing/index.html +156 -0
- package/public-landing/privacy/index.html +156 -0
- package/public-landing/pro/index.html +156 -0
- package/public-landing/reviews/index.html +156 -0
- package/public-landing/robots.txt +8 -0
- package/public-landing/shots/benchmark.png +0 -0
- package/public-landing/shots/bot-roi.png +0 -0
- package/public-landing/shots/bot-settings.png +0 -0
- package/public-landing/shots/chronology.png +0 -0
- package/public-landing/shots/feed.png +0 -0
- package/public-landing/shots/flow-metrics.png +0 -0
- package/public-landing/shots/free-reports.png +0 -0
- package/public-landing/shots/pending-board.png +0 -0
- package/public-landing/shots/pending-card.png +0 -0
- package/public-landing/shots/period-report.png +0 -0
- package/public-landing/shots/pr-detail.png +0 -0
- package/public-landing/shots/pr-threads.png +0 -0
- package/public-landing/shots/reach.png +0 -0
- package/public-landing/shots/repo-rows.png +0 -0
- package/public-landing/shots/severity-findings.png +0 -0
- package/public-landing/shots/severity-strip.png +0 -0
- package/public-landing/site.webmanifest +14 -0
- package/public-landing/sitemap.xml +51 -0
- package/public-landing/terms/index.html +156 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Limn — plan your day across every repository",
|
|
3
|
+
"short_name": "Limn",
|
|
4
|
+
"description": "One ranked board of everything waiting on you across every repository, by rules you set.",
|
|
5
|
+
"start_url": "/",
|
|
6
|
+
"display": "standalone",
|
|
7
|
+
"background_color": "#FAFAF8",
|
|
8
|
+
"theme_color": "#FAFAF8",
|
|
9
|
+
"icons": [
|
|
10
|
+
{ "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" },
|
|
11
|
+
{ "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" },
|
|
12
|
+
{ "src": "/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any maskable" }
|
|
13
|
+
]
|
|
14
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
3
|
+
<url>
|
|
4
|
+
<loc>https://pierre-review.com/</loc>
|
|
5
|
+
<lastmod>2026-09-13</lastmod>
|
|
6
|
+
<changefreq>weekly</changefreq>
|
|
7
|
+
<priority>1.0</priority>
|
|
8
|
+
</url>
|
|
9
|
+
<url>
|
|
10
|
+
<loc>https://pierre-review.com/for-developers</loc>
|
|
11
|
+
<lastmod>2026-09-13</lastmod>
|
|
12
|
+
<changefreq>monthly</changefreq>
|
|
13
|
+
<priority>0.9</priority>
|
|
14
|
+
</url>
|
|
15
|
+
<url>
|
|
16
|
+
<loc>https://pierre-review.com/for-managers</loc>
|
|
17
|
+
<lastmod>2026-09-13</lastmod>
|
|
18
|
+
<changefreq>monthly</changefreq>
|
|
19
|
+
<priority>0.9</priority>
|
|
20
|
+
</url>
|
|
21
|
+
<url>
|
|
22
|
+
<loc>https://pierre-review.com/how-we-measure</loc>
|
|
23
|
+
<lastmod>2026-09-13</lastmod>
|
|
24
|
+
<changefreq>monthly</changefreq>
|
|
25
|
+
<priority>0.8</priority>
|
|
26
|
+
</url>
|
|
27
|
+
<url>
|
|
28
|
+
<loc>https://pierre-review.com/contact</loc>
|
|
29
|
+
<lastmod>2026-09-13</lastmod>
|
|
30
|
+
<changefreq>monthly</changefreq>
|
|
31
|
+
<priority>0.8</priority>
|
|
32
|
+
</url>
|
|
33
|
+
<url>
|
|
34
|
+
<loc>https://pierre-review.com/privacy</loc>
|
|
35
|
+
<lastmod>2026-09-13</lastmod>
|
|
36
|
+
<changefreq>yearly</changefreq>
|
|
37
|
+
<priority>0.3</priority>
|
|
38
|
+
</url>
|
|
39
|
+
<url>
|
|
40
|
+
<loc>https://pierre-review.com/cookies</loc>
|
|
41
|
+
<lastmod>2026-09-13</lastmod>
|
|
42
|
+
<changefreq>yearly</changefreq>
|
|
43
|
+
<priority>0.3</priority>
|
|
44
|
+
</url>
|
|
45
|
+
<url>
|
|
46
|
+
<loc>https://pierre-review.com/terms</loc>
|
|
47
|
+
<lastmod>2026-09-13</lastmod>
|
|
48
|
+
<changefreq>yearly</changefreq>
|
|
49
|
+
<priority>0.3</priority>
|
|
50
|
+
</url>
|
|
51
|
+
</urlset>
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<meta name="theme-color" content="#FAFAF8" />
|
|
7
|
+
|
|
8
|
+
<!-- Primary SEO. Everything between the seo:start/seo:end markers is REPLACED
|
|
9
|
+
per route at build time by prerender.mjs, from the ROUTE_SEO table in
|
|
10
|
+
src/lib/routes.ts — so /pricing ships its own title, description and
|
|
11
|
+
canonical in the HTML rather than inheriting the home page's. What is
|
|
12
|
+
written here is the home-page copy and the dev-server fallback; keep the
|
|
13
|
+
markers, and keep the copy in sync with ROUTE_SEO['/']. -->
|
|
14
|
+
<title>Terms of service — Limn</title>
|
|
15
|
+
<meta name="description" content="The terms for using the hosted Limn service: what you get, what you are responsible for, billing and cancellation, and the limits of liability." />
|
|
16
|
+
<meta name="robots" content="index, follow" />
|
|
17
|
+
<link rel="canonical" href="https://pierre-review.com/terms" />
|
|
18
|
+
<meta property="og:type" content="website" />
|
|
19
|
+
<meta property="og:site_name" content="Limn" />
|
|
20
|
+
<meta property="og:title" content="Terms of service — Limn" />
|
|
21
|
+
<meta property="og:description" content="The terms for using the hosted Limn service: what you get, what you are responsible for, billing and cancellation, and the limits of liability." />
|
|
22
|
+
<meta property="og:url" content="https://pierre-review.com/terms" />
|
|
23
|
+
<meta property="og:image" content="https://pierre-review.com/og-image.png" />
|
|
24
|
+
<meta property="og:image:width" content="1200" />
|
|
25
|
+
<meta property="og:image:height" content="630" />
|
|
26
|
+
<meta property="og:image:alt" content="The Limn board showing everything waiting across a team’s repositories, ranked most actionable first." />
|
|
27
|
+
<meta name="twitter:card" content="summary_large_image" />
|
|
28
|
+
<meta name="twitter:title" content="Terms of service — Limn" />
|
|
29
|
+
<meta name="twitter:description" content="The terms for using the hosted Limn service: what you get, what you are responsible for, billing and cancellation, and the limits of liability." />
|
|
30
|
+
<meta name="twitter:image" content="https://pierre-review.com/og-image.png" />
|
|
31
|
+
<meta name="twitter:image:alt" content="The Limn board showing everything waiting across a team’s repositories, ranked most actionable first." />
|
|
32
|
+
|
|
33
|
+
<!-- Favicons: the Limn mark, rendered from apps/landing/src/lib/sprites.ts by
|
|
34
|
+
`node scripts/make-favicons.mjs`. Regenerate there, never by hand. -->
|
|
35
|
+
<!-- ⚠ THE SVG MUST STAY FIRST AND KEEP ITS `type`. A tab slot is 16 CSS px — 32 device px
|
|
36
|
+
at DPR 2 — and Chrome picks ONE of these and scales it, so any pick but an exact 1:1
|
|
37
|
+
raster resamples a grid whose features are one pixel wide and reads as blur. Declared
|
|
38
|
+
this way Chrome takes the SVG and `shape-rendering: crispEdges` snaps it to the device
|
|
39
|
+
grid at every DPR. The PNGs remain for Safari < 16.4 and the big-raster surfaces. -->
|
|
40
|
+
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
|
|
41
|
+
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png" />
|
|
42
|
+
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16.png" />
|
|
43
|
+
<link rel="icon" type="image/png" sizes="48x48" href="/favicon-48.png" />
|
|
44
|
+
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
|
|
45
|
+
<link rel="manifest" href="/site.webmanifest" />
|
|
46
|
+
|
|
47
|
+
<!-- Structured data: helps search engines understand what Limn is.
|
|
48
|
+
LANDMINE: this block sits OUTSIDE the seo:start/end markers, so the
|
|
49
|
+
prerenderer copies it verbatim into EVERY route — /privacy and /terms ship
|
|
50
|
+
this price too. It is a second, site-wide copy of both the product name
|
|
51
|
+
and the price; when either changes it must change here as well as in
|
|
52
|
+
src/lib/routes.ts, src/lib/site.ts and src/components/feint/TierTable.tsx.
|
|
53
|
+
⚠ IT WENT STALE ONCE ALREADY: it advertised Pro at $15 and a Pro+ tier at
|
|
54
|
+
$29 for as long as those were true on a pricing page that no longer
|
|
55
|
+
exists, which is exactly the failure a second copy invites.
|
|
56
|
+
Claude Review and AI Fix are FREE and local-only — they belong in the Free
|
|
57
|
+
offer, never the Pro one (they were "Pro+" once; that tier is gone).
|
|
58
|
+
The $25 stays because it is the real LIST price and the tier table says so;
|
|
59
|
+
the free month is described in the offer text rather than by writing "0",
|
|
60
|
+
which would be a different and wrong claim about what Pro costs. -->
|
|
61
|
+
<script type="application/ld+json">
|
|
62
|
+
{
|
|
63
|
+
"@context": "https://schema.org",
|
|
64
|
+
"@graph": [
|
|
65
|
+
{
|
|
66
|
+
"@type": "Organization",
|
|
67
|
+
"@id": "https://pierre-review.com/#org",
|
|
68
|
+
"name": "Limn",
|
|
69
|
+
"url": "https://pierre-review.com/",
|
|
70
|
+
"logo": "https://pierre-review.com/icon-512.png",
|
|
71
|
+
"sameAs": ["https://github.com/alexwakeman/pierre-review"]
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"@type": "WebSite",
|
|
75
|
+
"@id": "https://pierre-review.com/#site",
|
|
76
|
+
"name": "Limn",
|
|
77
|
+
"url": "https://pierre-review.com/",
|
|
78
|
+
"publisher": { "@id": "https://pierre-review.com/#org" }
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"@type": "SoftwareApplication",
|
|
82
|
+
"name": "Limn",
|
|
83
|
+
"applicationCategory": "DeveloperApplication",
|
|
84
|
+
"operatingSystem": "Web, macOS, Linux, Windows",
|
|
85
|
+
"description": "Plans your day across every repository a team works in: one ranked board of what is waiting and on whom, by rules each person sets — plus how the work moved over a sprint, and an independent grade on every AI review bot comment.",
|
|
86
|
+
"url": "https://pierre-review.com/",
|
|
87
|
+
"publisher": { "@id": "https://pierre-review.com/#org" },
|
|
88
|
+
"offers": {
|
|
89
|
+
"@type": "AggregateOffer",
|
|
90
|
+
"priceCurrency": "USD",
|
|
91
|
+
"lowPrice": "0",
|
|
92
|
+
"highPrice": "25",
|
|
93
|
+
"offerCount": "2",
|
|
94
|
+
"offers": [
|
|
95
|
+
{
|
|
96
|
+
"@type": "Offer",
|
|
97
|
+
"name": "Free",
|
|
98
|
+
"description": "The open-core product: the ranked cross-repo Pending board and every setting behind it, triaged review threads, merge and conflict resolution in place, flow metrics per workspace, an independent grade on every bot comment, and — run locally — Claude Review and AI Fix on your own Claude Code or Anthropic API key, with no charge from Limn. No repository limit, no user limit, no expiry.",
|
|
99
|
+
"price": "0",
|
|
100
|
+
"priceCurrency": "USD"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"@type": "Offer",
|
|
104
|
+
"name": "Pro",
|
|
105
|
+
"description": "The roll-up across repositories, people and periods: a forwardable report per sprint, Chronology, the per-bot keep / tune / noisy scoreboard and the peer benchmark, plus written summaries on pull requests, a read on a failed build and a written plan for the day. Claude Review and AI Fix are not part of it: they are free. Lists at $25 per user per month; currently free for a month to anyone who asks via the contact form.",
|
|
106
|
+
"price": "25",
|
|
107
|
+
"priceCurrency": "USD",
|
|
108
|
+
"priceSpecification": {
|
|
109
|
+
"@type": "UnitPriceSpecification",
|
|
110
|
+
"price": "25",
|
|
111
|
+
"priceCurrency": "USD",
|
|
112
|
+
"billingIncrement": 1,
|
|
113
|
+
"unitText": "MONTH"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
"softwareHelp": "https://github.com/alexwakeman/pierre-review"
|
|
119
|
+
}
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
</script>
|
|
123
|
+
|
|
124
|
+
<!-- The three typefaces (Archivo, Newsreader, JetBrains Mono) are SELF-HOSTED:
|
|
125
|
+
the @font-face blocks live in src/index.css and the .woff2 files ship from
|
|
126
|
+
src/fonts/. They are never fetched from Google, for three independent
|
|
127
|
+
reasons — `font-src 'self'` in the landing CSP blocks fonts.gstatic.com,
|
|
128
|
+
`style-src 'self' 'unsafe-inline'` does not permit a <link> to
|
|
129
|
+
fonts.googleapis.com, and a test pins that directive so it fails CI before
|
|
130
|
+
a browser ever sees it. On top of that it is a GDPR requirement: a gstatic
|
|
131
|
+
request discloses every visitor's IP to Google before consent, and Google
|
|
132
|
+
Fonts' recommended <link ... onload="this.media='all'"> would force
|
|
133
|
+
script-src 'unsafe-inline'. Same-origin + font-display:swap keeps them off
|
|
134
|
+
the critical path with no inline handler.
|
|
135
|
+
See apps/backend/src/api/plugins/security.ts. -->
|
|
136
|
+
<script type="module" crossorigin src="/assets/index-CA3eEGXO.js"></script>
|
|
137
|
+
<link rel="stylesheet" crossorigin href="/assets/index-naQrQ6Fe.css">
|
|
138
|
+
</head>
|
|
139
|
+
<body>
|
|
140
|
+
<!-- Everything between app:start/app:end is REPLACED at build time by
|
|
141
|
+
prerender.mjs with the route's fully-rendered markup, so the page has real,
|
|
142
|
+
readable content before a single byte of JS executes — for no-JS visitors,
|
|
143
|
+
for AI agents and crawlers that do not run scripts, and as the first paint
|
|
144
|
+
for everyone else. React's createRoot() replaces it on mount exactly as it
|
|
145
|
+
replaced the splash below.
|
|
146
|
+
|
|
147
|
+
What survives here is the DEV-server fallback (prerender.mjs only rewrites
|
|
148
|
+
the built dist/): a plain wordmark on paper, so the first paint is already
|
|
149
|
+
the right colour instead of a white flash. It is set in system-ui rather
|
|
150
|
+
than Archivo because the bundled font has not loaded at this point — and it
|
|
151
|
+
carries no animation, because the site does not move. -->
|
|
152
|
+
<div id="root">
|
|
153
|
+
<div class="mx-auto min-h-screen max-w-canvas"><header class="border-b border-rule px-gutter py-[26px]"><nav aria-label="Primary" class="flex flex-wrap items-baseline justify-between gap-x-6 gap-y-4"><a href="/" aria-label="Home" class="focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink"><span class="inline-flex items-center gap-2.5 font-display font-semibold tracking-[-0.02em] text-ink text-[21px]"><svg width="22" height="18" viewBox="0 0 11 9" shape-rendering="crispEdges" aria-hidden="true" focusable="false" class="shrink-0"><rect x="0" y="0" width="6" height="1" fill="#16161A"></rect><rect x="0" y="1" width="1" height="1" fill="#16161A"></rect><rect x="2" y="1" width="2" height="1" fill="#16161A"></rect><rect x="5" y="1" width="1" height="1" fill="#16161A"></rect><rect x="0" y="2" width="6" height="1" fill="#16161A"></rect><rect x="1" y="3" width="1" height="1" fill="#16161A"></rect><rect x="3" y="4" width="7" height="1" fill="#16161A"></rect><rect x="3" y="5" width="1" height="1" fill="#16161A"></rect><rect x="9" y="5" width="1" height="1" fill="#16161A"></rect><rect x="3" y="6" width="1" height="1" fill="#16161A"></rect><rect x="5" y="6" width="3" height="1" fill="#C13A20"></rect><rect x="9" y="6" width="1" height="1" fill="#16161A"></rect><rect x="3" y="7" width="7" height="1" fill="#16161A"></rect><rect x="5" y="8" width="1" height="1" fill="#16161A"></rect></svg><span>Limn<span class="text-signal-text">.</span></span></span></a><div class="flex flex-wrap items-baseline gap-x-5 gap-y-2 font-mono text-mono-nav text-nav-idle type:gap-x-[30px]"><a href="/for-developers" class="hover:text-ink transition-colors duration-hover ease-standard focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">For developers</a><a href="/for-managers" class="hover:text-ink transition-colors duration-hover ease-standard focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">For managers</a><a href="/how-we-measure" class="hover:text-ink transition-colors duration-hover ease-standard focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">How we measure</a><a href="/contact" class="hover:text-ink transition-colors duration-hover ease-standard focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">Contact</a><a href="/api/auth/login" class="text-ink border-b-2 border-signal-fill pb-0.5 text-ink transition-colors duration-hover ease-standard focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">Sign in</a></div></nav></header><main><div class="max-w-[78ch] px-gutter py-16"><h1 class="font-display text-h2-sm font-semibold text-ink type:text-h2-minor">Terms of service</h1><p class="mt-3.5 font-mono text-mono-label uppercase text-secondary">Last updated 13 September 2026</p><div class="mt-6 space-y-3.5 text-body-sm"><p>These terms cover the hosted service at <span class="font-mono text-ink">pierre-review.com</span>. By signing in you agree to them.</p><div class="mt-5"><div class="border-t border-ink bg-paper-alt px-5 py-4"><p class="font-mono text-mono-label uppercase text-secondary">The self-hosted code is under a different licence, not these terms</p><div class="mt-2.5 space-y-2 text-list"><p>Limn's source is published under the Functional Source Licence (FSL-1.1-MIT), which converts to MIT two years after each release. If you clone the repository and run it yourself, that licence governs — not this document. These terms only apply to the version we host for you.</p></div></div></div></div><div class="mt-10 space-y-10"><section id="who" class="scroll-mt-16 border-t border-rule pt-7"><h2 class="font-display text-h4 font-semibold text-ink">1. Who you are contracting with</h2><div class="mt-3.5 space-y-3.5 text-body-sm"><p>The service is provided by <span class="font-display font-semibold text-ink">Alex Wakeman</span>, a sole trader in the United Kingdom, contactable at <a href="mailto:wakemana@gmail.com" class="border-b border-signal-fill text-ink transition-colors duration-hover ease-standard hover:text-signal-text focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">wakemana@gmail.com</a>. These terms are governed by the laws of England and Wales, and the courts of England and Wales have exclusive jurisdiction.</p><p>You must be at least 16 years old and have a GitHub account to use the service.</p></div></section><section id="service" class="scroll-mt-16 border-t border-rule pt-7"><h2 class="font-display text-h4 font-semibold text-ink">2. What the service does</h2><div class="mt-3.5 space-y-3.5 text-body-sm"><p>Limn reads pull-request activity from GitHub repositories you nominate and presents it as a dashboard. Some features send content to an AI model to produce summaries or reviews. The <a href="/features" class="border-b border-signal-fill text-ink transition-colors duration-hover ease-standard hover:text-signal-text">features</a> and <a href="/pricing" class="border-b border-signal-fill text-ink transition-colors duration-hover ease-standard hover:text-signal-text">pricing</a> pages describe what is included at each tier.</p><p>We may change, add or remove features. If a change materially reduces what a paid plan provides, we will tell paying users before it takes effect.</p></div></section><section id="account" class="scroll-mt-16 border-t border-rule pt-7"><h2 class="font-display text-h4 font-semibold text-ink">3. Your account</h2><div class="mt-3.5 space-y-3.5 text-body-sm"><p>You are responsible for activity under your account, and for keeping your GitHub account secure — anyone who controls your GitHub login can sign in to Limn as you. Tell us at <a href="mailto:wakemana@gmail.com" class="border-b border-signal-fill text-ink transition-colors duration-hover ease-standard hover:text-signal-text focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">wakemana@gmail.com</a> if you believe your account has been misused.</p><p>You can delete your account at any time from Settings → Your data. Deletion is immediate and irreversible.</p></div></section><section id="billing" class="scroll-mt-16 border-t border-rule pt-7"><h2 class="font-display text-h4 font-semibold text-ink">4. Paying for Pro</h2><div class="mt-3.5 space-y-3.5 text-body-sm"><ul class="ml-5 list-disc space-y-2 text-body-sm"><li>Pro is billed monthly in advance through <span class="font-display font-semibold text-ink">Stripe</span>, which handles all payment details. We never see your card number.</li><li>AI features carry a monthly allowance. When it is used up, AI generation stops until the allowance resets at the start of the next month — it does not silently keep spending, and you are never billed for overage without asking.</li><li><span class="font-display font-semibold text-ink">Cancel any time.</span> Cancellation takes effect at the end of the period you have already paid for; there is no lock-in and no cancellation fee.</li><li>We do not offer pro-rata refunds for a partial month, but if something went genuinely wrong, email <a href="mailto:wakemana@gmail.com" class="border-b border-signal-fill text-ink transition-colors duration-hover ease-standard hover:text-signal-text focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">wakemana@gmail.com</a> and we will sort it out.</li><li>If a payment fails, Pro features stop and the account falls back to the free tier. Your data is not deleted.</li><li>Prices may change with at least 30 days' notice; the new price applies from your next renewal.</li></ul></div></section><section id="acceptable" class="scroll-mt-16 border-t border-rule pt-7"><h2 class="font-display text-h4 font-semibold text-ink">5. What you must not do</h2><div class="mt-3.5 space-y-3.5 text-body-sm"><p>The important one first: Limn reads GitHub using <em>your</em> access token, so it can reach whatever you can reach. <span class="font-display font-semibold text-ink">You are responsible for having the right to access every repository you add</span>, and for complying with your employer's or client's policies about where that data may be copied and whether it may be sent to an AI model. Adding a repository you are not authorised to export is your breach, not ours.</p><p>You also agree not to:</p><ul class="ml-5 list-disc space-y-2 text-body-sm"><li>attempt to access another account's data, or probe, scan or overload the service (security research is welcome — see §9);</li><li>circumvent the plan limits, credit allowances or rate limits, or automate the AI features to consume allowance in bulk;</li><li>use the service to break the law, or in breach of GitHub's own terms;</li><li>resell the hosted service as your own.</li></ul><p>We may suspend an account that is causing harm to the service or to others. Where it is reasonable to do so, we will contact you first.</p></div></section><section id="your-data" class="scroll-mt-16 border-t border-rule pt-7"><h2 class="font-display text-h4 font-semibold text-ink">6. Your data</h2><div class="mt-3.5 space-y-3.5 text-body-sm"><p>You keep all rights in your code and your repository content. We claim no ownership and no licence beyond what is needed to run the features you use — store it, display it back to you, and pass it to the processors listed in the <a href="/privacy" class="border-b border-signal-fill text-ink transition-colors duration-hover ease-standard hover:text-signal-text">privacy policy</a>. We do not use your code or comments to train any model.</p></div></section><section id="ai" class="scroll-mt-16 border-t border-rule pt-7"><h2 class="font-display text-h4 font-semibold text-ink">7. AI output — read this one</h2><div class="mt-3.5 space-y-3.5 text-body-sm"><p>AI-generated summaries, insights and reviews are <span class="font-display font-semibold text-ink">suggestions produced by a language model</span>. They can be confidently wrong: they miss real bugs, invent problems that do not exist, and misread intent. Nothing Limn generates is a substitute for human review, and no AI review is ever posted to GitHub without you reading it and pressing the button.</p><p>You are responsible for anything you post, merge or act on. We accept no liability for a defect an AI review failed to find, or for a change made on the strength of one.</p></div></section><section id="availability" class="scroll-mt-16 border-t border-rule pt-7"><h2 class="font-display text-h4 font-semibold text-ink">8. Availability</h2><div class="mt-3.5 space-y-3.5 text-body-sm"><p>The service is provided on an <span class="font-display font-semibold text-ink">as-is, as-available</span> basis, with no uptime guarantee and no service-level agreement. It is a small independent product: there will be maintenance, and occasionally there will be outages. Data is stored durably by our hosting provider, but <span class="font-display font-semibold text-ink">you should not treat Limn as the system of record</span> — GitHub is. Everything Limn holds can be re-synced from there.</p></div></section><section id="liability" class="scroll-mt-16 border-t border-rule pt-7"><h2 class="font-display text-h4 font-semibold text-ink">9. Liability</h2><div class="mt-3.5 space-y-3.5 text-body-sm"><p>To the fullest extent the law allows, we exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. We are not liable for indirect or consequential loss, lost profits, lost data or business interruption.</p><p>Where liability cannot be excluded, it is capped at the greater of the amount you paid us in the twelve months before the claim, or £50. Nothing here limits liability for death or personal injury caused by negligence, for fraud, or for anything else that cannot lawfully be limited — and if you are a consumer, your statutory rights are unaffected.</p><p>Found a security problem? Report it privately to <a href="mailto:wakemana@gmail.com" class="border-b border-signal-fill text-ink transition-colors duration-hover ease-standard hover:text-signal-text focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">wakemana@gmail.com</a> and we will not pursue you for good-faith testing that respects other users' data and does not degrade the service.</p></div></section><section id="termination" class="scroll-mt-16 border-t border-rule pt-7"><h2 class="font-display text-h4 font-semibold text-ink">10. Ending it</h2><div class="mt-3.5 space-y-3.5 text-body-sm"><p>You may stop using the service and delete your account at any time. We may terminate or suspend access for a material breach of these terms, or with 30 days' notice if we discontinue the hosted service — in which case we will refund any period you have paid for in advance and give you time to export your data.</p></div></section><section id="changes" class="scroll-mt-16 border-t border-rule pt-7"><h2 class="font-display text-h4 font-semibold text-ink">11. Changes to these terms</h2><div class="mt-3.5 space-y-3.5 text-body-sm"><p>We will update the date at the top when these terms change, and give paying users notice of anything material. Continuing to use the service after a change means you accept it. Every revision is in the public git history.</p></div></section></div></div></main><footer class="border-t border-rule px-gutter py-[26px] font-mono text-mono-caption text-secondary"><div class="flex flex-wrap items-baseline justify-between gap-x-8 gap-y-3"><span>© 2026 Limn. Built for sprint situational awareness.</span><span class="flex flex-wrap items-baseline gap-x-5 gap-y-2"><a href="/for-developers" class="hover:text-ink transition-colors duration-hover ease-standard focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">For developers</a><a href="/for-managers" class="hover:text-ink transition-colors duration-hover ease-standard focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">For managers</a><a href="/how-we-measure" class="hover:text-ink transition-colors duration-hover ease-standard focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">How we measure</a><a href="/contact" class="hover:text-ink transition-colors duration-hover ease-standard focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">Contact</a><a href="https://github.com/alexwakeman/pierre-review" target="_blank" rel="noreferrer noopener" class="hover:text-ink transition-colors duration-hover ease-standard focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">GitHub</a><a href="/privacy" class="hover:text-ink transition-colors duration-hover ease-standard focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">Privacy</a><a href="/cookies" class="hover:text-ink transition-colors duration-hover ease-standard focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">Cookies</a><a href="/terms" class="hover:text-ink transition-colors duration-hover ease-standard focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink">Terms</a></span></div><p class="mt-4 max-w-caption">Limn is a desktop experience today. A phone-friendly build is planned.</p></footer></div>
|
|
154
|
+
</div>
|
|
155
|
+
</body>
|
|
156
|
+
</html>
|