Skip to content

docs: requirements for direct scraping and kube-prometheus-stack install command - #1749

Open
as51340 wants to merge 46 commits into
mainfrom
docs/ha-servicemonitor-tls
Open

docs: requirements for direct scraping and kube-prometheus-stack install command#1749
as51340 wants to merge 46 commits into
mainfrom
docs/ha-servicemonitor-tls

Conversation

@as51340

@as51340 as51340 commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Release note

Rewrites the "Scrape Memgraph directly" section of the HA Kubernetes page as a checklist of what the HA chart needs (Prometheus Operator, scrapeMemgraphDirectly, prometheus.enabled: false, ServiceMonitor, matching release name/namespace), adds a complete minimal values example and verification steps, and clarifies prometheus.namespace and prometheus.serviceMonitor.kubePrometheusStackReleaseName in the configuration table. Updates the kube-prometheus-stack install command to helm upgrade --install via the prometheus-community repo on both the HA and standalone pages.

Related product PRs

None; documentation of existing chart behaviour.

Checklist:

  • Add appropriate milestone (current release cycle)
  • Add bugfix or feature label, based on the product PR type you're documenting
  • Make sure all relevant tech details are documented
    • Update reference pages (configuration options table on the HA k8s page)
    • Search for the feature you are working on (mentions) and make updates if needed
    • Provide a basic example of usage
    • In case your feature is an Enterprise one, list it under ME page and mark its page with Enterprise
  • Check all content with Grammarly
  • Perform a self-review of my code
  • The build passes locally
  • My changes generate no new warnings or errors

gitbuda and others added 30 commits July 16, 2026 20:35
* docs: document RANGE keyword in CREATE INDEX ... FOR syntax

