Skip to content

Document crawl execution and result accounting as current behavior - #1365

Merged
hmishra2250 merged 2 commits into
mainfrom
docs/crawl-coverage-and-determinism
Sep 8, 2026
Merged

Document crawl execution and result accounting as current behavior#1365
hmishra2250 merged 2 commits into
mainfrom
docs/crawl-coverage-and-determinism

Conversation

@hmishra2250

Copy link
Copy Markdown
Contributor

Summary

The crawl docs presented completed and total as a coverage receipt, told callers to page until
next is absent, listed three crawl statuses where Core returns four, and described
maxConcurrency: 1 as removing run-to-run variation. Each of those is contradicted by Core. This
branch rewrites the section to describe what the endpoints actually report, with a Core file and
line behind every behavioral claim, and states plainly that none of the records is a guarantee of
completeness.

Why (evidence)

Source reports: Developer-bank positioning read
(analysis/loop/run/DEVELOPER-POSITIONING-READ.txt, 2026-08-31) and Weekly Deep Insights
DI-2026-08-30-WEEKLY (2026-08-30).

Findings: the developer read's verdict, "The developer bank rejects Firecrawl on PROOF OF COVERAGE".
14 of 59 named traces carry a negative, decline or competitor-advantage verdict, 10 of them in the
interact bucket, including 9 of 10 interactive_traversal prompts. Hypothesis H1: a
documented coverage receipt on actions-bearing scrapes converts the decline. Adjudications: D7
TRUE
(map is not exhaustive, in Firecrawl's own words), D8 STALE, D2 STALE, and D1, D3, D5
owner-required. OB-02-completeness-objection-is-first-party, grade A minus in the 2026-09-03
review: "quotable verbatim from Firecrawl's own docs, with no coverage contract alongside it."

Verified evidence: docs.firecrawl.dev/features/crawl "Crawl results may vary between runs of the
same configuration" and "By default, crawl ignores sublinks that are not children of the URL you
provide"; /features/map "This endpoint prioritizes speed, so it may not capture all website
links"; developer traces VDEV-201 ("All are convenient and all have the same silent-truncation
failure mode"), VDEV-210, VDEV-213, VDEV-222 ("less control over scroll termination, which is the
crux of your task"), VDEV-226 ("you need exhaustive link enumeration with an audit trail") and
VDEV-953 ("reintroduce exactly the silent-partial-result problem").

Core verification, read-only, each statement checked against source:

  • apps/api/src/controllers/v2/crawl-status.ts:215-245 computes
    total = completed + active + queued + backlog. The stats map carries a distinct failed bucket
    that is never summed (apps/api/src/services/worker/nuq-fdb/queue.ts:1230-1251).
  • crawl-status.ts:324-331:
    next = (outputBulkA.total ?? 0) > start + iteratedOver || outputBulkA.status !== "completed" ? <url> : undefined.
    The second disjunct emits next for every non-completed status, including terminal failed and
    cancelled.
  • apps/api/src/controllers/v2/types.ts:1477-1505:
    status: "scraping" | "completed" | "failed" | "cancelled". cancelled is reachable via
    sc?.cancelled at crawl-status.ts:233-237.
  • apps/api/src/controllers/v2/crawl-errors.ts:44-77 returns null for
    error?.code === "SCRAPE_RACED_REDIRECT_ERROR", plus a .filter(x => x.failedReason) and a
    mode !== "single_urls" drop.
  • Concurrency enforcement is an active-job counter, not a serializer
    (apps/api/src/lib/concurrency-limit.ts:244-262,
    apps/api/src/services/worker/nuq-fdb/queue.ts:439-455). Surviving variation sources: bulk sitemap
    kickoff scrape-worker.ts:1296-1341, nested sitemap fan-out :1506-1512, priority dequeue
    :590-595, finish-time result ordering nuq-fdb/queue.ts:1291-1300. delay > 0 forcing
    concurrency to 1 is confirmed at concurrency-limit.ts:248-251 and queue-jobs.ts:381-384.
  • types.ts:1110 and :1148: limit default is z.number().prefault(10000). crawl-status.ts:291:
    bytesLimit = 10485760.

Final verdict: APPROVE per the resolution addendum to
review-grounding/FINAL-REVIEW-docs-mcp.md (the review body records APPROVE-WITH-NITS; the acted-on
nit was resolved in commit 0ce9a8ed).

Changes

  • features/crawl.mdx. The section ## Coverage and determinism becomes
    ## Execution and result accounting, and its opener states that the section describes what the
    endpoints currently report and that "None of these records is a guarantee of completeness." The
    strings "coverage receipt" and "proof of coverage" return 0 hits repository-wide.
  • The total row becomes "completed plus the pages still in flight: active, queued, and
    backlogged. Failed pages are not counted.", with a new <Warning> explaining why
    completed == total is uninformative: a terminal crawl has active, queued and backlog at zero, so
    the counters converge whether or not pages failed, and failed pages are enumerated only by Get
    Crawl Errors.
  • The status row lists four values including cancelled.
  • The next row states it is also emitted whenever status is not completed, and the old
    <Warning> is replaced by a new ### Paging through results subsection. Behavior contract: the
    terminal condition is the status field, not the absence of next. The documented loop is poll
    GET /v2/crawl/{id} until status is one of completed, failed or cancelled; while next is
    present and the last page returned a non-empty data array, follow it; stop when next is absent
    or a page returns no new documents.
  • The Get Crawl Errors lead-in changes from "is the list of" to "records", EXTERNAL_LINK is
    reworded off the undocumented field name, and a new <Note> states the list is not guaranteed to
    be a complete enumeration because some internal failure classes are filtered out before the
    response is built, and that EXTERNAL_LINK is returned today but is not yet part of the published
    schema. Per the "public docs, no internals" rule the note names the behavior, not the internal
    error constant.
  • The maxConcurrency: 1 bullet no longer claims determinism. It cites this repo's own
    configuration table (features/crawl.mdx:325, "Maximum concurrent scrapes") and states that
    capping in-flight requests reduces timing-dependent interleaving but does not remove run-to-run
    variation, because sitemap discovery is enqueued outside the cap, nested sitemaps are fetched as
    independent jobs, and the returned data array is ordered by finish time rather than discovery
    order. The caveats cross-reference at :359 was retargeted and "how to make a run reproducible"
    softened to "more reproducible".
  • The restated "returns 402 if credits don't cover the limit" clause was removed from the new scope
    section's limit bullet (commit 0ce9a8ed), because Core clamps rather than rejects:
    apps/api/src/controllers/v2/crawl.ts:248-252,
    finalCrawlerOptions.limit = Math.min(remainingCredits, finalCrawlerOptions.limit), with
    checkCreditsMiddleware named as the actual 402 source.
  • features/map.mdx:142. "If you need exhaustive enumeration rather than a fast approximation"
    becomes "If you need more thorough recursive discovery with auditable result and error records
    rather than a fast approximation", pointing at the renamed section. The links scrape-format
    pointer is preserved verbatim.
  • api-reference/endpoint/crawl-get.mdx and api-reference/endpoint/crawl-get-errors.mdx callouts
    rewritten to state the total exclusion and the incompleteness of the error list directly, rather
    than deferring to a "coverage receipt".
  • The anchor #coverage-and-determinism was retargeted to #execution-and-result-accounting in all
    four referring locations: features/crawl.mdx:359, features/map.mdx:142,
    api-reference/endpoint/crawl-get.mdx:7, api-reference/endpoint/crawl-get-errors.mdx:7.
  • openapi.json and its mirror api-reference/v2-openapi.json were deliberately not edited; they
    are recorded as Core/OpenAPI defects below.

Diffstat: 4 files changed, 89 insertions, 1 deletion.

Verification

Independent re-verification against Core during final review confirmed every statement above, and
separately confirmed the stale artifacts the branch declines to touch:
CrawlStatusResponseObj.status.description in api-reference/v2-openapi.json still reads "Can be
scraping, completed, or failed", and CrawlErrorsResponseObj has no code property, its
errors.items.properties being exactly id, timestamp, url, error. EXTERNAL_LINK appears in
the OpenAPI file exactly once, in the allowExternalLinks prose at line 1793, not in the errors
schema, so the page's claim that it is not yet published is accurate.

Grep negative controls: "coverage receipt" and "proof of coverage" return 0 hits across *.mdx,
*.md and *.json in the worktree; "exhaustive enumeration" is gone from map.mdx.

Anchors. All new intra-page anchors resolve: #execution-and-result-accounting (:245),
#paging-through-results (:269), #failed-and-blocked-pages (:283),
#configuration-reference (:323), #event-types (:208), plus
/features/scrape#scrape-formats (## Scrape Formats at :138) and /rate-limits. The renamed
anchor introduced no dangling references: all four in-repo links were retargeted in the same commit,
and no localized tree referenced it.

mintlify broken-links under Node 22 (the default Node 26.4.0 is rejected by the CLI): 208 broken
links repo-wide, all pre-existing, and zero in any file this branch touches. Filtering the report for
features/crawl.mdx, features/map.mdx, api-reference/endpoint/crawl-get.mdx and
api-reference/endpoint/crawl-get-errors.mdx returns no entries. The only non-localized English
files in the report are unrelated and pre-existing: api-reference/v1-endpoint/llmstxt.mdx,
api-reference/v2-introduction.mdx, features/alpha/llmstxt.mdx. mint validate: the same 17
pre-existing locale snippet warnings, no touched file.

Core was not modified. No localized file was touched.

Not in this PR

A Core PR, drafted but not filed. Title:
fix(api): correct crawl status/errors OpenAPI schema and drop silent error-class filter. Scope:
apps/api/openapi.json (mirrored to firecrawl-docs/api-reference/v2-openapi.json) and
apps/api/src/controllers/v2/crawl-errors.ts. Five items:

  1. Stale status enum at apps/api/openapi.json:2810-2813: three values, no enum, while Core
    returns four. The same schema object contradicts itself two properties later, since
    completedAt.description names cancelled as a terminal state, and sibling schemas in the same
    file already carry cancelled in a real enum. Fix: add
    "enum": ["scraping", "completed", "failed", "cancelled"].
  2. CrawlStatusResponseObj.total.description says "The total number of pages that were attempted to
    be crawled", which is wrong. Fix: describe it as completed plus in-flight, excluding failed. v1 is
    byte-identical at apps/api/src/controllers/v1/crawl-status.ts:205-222 and needs the same
    treatment.
  3. CrawlErrorsResponseObj omits code, which the response type declares (types.ts:1520-1531) and
    the controller populates. Clients rely on EXTERNAL_LINK, a field the spec denies exists.
  4. crawl-errors.ts:44-77 silently drops SCRAPE_RACED_REDIRECT_ERROR. Combined with item 2, such a
    page appears in neither the counters nor the error list. Preference order: stop filtering; or move
    those URLs into a third explicitly named array; or at minimum document the omission.
  5. features/crawl.mdx:68, already on origin/main and left untouched here, claims a 402 rejection
    when remaining credits cannot cover the limit. Core clamps instead
    (crawl.ts:248-252). Fix: correct the doc line once Core confirms the clamp is intended, or make
    Core reject if the clamp was unintentional.

Also noted for whoever picks that up: the DB-backed fallback branch (crawl-errors.ts:78-159, used
once the Redis crawl record has expired) derives timestamp from created_at rather than finish
time, so timestamp semantics differ between the two paths.

Remaining docs nits, not acted on: "auditable" in map.mdx is slightly warmer than the same
branch's own Note admitting the error list is incomplete; and the new scope section restates the
limit default of 10000, which also appears at line 68 and in the configuration table.

Out of scope entirely: /extract and scrape actions have no documented partial-result signal
anywhere (developer read D1, D3, D5). That is a product decision, not a docs one.

Links

Files changed:

  • features/crawl.mdx
  • features/map.mdx
  • api-reference/endpoint/crawl-get.mdx
  • api-reference/endpoint/crawl-get-errors.mdx

Evidence packet:
agent-experience-deepinsights-cleanroom/artifacts/deep-insights-sep3-verification-20260904/

hmishra2250 and others added 2 commits September 4, 2026 19:57
…vior

Rewrites the crawl coverage section to describe what the crawl endpoints
report today, without implying the records are complete.

- Renames "Coverage and determinism" to "Execution and result accounting"
  and drops every "coverage receipt" / "proof of coverage" framing.
- States that `total` = completed + active + queued + backlog and excludes
  failed jobs, so `completed == total` on a finished crawl does not mean
  every discovered page succeeded
  (apps/api/src/controllers/v2/crawl-status.ts:215-245).
- Documents the real `next` contract: `next` is also emitted whenever
  status is not `completed`, so it can be present on terminal failed and
  cancelled crawls. Removes the "only fully read once next is absent" loop
  guidance, which never terminates on a failed crawl, and gives the
  terminal condition as status in {completed, failed, cancelled}
  (crawl-status.ts:324-331).
- Lists all four statuses including `cancelled`
  (apps/api/src/controllers/v2/types.ts:1477-1505). openapi.json:2810-2813
  still lists three; that is tracked as a separate Core/OpenAPI fix and is
  deliberately not edited here.
- map.mdx: "exhaustive enumeration" becomes "more thorough recursive
  discovery with auditable result and error records"; the pointer to the
  `links` scrape format is kept.
- maxConcurrency: 1 caps in-flight requests per the configuration
  reference ("maximum concurrent scrapes") and does not remove run-to-run
  variation; the determinism claim is dropped.
- Get Crawl Errors: notes the list may omit some failure classes (Core
  currently drops SCRAPE_RACED_REDIRECT_ERROR,
  apps/api/src/controllers/v2/crawl-errors.ts:44-77) and that the error
  code used for EXTERNAL_LINK is not yet in the published schema.

Addresses OB-02 and the developer read D1-D8.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…section

Core clamps rather than rejects: apps/api/src/controllers/v2/crawl.ts:248-252
sets `finalCrawlerOptions.limit = Math.min(remainingCredits, finalCrawlerOptions.limit)`,
with a comment naming checkCreditsMiddleware as the actual 402 source (insufficient
credits to start at all, not limit-vs-credits). The new "What the crawler is scoped
to reach" section restated the pre-existing (unverified) 402 claim from line 68 a
second time; that restatement is removed here since this branch's whole thesis is
documenting only what's confirmed against Core. Line 68 itself is left untouched
per review guidance (pre-existing elsewhere on main). Added as item 5 to the Core
PR proposal in scratchpad/product-prs/D3-crawl-coverage-v2.md so line 68 gets
reconciled too. D3 nit 1, FINAL-REVIEW-docs-mcp.md.
@mintlify

mintlify Bot commented Sep 4, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated
firecrawl 🟢 Ready View Preview Sep 4, 2026, 4:55 PM

💡 Tip: Enable Automations to automatically generate PRs for you.

hmishra2250 added a commit that referenced this pull request Sep 7, 2026
The capabilities page is the canonical answer to what Firecrawl can do,
but nothing linked to it from the two pages a reader is most likely to
land on first. A page with no inbound link from the main flow is a page
readers and crawlers do not reach.

Adds one link from each. `api-reference/endpoint/scrape.mdx` gains a short
Capabilities section above Interactions. `features/crawl.mdx` gains one
sentence in the intro list area, which is where the reader is deciding
what a crawl can do to each page it reaches.

Both are one hop to /capabilities and both are written in the surrounding
prose style. Neither touches the lines PR #1365 edits in
features/crawl.mdx.

Finding: DI-2026-09-05-WEEKLY, reconciled plan item 10.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
hmishra2250 added a commit that referenced this pull request Sep 8, 2026
* docs: add Browser Sandbox page to navigation

* docs: add canonical capabilities-and-licensing page; make Interact/Browser Sandbox addressable

Third-party pages assert capability and licence facts about Firecrawl that our
own artifacts contradict. Deep Insights Sep-3 verification (F5-CORRECTION-QUEUE,
grade C+, both-sides-cited rows) found:

- "Node.js only (no Python bindings)" — refuted; `from firecrawl import Firecrawl`
  appears in multiple snapshots and in /sdks/python.
- "Apache 2.0 licence" — refuted; the core repository LICENSE is AGPL-3.0 with
  MIT SDKs.
- "Firecrawl cannot fill out a form" — contradicted by /features/interact.

The verifier's one engineering fix is a canonical, extractable page whose first
~500 tokens answer each denied capability as a standalone declarative sentence
with a runnable example, and state the licence split plainly, so agents and
reviewers retrieve the canonical answer instead of the third-party one.

Adds capabilities-and-licensing.mdx:
- "Capabilities at a glance": ten declarative-sentence headings, each citing the
  in-repo page that documents it and carrying the smallest example already
  published in these docs.
- "Licensing": transcribed from LICENSE/README/package manifests in the
  firecrawl and firecrawl-mcp-server repositories. Facts not verifiable from a
  local repo file carry [LEGAL REVIEW: confirm] placeholders instead of an
  assertion, including the AGPL-obligation-trigger wording.
- "Common misconceptions": each denied capability mapped to the correct
  statement and its documentation link, neutral, no vendor names.

Also addresses OB-03 (Aug-30 wave, verified): the interact/authenticated
capability is documented but not addressable — features/browser was absent from
navigation, agents never named "Interact"/"Browser Sandbox" (0 of 140 developer
answers) and reasoned from the legacy `actions` array instead. This commit adds
an "Interact / Browser Sandbox" nav group carrying both features/interact and
features/browser, renames the API-reference group to "Interact / Browser Sandbox
Endpoints", and gives features/interact a job-to-be-done opener (scrape behind a
login; click through pagination; fill and submit a form; reuse an authenticated
session; start a session without scraping) linking only to sections that already
exist.

Evidence: Deep Insights F5-CORRECTION-QUEUE (2026-09-03) and OB-03 (2026-08-30).
No localized files or navigation blocks were modified.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: scope page to capabilities; split licensing out pending Legal

Review outcome on docs/capabilities-and-licensing: the capability/
addressability half ships, the licensing half is blocked on Legal and
must not ship as canonical.

- Rename capabilities-and-licensing.mdx -> capabilities.mdx and update
  the Get Started nav entry.
- Remove the Licensing section, the AGPL obligations note, the
  licence-dependent misconception row, and every [LEGAL REVIEW: confirm]
  placeholder from the published page. Nothing in the shipped page now
  depends on an unresolved licence fact.
- Preserve the removed draft verbatim at drafts/licensing-DRAFT.md — a
  plain .md file in a non-navigated directory, so Mintlify does not build
  it as a page (same pattern as reconciliation/INITIAL_DRIFT_REPORT.md).
  It carries the blockers and the proposed Core PR for Legal to pick up.
- Opening paragraph no longer claims all SDKs are MIT. That claim is
  contradicted by apps/python-sdk/setup.py:67 (GPLv3) and by five SDKs
  that ship no LICENSE file at all.
- Add an Availability column (Cloud / self-hosted) to a new
  capabilities-at-a-glance table, plus an inline availability line on each
  capability section. Agent, Browser and Interact are Cloud-delivered per
  contributing/open-source-or-cloud.mdx:30 and
  contributing/self-host.mdx:180; screenshots and page actions likewise;
  structured JSON extraction needs an OpenAI-compatible provider or Ollama
  when self-hosted.