* docs: drop unnecessary note about RANGE with native ON syntax
…rcion behavior (#1696)

* docs: document map.get and map.merge_list, and map null/coercion behavior

* docs: note node/relationship coercion for map.remove_key, remove_keys, flatten

* docs: mark map.set_key value argument as nullable
* refactor: build and package MAGE from the unified CMake tree

* update page
* docs: document convert from_json_map/list, to_map and to_json

Document the four JSON/map conversion functions in the convert module, including
the optional path selector, its supported syntax, and the structured to_json
output for nodes, relationships, paths, points and temporals.

* docs: correct convert.to_map arg name and to_json node example

* docs: add APOC-equivalence callouts and mapping-table rows for convert JSON functions

* docs: steer json_util JSON functions to the convert module

* docs: move convert-module steer to per-function callouts in json_util

* docs: render convert map/list results as Cypher values, not JSON

* docs: correct convert.to_map description for non-map values

* docs: note convert.to_json supported types and enum error
* Add search module documentation (search.node, search.node_all)

* Add search module to available-algorithms index and APOC mappings

* docs: clarify =~ is not string-only-guarded in search operators

---------

Co-authored-by: Vlasta <95473291+vpavicic@users.noreply.github.com>
…t, duplicates (#1694)

* docs: Document NULL handling for collections functions

* docs: Document collections.disjunction, subtract, and duplicates

* docs: List all collections functions in the compatibility table and mark their equivalents

Add the compatibility-table rows for the collections functions that were
missing (including disjunction, subtract, duplicates) and add the
equivalence callout to the function pages that lacked one, so every
collections function consistently states its compatibility mapping.

* docs: Include disjunction, subtract, and duplicates in the NULL-handling matrix
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs: HA analytical mode bulk import (memgraph#4510)

Document the analytical bulk-import workflow for data instances: switch to
IN_MEMORY_ANALYTICAL, import, switch back to IN_MEMORY_TRANSACTIONAL and
register the replicas again.

- New page clustering/high-availability/analytical-import.mdx with the
  requirements (MAIN role, zero registered replicas, instance-wide), the
  step-by-step recipe, the durability guarantees of the switch back, replica
  re-registration without wiping, and the user-facing error messages.
- Storage modes page: drop the "doesn't support replication and high
  availability" claim, correct the stale "create a snapshot manually before
  switching back" advice, describe the switch-back snapshot, .old archiving
  and WAL sequence restart.
- Replication and HA command references and best practices: registration and
  unregistration belong in transactional mode only.
- Release notes: breaking change and new feature entries for v3.13.0.
- Fix the flag name --storage-enable-backup-dir -> --storage-backup-dir-enabled,
  which never existed under the documented name.

* docs: improvements
Extend the server-side descriptions page with property-value descriptions:
the PROPERTY <p> VALUE <literal> target, SET/DELETE examples, the new
"property value" type and value column in SHOW DESCRIPTIONS, the description()
function for resolving a value's label at query time, and an enum/lookup
decoding use case.
Snapshots are written out in bounded chunks so they don't take memory
away from the workload running alongside them. Document the flag that
sets the chunk size, including that it applies per snapshot thread and
so multiplies by --storage-snapshot-thread-count under parallel
snapshot creation.

The tuning guidance deliberately avoids predicting which direction
helps: the effect depends on the hardware, operating system and
workload, so it points at measurement rather than an expected result.
Add an "Access control" section to the text-search and vector-search pages
explaining how fine-grained access control filters results: a node or
relationship surfaces only if the caller can read it (labels/type, and both
endpoints for relationships) and the matched/indexed property. Notes the
per-procedure property gating (search vs search_all/regex), silent dropping,
the aggregate limitation, and wildcard-index per-result filtering.
Covers memgraph/memgraph#4534:
- new "Terminate all transactions" section with scope, authorization,
  self-exclusion, ordering and no-mixing rules
- breaking change: transaction ids must parse in full
- unauthorized matches now report killed: false
- privileges table row and v3.13.0 release notes entries

Co-authored-by: Vlasta <95473291+vpavicic@users.noreply.github.com>
* doc: Add docs for global vertex-property indices

* refactor: Tidy grammar a little
Co-authored-by: Vlasta <95473291+vpavicic@users.noreply.github.com>
Document memgraph/memgraph#4492:

- SHOW INSTANCES is now always answered by the leader coordinator. A
  follower that cannot reach the leader returns an empty result set with
  a LeaderNotReachable warning instead of falling back to its local Raft
  state with "unknown" health. A down data instance now reports the role
  recorded in the Raft log.
- YIELD LEADERSHIP and SHOW COORDINATOR SETTINGS are forwarded to the
  leader, so they can be run on any coordinator.
- SHOW REPLICATION LAG reports why the lag is unavailable via
  ReplicationLagUnavailable.
- ADD COORDINATOR, REMOVE COORDINATOR and UPDATE CONFIG fail with an
  explicit "coordinator is not a leader" error.

Adds a new "When there is no leader to serve the query" error handling
section, the ShowCoordSettingsRpc / YieldLeadershipRpc entries, and
v3.13.0 release notes.

Co-authored-by: Vlasta <95473291+vpavicic@users.noreply.github.com>
* feat: SSO coords

* feat: Remove --init-file comment

* fix: Notes if SSO on data instances is already set-up

* fix: State definitively that --init-file is unsupported in HA mode

* docs: SHOW VERSION query (#1715)

---------

Co-authored-by: Vlasta <95473291+vpavicic@users.noreply.github.com>
Co-authored-by: Vlasta <95473291+vpavicic@users.noreply.github.com>
Document --storage-rocksdb-keep-log-file-num, along with the previously
undocumented --storage-rocksdb-info-log-level and
--storage-rocksdb-enable-thread-tracking flags. The info log flags now
apply to every RocksDB instance Memgraph opens, not only the on-disk
storage one.

Adds a RocksDB info logs section to the logs page and a release note.
Document the --storage-omit-vector-index-properties-on-return flag
(setting storage.omit_vector_index_properties_on_return): a new
"Omit vector properties from results" section on the vector search page,
plus entries in the runtime-settings table and the Storage flags list on
the configuration page. Covers the runtime toggle, the explicit-access
escape hatch, index-membership semantics, and that dump/WAL/replication
are unaffected.
…ze is a no-op (#1728)

Replicas now report progress on a fixed time interval for as long as work
keeps advancing, instead of after a fixed number of processed deltas. This
covers long operations that run inside a single delta -- index population,
constraint validation, snapshot loading, storage clearing before a reset, and
aborting an interrupted two-phase commit -- which previously reported nothing
and let the main drop the connection mid-build.

As a consequence the deltas_batch_progress_size coordinator setting no longer
has any effect. It stays readable and settable so existing configurations
survive an upgrade.

Core PR: memgraph/memgraph#4557
Co-authored-by: Cursor <cursoragent@cursor.com>
…echeck.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Add an "Extra volumes" section explaining role-level vs. per-instance
extraVolumes/extraVolumeMounts in the HA chart, with a PVC import example,
and add the two new fields to the per-instance configuration table.

Follows memgraph/helm-charts#281.
Memgraph 3.13 changes the default value of --metrics-format from JSON to
OpenMetrics (memgraph/memgraph#4678). Update the flag table, the metrics
format section, the deprecated JSON section, and add a breaking-change
entry to the v3.13.0 release notes.
…eck.

Co-authored-by: Cursor <cursoragent@cursor.com>
@as51340 as51340 added the feature Documentation related to a new product feature of feature update label Sep 7, 2026
@as51340 as51340 added the feature Documentation related to a new product feature of feature update label Sep 7, 2026
@vercel

vercel Bot commented Sep 7, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
documentation Ready Ready Preview Sep 8, 2026 12:41pm UTC

Request Review

…etheus-stack install command

Turn the direct-scraping section into a checklist (Prometheus Operator,
scrapeMemgraphDirectly, prometheus.enabled=false, ServiceMonitor, matching
release name/namespace), add a complete minimal values example and
verification steps, and clarify prometheus.namespace and
kubePrometheusStackReleaseName in the configuration table.

Install kube-prometheus-stack via the prometheus-community repo with
helm upgrade --install in both the HA and standalone pages.
@as51340
as51340 force-pushed the docs/ha-servicemonitor-tls branch from 2053d07 to 8f31ab0 Compare September 7, 2026 07:39
@as51340 as51340 changed the title docs(ha-k8s): ServiceMonitor TLS and requirements for direct scraping docs(ha-k8s): requirements for direct scraping and kube-prometheus-stack install command Sep 7, 2026
@as51340 as51340 self-assigned this Sep 7, 2026
@as51340 as51340 added this to the 3.13 milestone Sep 7, 2026
@as51340 as51340 added priority: medium (missing info) An additional information can be helpful or interesting, but the absence is not disruptive and removed feature Documentation related to a new product feature of feature update labels Sep 7, 2026
@as51340 as51340 changed the title docs(ha-k8s): requirements for direct scraping and kube-prometheus-stack install command docs: requirements for direct scraping and kube-prometheus-stack install command Sep 7, 2026
vpavicic and others added 3 commits September 8, 2026 11:00
Cover new milestone items in release notes, document --query-ast-cache-max-size, and tighten changelog skill guidance for user-centric wording.

Co-authored-by: Cursor <cursoragent@cursor.com>
… C++ API (#1752)

The Result class documents one SetValue entry per concrete type; the generic
overload accepting any mgp::Value was missing from the list.
)

* docs: add a Subquery expressions page for EXISTS, COUNT and COLLECT

Documents the three brace subquery expressions on one page, since they share a
body grammar, a set of accepted positions and a correlation model and differ
only in what they reduce the body's rows to. The reference splits them across
three pages and repeats about a third of each; this keeps the shared material
in one place.

Covers each construct with its bare-pattern short form where it has one, when
to reach for EXISTS over a plain pattern, the positions all three are accepted
in, the body's supported clauses, correlation and shadowing, how the body's
RETURN shapes the result, UNION bodies, and nesting.

Every example and its output is executed against 3.13.

* docs: consolidate the EXISTS subquery guide onto the Subquery expressions page

Section 4 carried a six-part EXISTS guide that the new page now covers, so it
keeps one filter example and points there. The heading stays so existing links
to #4-existential-subqueries still resolve.

Two of the subsections described behaviour the engine does not have, and the
replacements on the new page are the corrected versions: a body RETURN is
planned rather than discarded, so DISTINCT, SKIP, LIMIT and aggregation in the
body decide the answer; and shadowing an outer-scope variable in the body does
not throw, the inner binding wins. The old shadowing example returned one row,
not the two the page printed.

Also drops the claim that exists() can be used only with WHERE.

* docs: COUNT and COLLECT subqueries are supported, and exists() is not WHERE-only

Removes the COUNT and COLLECT subquery entries from "Unsupported constructs" —
both ship in 3.13.

Replaces the claims that exists() cannot appear in a CASE and can be used only
with WHERE: it, and all three subquery expressions, are accepted in a
WITH/RETURN projection, a WHERE, an ORDER BY, a CASE and an aggregation
argument. Points the expressions and functions pages at the new page, and fixes
two anchors that pointed at the pattern-expressions section instead of the
EXISTS one.

* docs: follow the house dataset convention on the Subquery expressions page

Neighbouring pages with a dataset keep the `## Dataset` heading out of the
numbered contents and park the CREATE block at the end under `## Dataset
queries`. This page listed the dataset as contents item 1, which pushed the
constructs to 2-7, and opened with twenty lines of CREATE before the first
example.

Describes the graph in two sentences up top, moves the queries to the end, and
renumbers the sections 1-6. Updates the in-page cross references and the two
inbound anchors on the WHERE and functions pages.

* docs: fix three wrong claims and two blind examples found by adversarial review

The dataset block did not reset the graph. Every sibling page's `## Dataset
queries` opens with `MATCH (n) DETACH DELETE n;`, and WHERE — which links here
twice — seeds a different :Person set, so a reader following both got 13 nodes
and silently wrong output in all twenty tables. Measured: polluted graph plus
this block now leaves exactly the page's seven nodes.

Three claims were false as written:

- The positions list offered a per-element predicate (`all`/`any`/`none`/
  `single`) alongside projections, ORDER BY, CASE and aggregate arguments. It is
  accepted only in a MATCH's or OPTIONAL MATCH's WHERE; in any other host it
  raises "not supported in this position yet". It was also the one bullet with
  no example. Dropped.
- The body clause list read as a promise that any sequence of MATCH, WHERE, WITH
  and RETURN works. A body that goes MATCH then WITH then MATCH on a symbol its
  own WITH carried raises the "contact Memgraph support" internal error in a
  MATCH's WHERE. Rephrased to describe each clause's role instead.
- UNION was said to reduce over the rows of all branches together. It
  deduplicates: over two identical branches COUNT gives 2 where UNION ALL gives
  4. The rule now names both spellings, and the example has overlapping
  branches so it distinguishes them.

Removes the shadowing rule and its example. Shadowing an outer name in a body is
an undecided divergence whose failure mode is a wrong answer, it does not hold
for pattern atoms — where the outer value wins instead — and a documented
example with an output table is the wrong place to settle it.

Two examples could not fail: ordering on COUNT DESC printed the same rows as
plain ORDER BY name, and the body LIMIT example returned the same title with the
body's ORDER BY deleted. Both now change output if the feature stops working.

Also: a bare pattern cannot name its entities at all rather than making them
anonymous; the positions list lives in one place instead of four that already
disagreed; and the section 1.1 pointer no longer sends EXISTS readers to the
exists() function section.

* docs: descriptive anchors, and the four gaps the comparison review found

Replaces the numbered headings and anchors with descriptive slugs. Two other
pages deep-link the positions section, so inserting a section ahead of it
silently retargeted them — the same breakage the removed WHERE 4.x anchors had
just caused. Numbered headings and a hand-written contents list were also a
clauses/ convention: none of the eleven sibling pages under querying/ use them.
Verified against the rendered page: fourteen heading ids, no dangling in-page
link.

Documents four behaviours that are supported and were missing:

- COLLECT { } keeps the rows whose value is null where the collect() aggregation
  drops them. Two of the four people in the dataset now carry a nickname, so the
  difference is visible, and a filtering body shows how to leave the nulls out.
- A subquery expression in a projection alongside an aggregation joins the
  grouping key, so it decides how rows group rather than only what they hold.
- A bare pattern is accepted directly in EXISTS { } and COUNT { }, and
  COUNT { (n)-->() } replaces the size((n)-->()) the Cypher-differences page
  still sent readers away from.
- The CASE clause page, which the nav and the clauses index point at, now says a
  CASE may test a subquery expression. The note previously landed only on the
  second CASE treatment in expressions.mdx.

All 28 examples re-verified against 3.13 from a polluted graph through the
page's own dataset block.

* docs: show the three subquery expressions once, side by side

Each construct section opened with the same query shape, so the page made its
central point — the three differ only in what they reduce the body's rows to —
by repeating it three times rather than showing it. One combined example now
does that, and its empty rows demonstrate the fallback values the summary table
had only asserted.

The bare-pattern shorthand moves from two places into one, where it can also
say that it holds a pattern and nothing else, and that COLLECT has none.
@vpavicic vpavicic removed the priority: medium (missing info) An additional information can be helpful or interesting, but the absence is not disruptive label Sep 8, 2026
as51340 and others added 9 commits September 8, 2026 11:19
* docs: parallel WAL writes and delta shipping to replicas

Document the new commit path on MAIN: the deltas of a transaction are
encoded for every replica in parallel with MAIN's own WAL write, instead
of the WAL write and each replica running in turn.

- how-replication-works: new "Parallel WAL writes and delta shipping"
  section covering the durability gate, preserved per-replica ordering
  and WAL order, and per-replica failure containment; note that both 2PC
  phases fan out across STRICT_SYNC replicas; correct the ASYNC section,
  which claimed one background thread per replica.
- best-practices: MAIN keeps two background threads per registered
  replica, so leave CPU headroom when registering many.
- release-notes: v3.13.0 improvement entry for memgraph#4645.

* docs: Clean comment

---------

Co-authored-by: Vlasta <95473291+vpavicic@users.noreply.github.com>
A transaction that cannot reach every SYNC replica is still committed on
the main and on every reachable replica, so memgraph/memgraph#4601 stopped
failing the query and reports the failure as a WARNING notification with
the code SyncReplicationFailure instead. ReplicationException is kept only
for the case where the transaction was rolled back everywhere (STRICT_SYNC
two-phase commit abort).

- query-metadata: add the SyncReplicationFailure code and a section on
  commit-time notifications, which reach the client in the summary of the
  last query of an implicit transaction or of the explicit COMMIT
- how-replication-works: SYNC failures now succeed with a notification;
  name ReplicationException explicitly in the STRICT_SYNC section
- help-center errors: split notification from exception by transaction
  outcome rather than by replica mode
- setup-ha-cluster-k8s: rolling upgrades no longer require applications to
  catch a replication exception on SYNC writes
- release-notes: v3.13.0 breaking change entry

Co-authored-by: Vlasta <95473291+vpavicic@users.noreply.github.com>
* docs(kshortest): document the filter lambda for KSHORTEST

Adds a "Constraining the expansion based on property values" section
mirroring the equivalent BFS/WSP/ASP sections, with examples that run
against the dataset already on the page.

Replaces the "No filter lambdas" limitation with the two that remain:
KSHORTEST orders by hop count and takes no weight lambda, and the
three-argument `(r, n, p | ...)` form is not supported.

* docs(kshortest): document the per-row path limit and the invalid bounds

The page said `|k` returns "at most 3 shortest paths between the source and target nodes" and
never said what happens with more than one pair, which is the part that changed: the limit applies
per source-target pair, so a query matching several pairs returns up to `k` for each.

Also document that the limit may be an expression reading the current row - it must be an integer
on every pair, so an optional property needs `coalesce` - and that a negative limit, a negative
minimum depth and a maximum depth below 1 raise errors while an inverted range is simply empty.

* docs(kshortest): name the length section as the other four algorithms do

Depth-first, breadth-first, weighted shortest path and all shortest paths all
head this section 'Constraining the path's length'; K shortest paths was the
only one with its own wording, directly above the section this branch adds.
)

* docs(path): document slice bound clamping and null path arguments

`slice()` adjusts an out-of-range offset or length to the nearest subpath
instead of raising an error, and `slice()`, `elements()` and `combine()`
accept a null path. Document both, with an example of each clamping rule.

* docs(path): drop the null-in-null-out notes from elements and slice

The page documents 26 arguments and states null handling for none of them, so
noting the ordinary null propagation on two of them singled them out. combine
keeps its notes: a null argument there yields the other path, not null.
…E_GLOBAL and filter sequences (#1718)

* docs(path): document the completed config map and the filter changes

Adds `expand_config()`, the config-map form of `expand()`, with the full config
table, the keys that are accepted and ignored, and three worked examples.

Extends the `subgraph_all()` and `subgraph_nodes()` config tables with the
node-identity filters, `limit`, and the `minLevel`/`maxLevel` aliases, and
records that `bfs`, `uniqueness` and `beginSequenceAtStart` are accepted there
and ignored while an unrecognized key is an error.

Corrects the relationship filter tables: a direction marker now counts wherever
it appears in an entry and `<` wins over `>`, so `<TYPE>` is an incoming filter
rather than a reciprocal-pair one. Documents the `|`-separated string form of
both filters, the merge of two entries for the same type, that a `:` is ignored,
that an empty or bare-prefix entry is an error, that a termination label below
the lower hop bound no longer ends the walk, that the start node is exempt from
the label filter unless `filterStartNode` is set, and the `-1` hop-bound and
depth-cap behaviour.

* docs(path): a filter entry naming no type and no direction is an error

Follows the two fixes made after review: an entry made only of separators, such
as ':', is rejected rather than quietly filtering out every relationship, and a
limit now follows the order the start nodes were listed in.

* docs(path): document uniqueness NODE_GLOBAL and repeating filter sequences

`uniqueness` gains `NODE_GLOBAL`, which returns one path per reachable node. The
config table, the surrounding prose and a worked example cover what that means
for a node reachable at two depths, for a `minHops` above every node's own depth,
and for several start nodes.

A new Sequences section covers the comma-separated steps of `labelFilter` and
`relationshipFilter`, the `sequence` key that spells both in one alternating
string, and `beginSequenceAtStart` -- which now acts rather than being ignored,
including on the two subgraph procedures. Every example runs against the graph
the page already builds, and its output is the measured one.

Corrects three statements that no longer hold: that the traversal-wide uniqueness
modes are unavailable, that `sequence` is unimplemented, and that
`beginSequenceAtStart` is accepted and ignored. Adds `*` to the label filter
tables as the wildcard it now is, notes that it is not one in a relationship
filter, and records the step-with-no-filter and comma-in-a-list-entry errors.

* docs(path): correct the start-node exemption and the alias-rejection rule

An exempt start node is not returned under a '>' or '/' prefix, whatever its own
labels are, and setting filterStartNode is what lets one carrying an end or
termination label come back. Only the hop aliases are rejected when both
spellings are given; the deprecated node-list spellings are read, preferred
key first.

* docs(path): correct the depth cap, disambiguate the filters, list the apoc.path aliases

The depth refusal has one call site left, inside the recursive walk, so it
applies to bfs: false only -- the default breadth-first walk is uncapped and
bounded by memory instead. The Callout named uniqueness: NODE_GLOBAL as the sole
exception, which was true when this branch was written and stopped being true
when the refusal was lifted from the path-scoped walk.

Two wording fixes: 'an allowlist or denylist' now says which one it means, the
page having gained allowlistNodes and denylistNodes alongside the label
prefixes; and the combining rule names the three filters it covers, so it no
longer reads as contradicting the table row that end labels need not satisfy the
whitelist.

The APOC mappings table listed no apoc.path.* alias at all, though all eight are
registered. Each row links an anchor that exists on the path page.

* docs(path): keep the filter notation in one place

The relationship- and label-filter prose stood three times, byte-identical, under
expand, subgraph_all and subgraph_nodes -- three places to fix the next time the
notation changes, and a reader only ever reads one of them. expand keeps the
full description, and the two subgraph sections point at it, as their config
tables already do for the filter keys themselves. The combining rule stays under
expand_config, which is where the node lists it covers are defined.

The tables are left duplicated: they predate this branch and each section's
reader needs the option list in front of them.

* docs(path): correct the string-form claim, the '*' rule, and four measured gaps

Verified against a live server and against origin/master.

The |-separated string form is NOT available on the positional path.expand --
its filter arguments are typed LIST OF STRING, so a bare string is refused by
argument validation. The claim now lives once under expand_config, where it is
true, and expand says so explicitly. This was made worse by the previous commit,
which had promoted the sentence into expand's canonical block and pointed the two
procedures where it does hold at it.

A relationship entry only errors when it reduces to exactly '*'; 'CATCHES*' is
read as a type of that literal name and matches nothing, so 'containing *'
overstated what the check closes.

With beginSequenceAtStart false a sequence must be written relationship-first --
its leading step is the hop out of the start node. Written the documented
label-first way it returns the start node alone with no error, so that now
carries a warning.

subgraph_all's rels is every relationship between the returned nodes; the
relationship filter constrains the walk, not that second pass.

Three structural defects: two blocks headed Example 2 under expand, a Usage
header emitted twice under subgraph_nodes, and create's output table missing a
paren and two ':' separators.

* docs(path): fix the bfs result-set claim, the config default, and five more

All measured against a live server at b8eeba789, or read off the registration.

The bfs row claimed the result set is the same either way and only the order
differs. Under NODE_GLOBAL it is not: a node is spent at the depth the walk
first reaches it, and inclusion is depth-gated, so from Human with minHops 2 the
breadth-first walk returns one path and the depth-first one three. The
RELATIONSHIP_PATH control returns 36 both ways, so the claim holds for the
path-scoped modes and is now stated for those. The 'faster on a deep traversal'
half went with it: it was never measured, and it points at the one mode that
refuses past depth 5000.

config is a required argument on all three procedures -- proc_add_arg, not
proc_add_opt_arg -- so path.expand_config(d) is 'requires exactly 2 arguments',
not the documented default of {}. path.create's registered default really is
{key: []}, as its signature shows.

The >LABEL row said expansion only goes through whitelisted nodes. An end-listed
node is expanded through regardless, which the page's own last label example
already demonstrates.

NODE_GLOBAL returns at most one path per reachable node, not exactly one: the
mark is taken at enqueue, so a node a filter later rejects yields nothing. The
paragraph also only held for the default bfs: true and now says so.

expand() has no filterStartNode argument, so the shared paragraph no longer tells
its readers to set one. A null inside a list of starts is an error, which is the
OPTIONAL MATCH case the null-start sentence said needed no guard. And '<|>' works
as a string but matches nothing as a list entry.

* docs(path): add the zero-hop row expand()'s second example returns

The call passes min_hops 0 and a label filter with no end or termination prefix,
so the start node is emitted before any expansion; the table listed only the
Dog/Wolf path. The two neighbouring examples correctly omit a zero-hop row
because their filters ('>Mouse','>Human' and '/Cat') put the walk into
end-nodes-only mode, which excludes the exempt start node.

The row was serialized from the live result, and the serializer was checked by
reproducing the row already in the table byte for byte.

* docs(path): say that 'optional' is not an accepted config key

expand_config is the alias target for apoc.path.expandConfig, whose documented
config accepts an 'optional' boolean that yields a null row where the expansion
would otherwise eliminate one. It is not among the 18 keys kConfigKeys holds, so
that call raises an unrecognized-key error here -- the one documented key of the
reference config with no counterpart.

* docs(path): say why only expand() carries a depth cap

* docs(path): drop the stale bfs note from subgraph_all's intro
Deprecated flags were scattered across release notes and flag tables, so
there was no way to check whether an upgrade affected a flag in use. Add a
Deprecated features page under Upgrades listing each flag with the versions
that deprecated, ignored and rejected it, plus its replacement.

Removal happens in stages: a flag can be accepted but silently ignored for
several releases before it is rejected outright. The table records both, as
they need different action on upgrade.

Drop the removed --auth-module-executable row from the two live flag tables
and link the new page from the pages documenting each replacement.
…1754)

The list comprehension section described the WHERE predicate only as a filter,
leaving the reader no way to know what a predicate that is NULL for an element
does. Memgraph 3.13 skips that element and returns the others, so the section
now says so and shows the result a list containing NULL gives. A comprehension
over a NULL list has always returned NULL and is recorded alongside, being the
neighbouring case a reader asks about next.

The behaviour is stated for the comprehension alone. Treating a NULL predicate
as false is not a rule the evaluator keeps everywhere: the quantifiers return
NULL for a NULL predicate instead.
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.

8 participants