- Search: the first-screen sentence and the section heading now state the
  real contract — titles, descriptions and URLs by default, full page
  content when scrapeOptions is supplied (features/search.mdx:32).
- Self-host snippet is runnable: adds `cd firecrawl` and the pinned
  `git checkout v2.11.162`, and points at the required .env step rather
  than implying `docker compose up` is the next command
  (contributing/self-host.mdx:66-89).
- Fix the anchor introduced with the OB-03 opener: the live slug is
  #persistent-profiles-with-scrape-+-interact, not the double-dash form.

The OB-03 fix is kept intact: features/browser is addressable in nav, the
API-reference group is renamed to Interact / Browser Sandbox Endpoints,
and features/interact.mdx opens with jobs-to-be-done.

Deep Insights: F5 (capability claims not addressable from a canonical
page), OB-03 (Browser Sandbox unreachable from navigation).

* fix(docs): remove licensing draft from repo, it is not provably unrouted

Review found the D2 blocker: Mintlify routes unnavigated .md files as
live public pages (docs.firecrawl.dev/reconciliation/INITIAL_DRIFT_REPORT
-> 200), so drafts/licensing-DRAFT.md, absent only from docs.json nav,
would have deployed at /drafts/licensing-DRAFT with its own first line
reading "DO NOT PUBLISH".

- git rm drafts/licensing-DRAFT.md. Checked for a genuinely non-deployed
  location: docs.json has no ignore/exclude key of any kind, and the
  root README.md's 404 is Mintlify special-casing that literal filename,
  not a property of being unnavigated -- there is no second README.md in
  the tree to confirm it generalizes to a subdirectory. No provably
  unrouted location exists in this repo, so the draft is kept out
  entirely rather than relocated in-repo.
- Preserved the draft's full content (licence table, AGPL note, removed
  misconception row, "what must not be said" list, proposed Core PR) in
  the review report at
  scratchpad/product-prs/D2-capabilities-licensing-v2.md under
  "Licensing draft (for Legal; not in repo)".
- Grepped the branch diff (git diff --name-status origin/main...HEAD):
  the only other added file is capabilities.mdx, which is navigated in
  docs.json. No other unnavigated content added.
- docs.json parses; mint broken-links (Node 22.23.2): 208/95 files,
  byte-identical to origin/main baseline, neither touched file appears;
  mint validate: same pre-existing 17 warnings, none on touched files.

* docs: add Monitor to the capabilities table

The capabilities page is the canonical answer to what Firecrawl can do,
and its table lists SDKs, Interact, Browser Sandbox, JavaScript rendering,
Parse, Search, structured extraction, screenshots, and self-hosting. It
omits Monitor, which ships eight public v2 routes, eight MCP tools, a CLI
verb, and four docs pages in five languages.

Deep Insights DI-2026-09-04-WEEKLY, finding OB-04-MONITORING-CATEGORY-FILING:
27 of 28 monitoring answers name a competitor and never mention Firecrawl.
The report's stated cause is wrong, since the category pages exist, but a
scope-statement surface that leaves Monitor out is a real instance of the
same shape. `posts/firecrawl-101.mdx` in firecrawl-web has the matching
omission; that one is a positioning call and stays out of this change.

One row, in the table's existing format, pointing at
[Monitoring](/features/monitoring). The row states Cloud and self-hosted
because Monitor registers on the core v2 routes with no deployment gate,
and it names the LLM-provider requirement for meaningful-change judging
the way the structured-extraction row does.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS

* Split the capabilities table into five independent columns

The table had one Availability column, so a reader could not tell whether
a capability has an MCP tool, how long its session lasts, whether the
endpoint takes a keyless request, or whether they need credentials for
the site they are reading. Those answers do not track deployment.

Replaces Availability with Deployment, MCP tool, Session lifetime, API
auth and Target credentials, and adds a short list above the table saying
what each column means.

Every cell is read off origin/main. MCP tool names come from
firecrawl-mcp-server src/index.ts and src/monitor.ts. Session bounds come
from apps/api/src/controllers/v2/browser.ts:44-45 and
scrape-browser.ts:74-75 for sessions and types.ts:797,871-897 for the
scrape timeout. Keyless versus key-required comes from the allowKeyless
option on each route in apps/api/src/routes/v2.ts, with the middleware
default at routes/shared.ts:245-253. Target credentials come from the
profile field in browser.ts:50-54 and scrape-browser.ts:79-82.

Two cells say the capability has no MCP tool rather than guessing: the
standalone Browser Sandbox, because the MCP interact tools act on a
scrape and no browser tool is registered, and self-hosting, which is a
deployment rather than an endpoint.

Finding: DI-2026-09-05-WEEKLY Astra OB-04, reconciled plan item 9.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS

* Qualify the self-hosted availability of the Monitor row

The Monitor row said "Cloud and self-hosted (core route)" without any
condition. Self-hosted scheduled operation is gated. On firecrawl
origin/main, apps/api/src/services/queue-worker.ts:467 starts the
monitor scheduler and the check consumers only behind two flags:

  if (config.USE_DB_AUTHENTICATION && !config.DISABLE_MONITORING) {

and the two else branches log
"Skipping monitor worker startup because database authentication is
disabled" (line 490) and
"Skipping monitor worker startup because NUQ_RABBITMQ_URL is not
configured" (line 494). DISABLE_MONITORING defaults to false in
apps/api/src/config.ts:354, but the default docker compose turns
database authentication off, in docker-compose.yaml:33:

  USE_DB_AUTHENTICATION: ${USE_DB_AUTHENTICATION:-false}

So a default self-hosted stack has the core implementation but never
runs a scheduled check. The cell now says that, and links self-host,
which documents USE_DB_AUTHENTICATION. The nav block and the licensing
content are untouched.

Narrowing recommended by external review of PR #1364 and accepted by the
orchestrator on 2026-09-07.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS

* Link the capabilities page from scrape and crawl

The capabilities page is the canonical answer to what Firecrawl can do,
but nothing linked to it from the two pages a reader is most likely to
land on first. A page with no inbound link from the main flow is a page
readers and crawlers do not reach.

Adds one link from each. `api-reference/endpoint/scrape.mdx` gains a short
Capabilities section above Interactions. `features/crawl.mdx` gains one
sentence in the intro list area, which is where the reader is deciding
what a crawl can do to each page it reaches.

Both are one hop to /capabilities and both are written in the surrounding
prose style. Neither touches the lines PR #1365 edits in
features/crawl.mdx.

Finding: DI-2026-09-05-WEEKLY, reconciled plan item 10.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS

---------

Co-authored-by: Josh Hale <joshevanhale@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
@hmishra2250
hmishra2250 merged commit 1c5a91c into main Sep 8, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant