Phase 6: license-compliance audit and enterprise/ relicensing to AGPLv3

Full dependency inventory across Rust/Go/npm plus Docker base images
and vendored assets (776 rows, 502 unique deps), classified against
AGPLv3 compatibility with real citations rather than assumptions.
enterprise/ relicensed from its commercial-license stub to AGPLv3,
matching core -- the one real flag (Redpanda's BSL 1.1) was evaluated
against primary sources and accepted as-is rather than triggering a
broker swap. CI enforcement wired up (.github/workflows/license-
compliance.yml, this repo's first CI workflow), a root LICENSE file
added, and every doc/comment referencing the old commercial-license
boundary updated to describe it as architectural only.

See /docs/compliance/ for the full report, inventory, and policy.
This commit is contained in:
2026-08-16 18:03:32 -07:00
parent 595d1fe0fd
commit 661568085e
24 changed files with 11409 additions and 73 deletions
+91
View File
@@ -0,0 +1,91 @@
name: License compliance
# Enforces the AGPLv3-project-wide license policy from the Phase 6
# license audit (/docs/compliance/license-policy.md) on every PR --
# a new dependency with an incompatible license fails the build here,
# not months later when someone happens to re-run the one-time audit.
# See /docs/compliance/license-audit-report.md for the audit this
# policy was derived from.
#
# This is the first CI workflow in this repo. Several docs
# (architecture.md, phase-4-isolation-design.md, phase-4-rbac-design.md)
# already say "enforced in CI by hack/check-tenant-boundary.sh" -- that
# was true of the *script*, but nothing had actually wired it into a
# running CI system yet. Fixed here as part of standing up the first
# real workflow file, not left as a second gap next to this one.
on:
push:
branches: [master, main]
pull_request:
jobs:
rust-licenses:
name: Rust license check (cargo-deny)
runs-on: ubuntu-latest
strategy:
matrix:
crate_dir: [agent, search]
steps:
- uses: actions/checkout@v4
- uses: EmbarkStudios/cargo-deny-action@v2
with:
manifest-path: ${{ matrix.crate_dir }}/Cargo.toml
command: check licenses
go-licenses:
name: Go license check (go-licenses)
runs-on: ubuntu-latest
strategy:
matrix:
# Every Go module with real third-party dependencies -- cli,
# hack/webhook-sink, and hack/alert-load-test are stdlib-only
# (confirmed at audit time) and intentionally excluded, not
# forgotten; add them here if they ever gain a dependency.
module_dir:
- api
- ingest
- alerting
- enterprise
- deploy/operator
- terraform
- proto
- hack/benchmark-fixture
- hack/windows-fixture
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version-file: ${{ matrix.module_dir }}/go.mod
- run: go install github.com/google/go-licenses@latest
- name: Check licenses
working-directory: ${{ matrix.module_dir }}
run: |
go-licenses check ./... \
--allowed_licenses=MIT,Apache-2.0,BSD-2-Clause,BSD-3-Clause,ISC,MPL-2.0,0BSD,Unlicense \
--ignore github.com/sentry/sentry \
--ignore github.com/segmentio/asm
npm-licenses:
name: npm license check (license-checker)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- working-directory: web
run: npm ci
- name: Check licenses
working-directory: web
run: |
npx --yes license-checker \
--onlyAllow "MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;0BSD;MPL-2.0" \
--excludePackages "[email protected]"
tenant-boundary:
name: Architectural boundary check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: bash hack/check-tenant-boundary.sh
+68 -9
View File
@@ -11,9 +11,14 @@ described there without flagging it to me first.
- Distro-agnostic Linux agent: must run identically on RHEL/Debian/Arch/SUSE - Distro-agnostic Linux agent: must run identically on RHEL/Debian/Arch/SUSE
derivatives via a statically-linked musl binary. No glibc runtime deps. derivatives via a statically-linked musl binary. No glibc runtime deps.
- Windows support via native ETW/Event Log API, not a WSL shim. - Windows support via native ETW/Event Log API, not a WSL shim.
- AGPLv3 for core + agents. Enterprise module (SSO/multi-tenancy/compliance) - **AGPLv3 for the entire project, no exceptions.** The `enterprise/`
lives in a separate `enterprise/` directory under a commercial license stub module (SSO/multi-tenancy/compliance) was under a commercial-license
— keep the boundary clean from day one, don't let AGPL code import from it. stub from Phase 4 through Phase 5; Phase 6 relicensed it to AGPLv3,
matching core — see `/docs/compliance/license-audit-report.md` for the
full record and its business-model consequences. `enterprise/` stays a
separate directory that core never imports from, but that boundary is
now architectural only (keeps core buildable/deployable standalone,
keeps tenant resolution server-side), not a licensing wall.
- Schema-on-write with OTel semantic conventions as the default schema, with - Schema-on-write with OTel semantic conventions as the default schema, with
schema-on-read fallback for unstructured text. schema-on-read fallback for unstructured text.
- Every UI action must correspond to a documented REST/gRPC call. No - Every UI action must correspond to a documented REST/gRPC call. No
@@ -279,8 +284,10 @@ through the *same* `IndexRegistry` the read side already used, and
routes the write there instead of always into the default index. Unlike routes the write there instead of always into the default index. Unlike
the ClickHouse side, this needed no "second binary": `IndexRegistry` the ClickHouse side, this needed no "second binary": `IndexRegistry`
already lives in this AGPL-core binary (Tantivy has no grant system to already lives in this AGPL-core binary (Tantivy has no grant system to
gate a commercially-licensed credential behind, so there was never an gate a separately-credentialed binary behind, so there was never an
import-boundary reason to split it out), so read and write share one import-boundary reason to split it out -- true regardless of licensing,
though at the time of writing `enterprise/` was still commercially
licensed; both sides are AGPLv3 as of Phase 6), so read and write share one
registry directly. The periodic Tantivy commit now commits every tenant registry directly. The periodic Tantivy commit now commits every tenant
index that's seen a write, not just the default one index that's seen a write, not just the default one
(`IndexRegistry::commit_all`). **The active-tenant gap this same change (`IndexRegistry::commit_all`). **The active-tenant gap this same change
@@ -353,10 +360,12 @@ integrity guarantees, written for a prospective enterprise customer's
security team. security team.
The tenant-isolation, provisioning, SSO, and RBAC-enforcement mechanisms The tenant-isolation, provisioning, SSO, and RBAC-enforcement mechanisms
live entirely in `enterprise/` (commercial license), confirmed live entirely in `enterprise/` (commercial license at the time this
explicitly rather than assumed: AGPL core (`/api`, `/alerting`, `/web`) section was written; relicensed to AGPLv3 in Phase 6, see that phase's
stays genuinely single-tenant, with no multi-tenant mechanism present at section below), confirmed explicitly rather than assumed: core
all — `enterprise/` supplies tenant-scoped implementations of core's (`/api`, `/alerting`, `/web`) stays genuinely single-tenant, with no
multi-tenant mechanism present at all — `enterprise/` supplies
tenant-scoped implementations of core's
already-shipped `querylang/executor.SQLRunner`/`SearchClient` interfaces already-shipped `querylang/executor.SQLRunner`/`SearchClient` interfaces
rather than core growing tenant awareness. Query-compiler-level "compile rather than core growing tenant awareness. Query-compiler-level "compile
time" enforcement, as originally proposed, turned out not to be time" enforcement, as originally proposed, turned out not to be
@@ -448,6 +457,56 @@ Non-goals for this phase (same discipline as every phase so far):
(time-series, bar, single-stat, heatmap, top-N) — real, disclosed (time-series, bar, single-stat, heatmap, top-N) — real, disclosed
future work, not oversights. future work, not oversights.
## What "done" looks like for Phase 6
**Status: shipped.** A full license-compliance audit and remediation
pass across the entire monorepo. Full report:
`/docs/compliance/license-audit-report.md`;
machine-readable inventory: `/docs/compliance/license-inventory.{csv,json}`
(776 rows, 502 unique dependencies across Rust/Go/npm plus Docker base
images and vendored assets); ongoing policy:
`/docs/compliance/license-policy.md`, now enforced in CI
(`.github/workflows/license-compliance.yml` — this repo's first CI
workflow file).
Every dependency was inventoried and classified; 774 of 776 rows
resolved cleanly to AGPLv3-compatible with real citations, not guesses
(see the audit report for the reasoning on each non-obvious case —
dual-licensed crates, MPL-2.0, a license-detector false negative on
`segmentio/asm`); `enterprise/` relicensed to AGPLv3 throughout the
repo, with the deliberate business-model consequence recorded (anyone,
including competitors, can now legally self-host or fork those
features); confirmed no license-gating/entitlement logic ever existed to
remove; a root `LICENSE` file added (there wasn't one before this
phase); CI enforcement wired up and every command verified locally.
**The one real flag — Redpanda's BSL 1.1 license (confirmed against
primary sources for the pinned v24.2.7, not assumed to still be
Apache-2.0) — is resolved, not outstanding**: decision recorded
2026-08-16, accept as-is. Sentry's own use (internal Kafka-protocol
transport, no resale of broker access) sits within BSL's Additional Use
Grant; the harder question — whether a third party self-hosting Sentry
"as a service" using the bundled `docker-compose.yml` could trip BSL's
anti-resale restriction on Redpanda specifically — was judged unlikely
given Sentry's ingest pipeline creates fixed internal topics, not
per-end-user ones, and was accepted as a disclosed, known risk rather
than triggering a swap to Apache Kafka (real resource-footprint cost) or
dropping the bundled broker image (rougher local dev experience). See
the audit report's Redpanda section for the full reasoning, the other
two options that were considered and not chosen, and the condition under
which this should be revisited (an official hosted/managed Sentry
offering, which would make the third-party-SaaS scenario Sentry's own
rather than a hypothetical one).
Non-goals for this phase: replacing permissively-licensed dependencies
with copyleft ones (explicitly out of scope per the phase's own brief);
per-file SPDX license headers across the monorepo's several thousand
source files (a deliberate choice — see the audit report's "Own license
declarations" section for why root `LICENSE` + manifest fields was
judged sufficient); redesigning `favicon.svg` (flagged as a leftover
SvelteKit scaffold asset, not a license blocker — a design task, not a
compliance one).
## When in doubt ## When in doubt
Ask before: changing the pinned stack, adding a new external dependency Ask before: changing the pinned stack, adding a new external dependency
that pulls in a large transitive tree, or making an architectural decision that pulls in a large transitive tree, or making an architectural decision
+661
View File
@@ -0,0 +1,661 @@
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.
+264
View File
@@ -0,0 +1,264 @@
# This template contains all of the possible sections and their default values
# Note that all fields that take a lint level have these possible values:
# * deny - An error will be produced and the check will fail
# * warn - A warning will be produced, but the check will not fail
# * allow - No warning or error will be produced, though in some cases a note
# will be
# The values provided in this template are the default values that will be used
# when any section or field is not specified in your own configuration
# Root options
# The graph table configures how the dependency graph is constructed and thus
# which crates the checks are performed against
[graph]
# If 1 or more target triples (and optionally, target_features) are specified,
# only the specified targets will be checked when running `cargo deny check`.
# This means, if a particular package is only ever used as a target specific
# dependency, such as, for example, the `nix` crate only being used via the
# `target_family = "unix"` configuration, that only having windows targets in
# this list would mean the nix crate, as well as any of its exclusive
# dependencies not shared by any other crates, would be ignored, as the target
# list here is effectively saying which targets you are building for.
targets = [
# The triple can be any string, but only the target triples built in to
# rustc (as of 1.40) can be checked against actual config expressions
#"x86_64-unknown-linux-musl",
# You can also specify which target_features you promise are enabled for a
# particular target. target_features are currently not validated against
# the actual valid features supported by the target architecture.
#{ triple = "wasm32-unknown-unknown", features = ["atomics"] },
]
# When creating the dependency graph used as the source of truth when checks are
# executed, this field can be used to prune crates from the graph, removing them
# from the view of cargo-deny. This is an extremely heavy hammer, as if a crate
# is pruned from the graph, all of its dependencies will also be pruned unless
# they are connected to another crate in the graph that hasn't been pruned,
# so it should be used with care. The identifiers are [Package ID Specifications]
# (https://doc.rust-lang.org/cargo/reference/pkgid-spec.html)
#exclude = []
# If true, metadata will be collected with `--all-features`. Note that this can't
# be toggled off if true, if you want to conditionally enable `--all-features` it
# is recommended to pass `--all-features` on the cmd line instead
all-features = false
# If true, metadata will be collected with `--no-default-features`. The same
# caveat with `all-features` applies
no-default-features = false
# If set, these feature will be enabled when collecting metadata. If `--features`
# is specified on the cmd line they will take precedence over this option.
#features = []
# The output table provides options for how/if diagnostics are outputted
[output]
# When outputting inclusion graphs in diagnostics that include features, this
# option can be used to specify the depth at which feature edges will be added.
# This option is included since the graphs can be quite large and the addition
# of features from the crate(s) to all of the graph roots can be far too verbose.
# This option can be overridden via `--feature-depth` on the cmd line
feature-depth = 1
# This section is considered when running `cargo deny check advisories`
# More documentation for the advisories section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/advisories/cfg.html
[advisories]
# The path where the advisory databases are cloned/fetched into
#db-path = "$CARGO_HOME/advisory-dbs"
# The url(s) of the advisory databases to use
#db-urls = ["https://github.com/rustsec/advisory-db"]
# A list of advisory IDs to ignore. Note that ignored advisories will still
# output a note when they are encountered.
ignore = [
#"RUSTSEC-0000-0000",
#{ id = "RUSTSEC-0000-0000", reason = "you can specify a reason the advisory is ignored" },
#"[email protected]", # you can also ignore yanked crate versions if you wish
#{ crate = "[email protected]", reason = "you can specify why you are ignoring the yanked crate" },
]
# If this is true, then cargo deny will use the git executable to fetch advisory database.
# If this is false, then it uses a built-in git library.
# Setting this to true can be helpful if you have special authentication requirements that cargo-deny does not support.
# See Git Authentication for more information about setting up git authentication.
#git-fetch-with-cli = true
# This section is considered when running `cargo deny check licenses`
# More documentation for the licenses section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/licenses/cfg.html
[licenses]
# List of explicitly allowed licenses
# See https://spdx.org/licenses/ for list of possible licenses
# [possible values: any SPDX 3.11 short identifier (+ optional exception)].
# Sentry's own AGPLv3-project license policy (Phase 6 license audit --
# see /docs/compliance/license-policy.md for the full rationale per
# category). Every license actually found in this crate's dependency
# tree at audit time is listed explicitly here, not just the common
# ones, so a genuinely new license shows up as a real CI failure, not
# something silently covered by a broad wildcard.
allow = [
"MIT",
"Apache-2.0",
"Apache-2.0 WITH LLVM-exception",
"BSD-2-Clause",
"BSD-3-Clause",
"ISC",
"0BSD",
"BSL-1.0",
"MPL-2.0",
"Unicode-3.0",
"Unlicense",
"Zlib",
"AGPL-3.0-only", # this project's own crates
]
# Deliberately NOT in the blanket allow list: LGPL-2.1-or-later,
# zlib-acknowledgement. Both currently appear only on crates that also
# offer a permissive alternative in an SPDX OR expression (r-efi:
# "MIT OR Apache-2.0 OR LGPL-2.1-or-later"; fastdivide:
# "MIT OR zlib-acknowledgement") -- cargo-deny accepts a crate if ANY
# license in its OR expression is allowed, so these pass via MIT/Apache-2.0
# without either weaker-copyleft license needing a blanket allow. A future
# crate offering ONLY one of these, with no permissive alternative, should
# fail this check and get manual (b)-category review, not sail through.
# The confidence threshold for detecting a license from license text.
# The higher the value, the more closely the license text must be to the
# canonical license text of a valid SPDX license file.
# [possible values: any between 0.0 and 1.0].
confidence-threshold = 0.8
# Allow 1 or more licenses on a per-crate basis, so that particular licenses
# aren't accepted for every possible crate as with the normal allow list
exceptions = [
# Each entry is the crate and version constraint, and its specific allow
# list
#{ allow = ["Zlib"], crate = "adler32" },
]
# Some crates don't have (easily) machine readable licensing information,
# adding a clarification entry for it allows you to manually specify the
# licensing information
#[[licenses.clarify]]
# The package spec the clarification applies to
#crate = "ring"
# The SPDX expression for the license requirements of the crate
#expression = "MIT AND ISC AND OpenSSL"
# One or more files in the crate's source used as the "source of truth" for
# the license expression. If the contents match, the clarification will be used
# when running the license check, otherwise the clarification will be ignored
# and the crate will be checked normally, which may produce warnings or errors
# depending on the rest of your configuration
#license-files = [
# Each entry is a crate relative path, and the (opaque) hash of its contents
#{ path = "LICENSE", hash = 0xbd0eed23 }
#]
[licenses.private]
# If true, ignores workspace crates that aren't published, or are only
# published to private registries.
# To see how to mark a crate as unpublished (to the official registry),
# visit https://doc.rust-lang.org/cargo/reference/manifest.html#the-publish-field.
ignore = false
# One or more private registries that you might publish crates to, if a crate
# is only published to private registries, and ignore is true, the crate will
# not have its license(s) checked
registries = [
#"https://sekretz.com/registry
]
# This section is considered when running `cargo deny check bans`.
# More documentation about the 'bans' section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/bans/cfg.html
[bans]
# Lint level for when multiple versions of the same crate are detected
multiple-versions = "warn"
# Lint level for when a crate version requirement is `*`
wildcards = "allow"
# The graph highlighting used when creating dotgraphs for crates
# with multiple versions
# * lowest-version - The path to the lowest versioned duplicate is highlighted
# * simplest-path - The path to the version with the fewest edges is highlighted
# * all - Both lowest-version and simplest-path are used
highlight = "all"
# The default lint level for `default` features for crates that are members of
# the workspace that is being checked. This can be overridden by allowing/denying
# `default` on a crate-by-crate basis if desired.
workspace-default-features = "allow"
# The default lint level for `default` features for external crates that are not
# members of the workspace. This can be overridden by allowing/denying `default`
# on a crate-by-crate basis if desired.
external-default-features = "allow"
# List of crates that are allowed. Use with care!
allow = [
#"[email protected]",
#{ crate = "[email protected]", reason = "you can specify a reason it is allowed" },
]
# If true, workspace members are automatically allowed even when using deny-by-default
# This is useful for organizations that want to deny all external dependencies by default
# but allow their own workspace crates without having to explicitly list them
allow-workspace = false
# List of crates to deny
deny = [
#"[email protected]",
#{ crate = "[email protected]", reason = "you can specify a reason it is banned" },
# Wrapper crates can optionally be specified to allow the crate when it
# is a direct dependency of the otherwise banned crate
#{ crate = "[email protected]", wrappers = ["this-crate-directly-depends-on-ansi_term"] },
]
# List of features to allow/deny
# Each entry the name of a crate and a version range. If version is
# not specified, all versions will be matched.
#[[bans.features]]
#crate = "reqwest"
# Features to not allow
#deny = ["json"]
# Features to allow
#allow = [
# "rustls",
# "__rustls",
# "__tls",
# "hyper-rustls",
# "rustls",
# "rustls-pemfile",
# "rustls-tls-webpki-roots",
# "tokio-rustls",
# "webpki-roots",
#]
# If true, the allowed features must exactly match the enabled feature set. If
# this is set there is no point setting `deny`
#exact = true
# Certain crates/versions that will be skipped when doing duplicate detection.
skip = [
#"[email protected]",
#{ crate = "[email protected]", reason = "you can specify a reason why it can't be updated/removed" },
]
# Similarly to `skip` allows you to skip certain crates during duplicate
# detection. Unlike skip, it also includes the entire tree of transitive
# dependencies starting at the specified crate, up to a certain depth, which is
# by default infinite.
skip-tree = [
#"[email protected]", # will be skipped along with _all_ of its direct and transitive dependencies
#{ crate = "[email protected]", depth = 20 },
]
# This section is considered when running `cargo deny check sources`.
# More documentation about the 'sources' section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/sources/cfg.html
[sources]
# Lint level for what to happen when a crate from a crate registry that is not
# in the allow list is encountered
unknown-registry = "warn"
# Lint level for what to happen when a crate from a git repository that is not
# in the allow list is encountered
unknown-git = "warn"
# List of URLs for allowed crate registries. Defaults to the crates.io index
# if not specified. If it is specified but empty, no registries are allowed.
allow-registry = ["https://github.com/rust-lang/crates.io-index"]
# List of URLs for allowed Git repositories
allow-git = []
[sources.allow-org]
# github.com organizations to allow git sources for
github = []
# gitlab.com organizations to allow git sources for
gitlab = []
# bitbucket.org organizations to allow git sources for
bitbucket = []
+29 -15
View File
@@ -79,8 +79,8 @@ This split is not to be changed without discussion — see CLAUDE.md.
| `search` (Rust, Phase 1) | Consumes the same Redpanda topic `ingest` does (own offset tracking), builds a Tantivy full-text index over `message`, serves matches over gRPC. Writes always go to one shared (default) index (`ingest` isn't tenant-aware); reads can be scoped per-tenant via `SearchRequest.tenant_id` and `src/registry.rs`'s `IndexRegistry` (Phase 4) — see "Tenant isolation" below. | | `search` (Rust, Phase 1) | Consumes the same Redpanda topic `ingest` does (own offset tracking), builds a Tantivy full-text index over `message`, serves matches over gRPC. Writes always go to one shared (default) index (`ingest` isn't tenant-aware); reads can be scoped per-tenant via `SearchRequest.tenant_id` and `src/registry.rs`'s `IndexRegistry` (Phase 4) — see "Tenant isolation" below. |
| `api` (Go) | gRPC + REST gateway. `POST /query` compiles pipe-syntax or raw SQL to one IR, executed across ClickHouse/Tantivy (`/docs/query-language-design.md`). `internal/dashboards` is CRUD only — panel query execution happens client-side, reusing `/query`. `internal/authz` (Phase 4) enforces RBAC via a network call to `enterprise-auth`, never an import. | | `api` (Go) | gRPC + REST gateway. `POST /query` compiles pipe-syntax or raw SQL to one IR, executed across ClickHouse/Tantivy (`/docs/query-language-design.md`). `internal/dashboards` is CRUD only — panel query execution happens client-side, reusing `/query`. `internal/authz` (Phase 4) enforces RBAC via a network call to `enterprise-auth`, never an import. |
| `alerting` (Go, Phase 3) | Evaluates alert rules on an interval, calls `api`'s `POST /query` (via a `RoleService` credential once Phase 4 auth is configured — see `/docs/phase-4-isolation-design.md`'s alerting↔api gap), delivers firing/resolved notifications (webhook/Slack/PagerDuty). | | `alerting` (Go, Phase 3) | Evaluates alert rules on an interval, calls `api`'s `POST /query` (via a `RoleService` credential once Phase 4 auth is configured — see `/docs/phase-4-isolation-design.md`'s alerting↔api gap), delivers firing/resolved notifications (webhook/Slack/PagerDuty). |
| `enterprise` (Go, commercial license, Phase 4) | OIDC login (`internal/loginhandler`'s `/auth/oidc/login`+`/auth/oidc/callback`) and SAML login (`/auth/saml/login`+`/auth/saml/acs`, via `internal/saml`'s `crewjam/saml` wiring) — both a real IdP round trip, each verified with a real fake IdP (`coreos/go-oidc`'s `oidctest`, `crewjam/saml`'s `samlidp`) but not a real external one, RBAC storage (`internal/rbacstore`), session/service-token issuance (`internal/session`), the append-only audit log (`internal/audit`), `enterprise-auth`'s HTTP surface (`/internal/authorize`, `/auth/features`), per-tenant ClickHouse provisioning (`internal/tenantprovision`) and query routing (`internal/chrunner`), and `cmd/enterprise-api` — a second binary combining core's `api/queryapi`/`api/dashboards` handlers with these tenant-aware implementations. Never imported by core — see "Licensing boundary" below. Also `internal/searchclient` (per-tenant Tantivy routing, wired the same way into `search`). | | `enterprise` (Go, AGPLv3 — see "Licensing boundary" below, Phase 4) | OIDC login (`internal/loginhandler`'s `/auth/oidc/login`+`/auth/oidc/callback`) and SAML login (`/auth/saml/login`+`/auth/saml/acs`, via `internal/saml`'s `crewjam/saml` wiring) — both a real IdP round trip, each verified with a real fake IdP (`coreos/go-oidc`'s `oidctest`, `crewjam/saml`'s `samlidp`) but not a real external one, RBAC storage (`internal/rbacstore`), session/service-token issuance (`internal/session`), the append-only audit log (`internal/audit`), `enterprise-auth`'s HTTP surface (`/internal/authorize`, `/auth/features`), per-tenant ClickHouse provisioning (`internal/tenantprovision`) and query routing (`internal/chrunner`), and `cmd/enterprise-api` — a second binary combining core's `api/queryapi`/`api/dashboards` handlers with these tenant-aware implementations. Never imported by core — see "Licensing boundary" below. Also `internal/searchclient` (per-tenant Tantivy routing, wired the same way into `search`). |
| `web` (SvelteKit, static build) | Query bar, dashboards, alerts, and (Phase 4) a settings page that renders SSO status via a runtime capability check (`GET /auth/features`) rather than bundling enterprise-licensed components. | | `web` (SvelteKit, static build) | Query bar, dashboards, alerts, and (Phase 4) a settings page that renders SSO status via a runtime capability check (`GET /auth/features`) rather than bundling `enterprise/`'s components directly — an architectural choice (core builds and runs standalone) that predates and doesn't depend on Phase 6's relicensing. |
| `cli` (`sentryctl`) | `ping`, `query`, `dashboards` (list/get/apply), `alerts` (list/get/apply). `$SENTRYCTL_TOKEN`, if set, is forwarded as a Bearer credential (Phase 4). | | `cli` (`sentryctl`) | `ping`, `query`, `dashboards` (list/get/apply), `alerts` (list/get/apply). `$SENTRYCTL_TOKEN`, if set, is forwarded as a Bearer credential (Phase 4). |
| `deploy` | A Helm chart covering every `docker-compose.yml` service, plus (Phase 4) a small Go Operator managing one CRD (`Tenant`) that provisions a per-tenant ClickHouse credential Secret. Never applied to a live cluster in the environment this was built in — see `/deploy/README.md`'s verification section before trusting it. | | `deploy` | A Helm chart covering every `docker-compose.yml` service, plus (Phase 4) a small Go Operator managing one CRD (`Tenant`) that provisions a per-tenant ClickHouse credential Secret. Never applied to a live cluster in the environment this was built in — see `/deploy/README.md`'s verification section before trusting it. |
@@ -169,9 +169,12 @@ escape hatch is opaque to any compiler-injected filter.
(`search/src/registry.rs` + `enterprise/internal/searchclient`) (`search/src/registry.rs` + `enterprise/internal/searchclient`)
already used, and writes there instead of always into the default already used, and writes there instead of always into the default
index. No "second binary" needed here, unlike ClickHouse — Tantivy has index. No "second binary" needed here, unlike ClickHouse — Tantivy has
no grant system to gate a commercially-licensed credential behind, so no grant system to gate a separately-credentialed binary behind
`IndexRegistry` already lived directly in this AGPL-core binary, and (originally written when that credential was commercially licensed;
read/write just share it. The active-tenant gap this design left open the split was never actually about which license `enterprise/`
carried, only about ClickHouse's grant system being the thing worth
isolating), so `IndexRegistry` already lived directly in this AGPL-core
binary, and read/write just share it. The active-tenant gap this design left open
is now closed too: `search/src/tenants.rs`'s `ActiveTenantTracker` is now closed too: `search/src/tenants.rs`'s `ActiveTenantTracker`
polls a new `GET /internal/active-tenants` endpoint on polls a new `GET /internal/active-tenants` endpoint on
`enterprise-auth``search` has no Postgres access, so unlike `enterprise-auth``search` has no Postgres access, so unlike
@@ -219,16 +222,27 @@ IdP or a real running multi-container deployment.
## Licensing boundary ## Licensing boundary
AGPLv3 for core + agents. Enterprise features (SSO, RBAC storage, audit **AGPLv3 for the entire project**, including `enterprise/` — as of
logging) live under `enterprise/` (commercial license stub, added Phase 6, there is no separate commercial-license carve-out anywhere in
Phase 4). AGPL code must never import from `enterprise/` — enforced in this repo. `enterprise/` (added Phase 4 under a commercial-license stub,
CI by `hack/check-tenant-boundary.sh`, which greps every build for the covering SSO, RBAC storage, audit logging) was relicensed to AGPLv3 in
import edge. Where core needs a decision only `enterprise/` can make Phase 6; see `/docs/compliance/license-audit-report.md` for the full
(is this request authorized, what SSO is configured), it calls record of that decision, including the deliberate business-model
`enterprise-auth` over plain HTTP instead consequence: anyone, including competitors, can now legally self-host or
(`api/authz.HTTPAuthorizer`, `web`'s `GET /auth/features`) — fork those features under AGPLv3's terms.
the same "network boundary, not import boundary" shape `/alerting``api`
already used before `enterprise/` existed. Core still never imports from `enterprise/` — enforced in CI by
`hack/check-tenant-boundary.sh`, which greps every build for the import
edge — but this is now purely an **architectural** boundary, not a
licensing one. It exists so core stays buildable and deployable with
zero multi-tenant mechanism present regardless of what license either
side carries, and so tenant identity resolution stays server-side rather
than trusting a request parameter — see `/docs/phase-4-isolation-design.md`.
Where core needs a decision only `enterprise/` can make (is this request
authorized, what SSO is configured), it calls `enterprise-auth` over
plain HTTP instead (`api/authz.HTTPAuthorizer`, `web`'s
`GET /auth/features`) — the same "network boundary, not import boundary"
shape `/alerting``api` already used before `enterprise/` existed.
## Non-negotiables carried from CLAUDE.md ## Non-negotiables carried from CLAUDE.md
+412
View File
@@ -0,0 +1,412 @@
# License compliance audit report — Phase 6
**This report is a strong first pass, not a legal opinion.** It should
be reviewed by actual legal counsel before the project is publicly
released, pitched to customers, or used as the basis for any compliance
claim. Nothing in this document should be represented to a third party
as legal advice or a certified compliance determination.
## Scope and goal
Every component in the monorepo — `/agent`, `/transport`, `/ingest`,
`/storage`, `/api`, `/web`, `/cli`, `/deploy`, and `enterprise/` — is
licensed AGPLv3, with no separate commercial-license carve-out anywhere
in the project. This audit inventories every third-party dependency
across every language ecosystem, classifies each for AGPLv3
compatibility, resolves or explicitly flags anything that doesn't
resolve cleanly, and stands up CI enforcement so this doesn't need to be
manually re-audited from scratch every time a dependency changes.
This is a compatibility audit, not a "replace every permissively
licensed library" exercise. MIT, Apache-2.0, BSD, and ISC dependencies
are all fine to depend on from AGPLv3 code. The concern is dependencies
with licenses that are genuinely incompatible, impose unaccounted-for
obligations, or aren't open source at all (source-available licenses
like BSL/SSPL, anything with a field-of-use or non-compete restriction).
## Methodology
1. **Inventory** every dependency, direct and transitive, in every
language ecosystem present in the repo:
- **Rust** (`agent` workspace: `sentry-agent`, `sentry-parser`;
`search`): `cargo-deny` (`cargo deny list --format tsv`), installed
fresh for this audit (`cargo install cargo-deny --locked`).
- **Go** (`api`, `ingest`, `alerting`, `enterprise`,
`deploy/operator`, `terraform`, `proto`,
`hack/benchmark-fixture`, `hack/windows-fixture` — every module with
real third-party dependencies; `cli`, `hack/webhook-sink`, and
`hack/alert-load-test` are stdlib-only, confirmed by inspecting
their `go.mod` files, not scanned): `go-licenses`
(`google/go-licenses`, installed via `go install ...@latest`),
`go-licenses csv ./...` per module.
- **npm** (`web`): `license-checker` (`npx license-checker --json`).
- **Vendored/non-manifest content**: a repo-wide grep for
copy/attribution markers ("adapted from", "copied from",
"stackoverflow", stray copyright headers, "vendored") — zero hits.
A separate pass for binary/asset files (fonts, icons, images)
outside `node_modules`/build output — two font files and one SVG
found, see below. Docker base images referenced in
`docker-compose.yml` were pulled out and reviewed manually, since
they're not a language-ecosystem dependency any of the three
scanners above would see.
2. **Classify** every distinct license found into: (a) clearly
compatible as a dependency, (b) requires a closer look, (c) actually
incompatible or non-open-source. Every (b)/(c) result is cited with
real reasoning below, not asserted.
3. **Named risk areas** (Redpanda's licensing history, ClickHouse client
libraries, Phase 5 font/asset files, Kubernetes Operator tooling)
checked explicitly, against primary sources (actual license files at
the actual pinned versions/tags), not general recollection.
4. **Remediation** options recorded for every (c)/unresolved-(b) item —
fix, isolate, or flag for a business decision. Nothing was silently
swapped.
5. **Own license declarations audited**: root `LICENSE` file, per-ecosystem
manifest `license` fields, and a repo-wide check for any file still
claiming a license other than AGPLv3.
6. **`enterprise/` relicensed** to AGPLv3, closing the former
commercial-license carve-out project-wide.
7. **CI enforcement** stood up so this audit's findings don't silently
go stale.
## Inventory summary
Full machine-readable inventory: `/docs/compliance/license-inventory.csv`
and `.json` (columns: `component`, `dependency`, `version`, `license`,
`direct_or_transitive`, `ecosystem`, `flagged`, `flag_reason`,
`classification`).
| Ecosystem | Component-scoped rows | Unique dependencies | Flagged (unique) |
|---|---|---|---|
| Rust (cargo) | 440 | — | 4 |
| Go | 255 | — | 9 (`segmentio/asm` + 8 HashiCorp MPL-2.0 packages) |
| npm | 75 | — | 3 |
| Docker base images | 3 | 3 | 1 (Redpanda) |
| Font/vendored assets | 3 | 3 | 1 (favicon) |
| **Total** | **776** | **502** | **23** (~4.6%) |
Rows double-count dependencies shared across multiple components by
design (e.g. `pgx` appears once per Go module that imports it) — that's
what makes the `component` column meaningful. All 502 unique
dependencies resolved to classification (a) except one: Redpanda,
classification (c), recorded below with remediation options rather than
resolved unilaterally.
## Classification results
**774 of 776 rows (all but Redpanda and the favicon asset) classify as
(a): clearly compatible.** No dependency in this project's tree required
a genuine (b)-category deep-dive that didn't resolve cleanly — every
item that looked ambiguous at first pass (dual-licensed with a copyleft
option, a non-standard license file, an unfamiliar SPDX identifier)
turned out, on actual inspection, to resolve to (a) once read carefully.
That's a real result of doing the reading, not an assumption going in —
recorded below per item so the reasoning is checkable.
### Dual/multi-licensed crates electing a permissive branch (Rust)
Four Rust crates carry an SPDX OR expression that includes a
copyleft/less-common option alongside a permissive one. Standard
practice for a disjunctive license grant is that the downstream user
elects whichever listed option they prefer — we elect the permissive
branch in every case, incurring zero copyleft obligation:
| Crate | License expression | Elected | Note |
|---|---|---|---|
| `r-efi` | `MIT OR Apache-2.0 OR LGPL-2.1-or-later` | MIT/Apache-2.0 | Build-dependency only (via `tonic-build``prost-build``tempfile``getrandom`), for a UEFI target this project doesn't build for — doesn't even ship in a release artifact. |
| `fastdivide` | `MIT OR zlib-acknowledgement` | MIT | |
| `htmlescape` | `Apache-2.0 / MIT / MPL-2.0` | Apache-2.0/MIT | MPL-2.0 would also have been fine on its own merits (see below). |
| `ryu` | `Apache-2.0 OR BSL-1.0` | Apache-2.0 | `BSL-1.0` here is the Boost Software License — permissive, unrelated to Redpanda's Business Source License below despite the shared abbreviation. |
### MPL-2.0 (Go, npm, and one Rust option above)
MPL-2.0 is file-level (weak) copyleft: modifications to MPL-covered
*files* must stay available under MPL if distributed, but combining
MPL-covered code into a larger differently-licensed work — including an
AGPLv3 work — does not require the larger work to relicense (MPL 2.0
§3.3, "Distribution of a Larger Work"). Pre-cleared as category (a) per
this audit's own scope definition. Found in:
- **Go** (`/terraform` only, HashiCorp's Terraform provider SDK and its
own dependencies): `go-plugin`, `go-uuid`, `terraform-plugin-framework`,
`terraform-plugin-go`, `terraform-plugin-log`, `terraform-registry-address`,
`terraform-svchost`, `yamux`. Lower risk still than the general case:
`/terraform` is its own standalone Go module producing a Terraform
provider plugin binary, not linked into any core service.
- **npm**: `axe-core` (dev-only, used for the Phase 5 accessibility
sweep, never shipped), `lightningcss` + its platform-specific native
binary (a transitive dependency of Vite's CSS pipeline — build-time
only, never bundled into `web`'s shipped static output).
### `segmentio/asm` — tool detection gap, not a real license question (Go)
`go-licenses` reported `Unknown` for every sub-package of
`github.com/segmentio/asm` (a transitive dependency via the ClickHouse
Go driver). Its actual `LICENSE` file (read directly from the module
cache) is headed "MIT No Attribution" — SPDX `MIT-0`, a permissive MIT
variant that drops the attribution requirement. The auto-detector's
regex didn't recognize that non-standard heading text. Confirmed by
reading the file, not assumed; carried as an explicit CI ignore with
this citation (see the policy doc) rather than silently added to the
general allow-list.
### Named risk areas (task 3)
- **ClickHouse client libraries** (`github.com/ClickHouse/clickhouse-go/v2`,
`github.com/ClickHouse/ch-go`): Apache-2.0, matching the server itself.
No divergence.
- **Kubernetes Operator tooling** (`sigs.k8s.io/controller-runtime`,
`k8s.io/client-go`, `k8s.io/apimachinery`): Apache-2.0 (one forked
sub-package, `apimachinery/third_party/forked/golang`, is BSD-3-Clause
— also fine). The concern about "generated boilerplate's license
headers" turned out not to apply: `deploy/operator/api/v1alpha1/
zz_generated.deepcopy.go` is, despite its name, **hand-written**, not
actually produced by `controller-gen` (no kubebuilder/controller-gen
binary was available when it was built — disclosed in the file's own
doc comment and in `/deploy/README.md`). There's no real
upstream-generated boilerplate to check for header drift against.
- **Phase 5 font/asset files**: see below.
## Redpanda — classification (c), recorded for a business decision
**The pinned Redpanda image (`docker.redpanda.com/redpandadata/redpanda:v24.2.7`,
`docker-compose.yml` and `transport/`) ships under BSL 1.1 (Business
Source License), confirmed against the actual `licenses/bsl.md` file at
that tag** (`github.com/redpanda-data/redpanda`, tag `v24.2.7`) — not
assumed from general familiarity with Redpanda's licensing history,
which the audit brief specifically warned has shifted over time.
Key facts, verified against primary sources:
- **Not OSI-approved open source.** BSL is explicitly source-available,
matching this audit's own category-(c) definition.
- **Change Date**: 4 years from each version's release date, after which
that version's `Licensed Work` converts to Apache-2.0. v24.2.7 was
released 2024-10-11 (confirmed via the GitHub Releases API) — its
Change Date is ~2028-10-11. As of this audit, it has **not** yet
converted.
- **The restriction is narrow**: BSL's Additional Use Grant permits any
use except offering the Licensed Work as a "Streaming or Queuing
Service" to third parties (defined as a commercial offering letting
third parties create topics in the Licensed Work, e.g. a hosted Kafka
broker product). This project's `docker-compose.yml` uses only
plaintext core Kafka-protocol functionality — no RCL-gated enterprise
features, no tiered storage, no SASL/RBAC — squarely within the
permitted grant as an internal transport layer.
- **No AGPL linking/compatibility issue.** Sentry never links against
Redpanda's code; it's consumed purely over the Kafka wire protocol, the
same relationship as ClickHouse and Postgres. AGPLv3's copyleft
doesn't reach across a network-protocol boundary to unrelated,
separately-licensed software you merely talk to.
- **The genuinely open question**: Phase 6 relicenses `enterprise/` to
AGPLv3 specifically so that anyone, including competitors, can legally
self-host or fork Sentry — including offering it as a network service,
per AGPLv3's own terms. If a third party does that using the bundled
`docker-compose.yml` (which pulls this BSL-licensed Redpanda image),
does *their* deployment trip BSL's Streaming-or-Queuing-Service
restriction? Sentry's ingest pipeline creates fixed internal topics,
not per-end-user topics exposed for direct third-party production or
consumption — so this is very likely **not** a Streaming-or-Queuing-Service
under BSL's own definition. But this is a business/redistribution
judgment call about a hypothetical third party's use, not a pure
technical compatibility question this audit can close unilaterally.
### Remediation options (recorded per task 4's requirement)
1. **Accept as-is.** Document the reasoning above; Sentry's own use is
clearly within BSL's permitted grant, and the third-party-SaaS
scenario is a reasonable-but-unverified reading, not a known
violation. Lowest effort, zero functional change.
2. **Swap to Apache Kafka** (Apache-2.0, genuinely OSI open source).
`apache/kafka` (KRaft mode, no ZooKeeper needed as of Kafka 3.x) is
wire-protocol-compatible with everything `transport`/`ingest`/`search`
already speak. Real tradeoff: Redpanda was originally chosen partly
for its lightweight single-binary footprint (`docker-compose.yml`
runs it with `--smp=1 --memory=1G --overprovisioned`, tuned for a
resource-constrained local/homelab deployment per `CLAUDE.md`'s
stated deployment targets); Kafka's JVM-based broker has a materially
larger minimum memory/startup footprint. This is a real regression
for the project's stated "docker-compose for local/homelab" use case,
not a drop-in swap with no cost.
3. **Stop bundling a pinned broker image at all.** `transport/` already
has no application code of its own — it's a thin `docker-compose`
wrapper and topic-provisioning script. Document Kafka-API
compatibility as the requirement and let the operator supply their
own broker (self-installed Apache Kafka, their own separately-licensed
Redpanda, or anything else wire-compatible). This moves the
redistribution question out of this project's own `docker-compose.yml`
entirely, at the cost of a rougher out-of-the-box local dev experience
(an extra manual setup step instead of `docker compose up`).
**Decision recorded 2026-08-16: option 1, accept as-is.** No code or
deployment change was made as a result — Redpanda stays pinned at
v24.2.7 in `docker-compose.yml`/`transport/`, under BSL 1.1, as a
disclosed and accepted risk rather than an unresolved one. This
decision should be revisited if the project's redistribution posture
changes materially (e.g. an official hosted/managed offering of Sentry
itself, which would make the third-party-SaaS reading in this section
Sentry's *own* situation rather than a hypothetical third party's).
## Non-license finding: `favicon.svg`
`web/src/lib/assets/favicon.svg` is SvelteKit's own default project
scaffold logo (`<title>svelte-logo</title>` — the `sv create`/`create-svelte`
starter icon), never replaced with an original mark during Phase 5's
redesign. Not a license-compatibility blocker — Svelte's own project
assets are MIT-licensed — but it's unauthored, third-party-branded
content shipping as this product's own favicon, caught by the same
"grep for anything that looks copied" pass this audit's task 1 asked
for. Recorded as an action item (replace with an original Sentry mark),
not a compliance blocker; not fixed here since it's a design task outside
this phase's scope, not a licensing one.
## Own license declarations (task 5)
**Before this audit**: no root `LICENSE` file existed anywhere in the
repo — not at the root, not in `enterprise/`. The only license
declarations were prose statements in `CLAUDE.md`/`docs/architecture.md`
and correct `license = "AGPL-3.0-only"` fields in the two Rust
workspaces' `Cargo.toml`s. `web/package.json` had no `license` field at
all (npm's tooling reported the package itself as `UNLICENSED` as a
result). `web/static/fonts/LICENSE.txt` was a paraphrase describing the
Overpass font's license, not the actual OFL-1.1 license text.
**Fixed**:
- Added `/LICENSE` — the verbatim, unmodified AGPLv3 text from
`gnu.org/licenses/agpl-3.0.txt`, byte-for-byte, not paraphrased.
- **Chosen convention, applied consistently**: one root `LICENSE` file
governs the whole monorepo, plus a `license` field in every ecosystem
manifest that supports one (`Cargo.toml`'s `license`/`license.workspace`,
now confirmed correct; `package.json`'s `license`, added:
`"AGPL-3.0-only"`). Go has no manifest-level license field — the
standard convention (and what `go-licenses` itself looks for) is the
root `LICENSE` file, which now exists. **Deliberately not** adopting
per-file SPDX header comments across the monorepo's several thousand
source files: headers are an FSF best-practice recommendation, not a
legal requirement once a correct root `LICENSE` plus copyright
ownership is established, and retrofitting them here would be a huge
mechanical change for very little incremental legal value over what's
now in place. Recorded as a deliberate choice, not left half-done.
- Corrected `web/static/fonts/LICENSE.txt` from a paraphrase to the
actual, complete, unmodified OFL-1.1 text (fetched from
`github.com/googlefonts/overpass`, the actual repository these font
files were fetched from per the file's own prior note) plus the
correct copyright statement, with the original context note (self-hosted
vs. CDN) preserved as a clearly separated project note, not mixed into
the license text itself.
- No accidental license mismatch from copied code was found — the
repo-wide attribution-marker grep in the methodology section came back
empty, and no vendored directories exist.
## `enterprise/` relicensing to AGPLv3 (task 6)
**This is a deliberate business-model choice, recorded plainly so it
isn't rediscovered as a surprise later**: the project is no longer
pursuing commercial-license revenue from the former `enterprise/`
features (SSO, multi-tenancy/RBAC, audit logging). As of Phase 6,
**anyone, including competitors, can legally self-host or fork those
features under AGPLv3's terms.** AGPLv3's source-sharing obligation
applies to network use (anyone interacting with a modified version over
a network is entitled to its source) — it does not impose any payment
obligation, and nothing in this project gates functionality behind a
license key or entitlement check.
**Confirmed no license-gating logic exists**: a repo-wide grep for
license-key/entitlement-check patterns (`license.?key`, `entitlement`,
`commercial.?key`, `paywall`, `IsLicensed`, and similar) across
`enterprise/`'s Go source returned zero hits. There was never a
functional paywall to remove — Phase 4's `enterprise/` split was always
an architectural/import-boundary separation, not a runtime license
check, so this task's "if any such gating exists, flag it explicitly, it
needs to come out" condition doesn't apply here — confirmed, not
assumed.
**Changes applied**:
- Every prose reference to `enterprise/` as "commercial license" or
"commercial-licensed" across the repo was updated. Present-tense
claims (code comments, `README.md` files describing current state,
`CLAUDE.md`'s non-negotiable constraints) were corrected outright.
Historical, phase-specific documents (`docs/phase-4-isolation-design.md`,
`docs/phase-4-rbac-design.md`, `docs/phase-4-runbook.md`, and the
relevant parts of `CLAUDE.md`'s and `docs/architecture.md`'s Phase 4
sections) were given forward-pointing corrections — "commercial
license at the time this was written; AGPLv3 as of Phase 6" — rather
than rewritten as if the commercial-license period never happened,
matching this project's existing convention for superseded claims
(e.g. Phase 3's `tenant_id` gap, corrected inline by Phase 4's section
rather than edited out of Phase 3's).
- `enterprise/README.md`, `enterprise/Dockerfile`,
`enterprise/cmd/enterprise-auth/main.go`: relicensing statement
corrected.
- `hack/check-tenant-boundary.sh` and every doc describing it
(`docs/architecture.md`, `docs/security/threat-model.md`, the two
`phase-4-*-design.md` docs): the import-boundary check **itself is
kept** — it still enforces a real, valuable architectural property
(core builds and deploys standalone with zero multi-tenant mechanism
present, tenant identity resolution stays server-side) — but every
description of *why* it exists was reframed from a licensing reason to
an architectural one, since both sides now carry the same license.
- Final repo-wide grep for `commercial` confirms every remaining
occurrence is one of the above corrections (explicitly framed as
historical/superseded), not a live claim. **No file in the repo claims
a license other than AGPLv3** for Sentry's own code, as of this audit.
## Ongoing enforcement (task 7)
`.github/workflows/license-compliance.yml` — this repo's **first** CI
workflow file (several docs already said "enforced in CI" about
`hack/check-tenant-boundary.sh`, but no CI system had actually been wired
up yet; fixed as part of this task rather than left as a second gap next
to the one this task asked about). Four jobs, one per ecosystem plus the
architectural boundary check, all real commands verified locally against
this repo before being written into the workflow (not guessed):
- **Rust**: `cargo-deny-action` running `cargo deny check licenses`
against `agent/deny.toml` and `search/deny.toml` — both verified
passing locally with the policy's real allow-list.
- **Go**: `go-licenses check ./... --allowed_licenses=...` per module
with real dependencies — verified passing locally for every listed
module, including the `segmentio/asm` and HashiCorp-MPL-2.0 cases.
- **npm**: `license-checker --onlyAllow "..."` — verified passing
locally.
- **Architectural boundary**: `hack/check-tenant-boundary.sh`, now
actually wired into CI instead of only documented as if it were.
Full policy, including exactly what's auto-allowed, what needs manual
review, and what's rejected outright: `/docs/compliance/license-policy.md`.
**Not verified**: the workflow YAML itself has not been run through a
real GitHub Actions execution in this environment (no way to trigger
that here) — every individual command it invokes was verified locally
with real exit codes, but the workflow file's syntax and job wiring
should be confirmed on the first real PR that triggers it, the same
"written but not run against the live thing" caveat this project applies
to its other CI-adjacent and Docker-gated claims.
## What's resolved vs. what's still open
Per the audit brief's explicit gate: this phase is not "done" while a
(c) or unresolved-(b) item has no recorded resolution. As of the
Redpanda decision below, every item has one.
| Item | Status |
|---|---|
| All 774 permissive/MPL-2.0/OR-resolved dependencies | **Resolved** — classification (a), no action needed. |
| `segmentio/asm` (Go) | **Resolved** — confirmed MIT-0, carried as a cited CI ignore. |
| `favicon.svg` | **Flagged, not a compliance blocker** — action item recorded (replace with an original mark), not license-gating. |
| Redpanda (BSL 1.1) | **Resolved** — decision recorded 2026-08-16: accept as-is (option 1). No code change; the BSL exposure is a disclosed, accepted risk, not an unresolved one. |
| `enterprise/` relicensing | **Resolved** — applied throughout the repo, confirmed via repo-wide grep. |
| Root `LICENSE` / manifest declarations | **Resolved** — added and corrected. |
| CI enforcement | **Resolved** — workflow written and every command verified locally; the workflow file itself untested end-to-end (disclosed above). |
**Every task-2 (c)/unresolved-(b) item now has an explicit resolution**
— fixed, isolated, or, for Redpanda, flagged and decided. Phase 6's exit
criteria in `CLAUDE.md` are updated accordingly.
## Legal disclaimer (repeated, deliberately)
This audit and the policy derived from it are a strong first pass — real
primary sources were checked for every named risk area and every
flagged item, not guessed from memory. They are not a substitute for
review by actual legal counsel, which is recommended before the project
is publicly released, pitched to customers, or used as the basis for any
compliance claim — particularly the open Redpanda question above, which
is exactly the kind of judgment call outside counsel exists to make.
+777
View File
@@ -0,0 +1,777 @@
component,dependency,version,license,direct_or_transitive,ecosystem,flagged,flag_reason,classification
api,github.com/ClickHouse/ch-go,(see go.sum),Apache-2.0,transitive,go,False,,a
api,github.com/ClickHouse/clickhouse-go/v2,(see go.sum),Apache-2.0,direct,go,False,,a
api,github.com/andybalholm/brotli,(see go.sum),MIT,transitive,go,False,,a
api,github.com/andybalholm/brotli/flate,(see go.sum),BSD-3-Clause,transitive,go,False,,a
api,github.com/cespare/xxhash/v2,(see go.sum),MIT,transitive,go,False,,a
api,github.com/go-faster/city,(see go.sum),MIT,transitive,go,False,,a
api,github.com/go-faster/errors,(see go.sum),BSD-3-Clause,transitive,go,False,,a
api,github.com/google/uuid,(see go.sum),BSD-3-Clause,direct,go,False,,a
api,github.com/jackc/pgpassfile,(see go.sum),MIT,transitive,go,False,,a
api,github.com/jackc/pgservicefile,(see go.sum),MIT,transitive,go,False,,a
api,github.com/jackc/pgx/v5,(see go.sum),MIT,transitive,go,False,,a
api,github.com/jackc/puddle/v2,(see go.sum),MIT,transitive,go,False,,a
api,github.com/klauspost/compress,(see go.sum),Apache-2.0,transitive,go,False,,a
api,github.com/klauspost/compress/internal/snapref,(see go.sum),BSD-3-Clause,transitive,go,False,,a
api,github.com/klauspost/compress/zstd/internal/xxhash,(see go.sum),MIT,transitive,go,False,,a
api,github.com/paulmach/orb,(see go.sum),MIT,transitive,go,False,,a
api,github.com/pierrec/lz4/v4,(see go.sum),BSD-3-Clause,transitive,go,False,,a
api,github.com/segmentio/asm/bswap,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
api,github.com/segmentio/asm/cpu,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
api,github.com/segmentio/asm/cpu/arm,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
api,github.com/segmentio/asm/cpu/arm64,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
api,github.com/segmentio/asm/cpu/cpuid,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
api,github.com/segmentio/asm/cpu/x86,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
api,github.com/shopspring/decimal,(see go.sum),MIT,transitive,go,False,,a
api,go.opentelemetry.io/otel,(see go.sum),Apache-2.0,transitive,go,False,,a
api,go.opentelemetry.io/otel/trace,(see go.sum),Apache-2.0,transitive,go,False,,a
api,golang.org/x/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
api,golang.org/x/sync/semaphore,(see go.sum),BSD-3-Clause,transitive,go,False,,a
api,golang.org/x/sys,(see go.sum),BSD-3-Clause,transitive,go,False,,a
api,golang.org/x/text,(see go.sum),BSD-3-Clause,transitive,go,False,,a
api,google.golang.org/genproto/googleapis/rpc/status,(see go.sum),Apache-2.0,transitive,go,False,,a
api,google.golang.org/grpc,(see go.sum),Apache-2.0,direct,go,False,,a
api,google.golang.org/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
ingest,github.com/ClickHouse/ch-go,(see go.sum),Apache-2.0,transitive,go,False,,a
ingest,github.com/ClickHouse/clickhouse-go/v2,(see go.sum),Apache-2.0,direct,go,False,,a
ingest,github.com/andybalholm/brotli,(see go.sum),MIT,transitive,go,False,,a
ingest,github.com/andybalholm/brotli/flate,(see go.sum),BSD-3-Clause,transitive,go,False,,a
ingest,github.com/cespare/xxhash/v2,(see go.sum),MIT,transitive,go,False,,a
ingest,github.com/go-faster/city,(see go.sum),MIT,transitive,go,False,,a
ingest,github.com/go-faster/errors,(see go.sum),BSD-3-Clause,transitive,go,False,,a
ingest,github.com/google/uuid,(see go.sum),BSD-3-Clause,direct,go,False,,a
ingest,github.com/klauspost/compress,(see go.sum),Apache-2.0,transitive,go,False,,a
ingest,github.com/klauspost/compress/internal/snapref,(see go.sum),BSD-3-Clause,transitive,go,False,,a
ingest,github.com/klauspost/compress/s2,(see go.sum),BSD-3-Clause,transitive,go,False,,a
ingest,github.com/klauspost/compress/snappy,(see go.sum),BSD-3-Clause,transitive,go,False,,a
ingest,github.com/klauspost/compress/zstd/internal/xxhash,(see go.sum),MIT,transitive,go,False,,a
ingest,github.com/paulmach/orb,(see go.sum),MIT,transitive,go,False,,a
ingest,github.com/pierrec/lz4/v4,(see go.sum),BSD-3-Clause,transitive,go,False,,a
ingest,github.com/segmentio/asm/bswap,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
ingest,github.com/segmentio/asm/cpu,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
ingest,github.com/segmentio/asm/cpu/arm,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
ingest,github.com/segmentio/asm/cpu/arm64,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
ingest,github.com/segmentio/asm/cpu/cpuid,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
ingest,github.com/segmentio/asm/cpu/x86,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
ingest,github.com/segmentio/kafka-go,(see go.sum),MIT,direct,go,False,,a
ingest,github.com/shopspring/decimal,(see go.sum),MIT,transitive,go,False,,a
ingest,go.opentelemetry.io/otel,(see go.sum),Apache-2.0,transitive,go,False,,a
ingest,go.opentelemetry.io/otel/trace,(see go.sum),Apache-2.0,transitive,go,False,,a
ingest,golang.org/x/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
ingest,golang.org/x/sync/errgroup,(see go.sum),BSD-3-Clause,direct,go,False,,a
ingest,golang.org/x/sys,(see go.sum),BSD-3-Clause,transitive,go,False,,a
ingest,golang.org/x/text,(see go.sum),BSD-3-Clause,transitive,go,False,,a
ingest,google.golang.org/genproto/googleapis/rpc/status,(see go.sum),Apache-2.0,transitive,go,False,,a
ingest,google.golang.org/grpc,(see go.sum),Apache-2.0,direct,go,False,,a
ingest,google.golang.org/protobuf,(see go.sum),BSD-3-Clause,direct,go,False,,a
enterprise,github.com/ClickHouse/ch-go,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,github.com/ClickHouse/clickhouse-go/v2,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,github.com/andybalholm/brotli,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/andybalholm/brotli/flate,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,github.com/beevik/etree,(see go.sum),BSD-2-Clause,transitive,go,False,,a
enterprise,github.com/cespare/xxhash/v2,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/coreos/go-oidc/v3/oidc,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,github.com/crewjam/saml,(see go.sum),BSD-2-Clause,transitive,go,False,,a
enterprise,github.com/davecgh/go-spew/spew,(see go.sum),ISC,transitive,go,False,,a
enterprise,github.com/emicklei/go-restful/v3,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/fxamacker/cbor/v2,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/go-faster/city,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/go-faster/errors,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,github.com/go-jose/go-jose/v4,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,github.com/go-jose/go-jose/v4/json,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,github.com/go-logr/logr,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,github.com/go-openapi/jsonpointer,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,github.com/go-openapi/jsonreference,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,github.com/go-openapi/swag,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,github.com/gogo/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,github.com/golang-jwt/jwt/v4,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/golang/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,github.com/google/gnostic-models,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,github.com/google/go-cmp/cmp,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,github.com/google/gofuzz,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,github.com/google/uuid,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,github.com/imdario/mergo,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,github.com/jackc/pgpassfile,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/jackc/pgservicefile,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/jackc/pgx/v5,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/jackc/puddle/v2,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/jonboulle/clockwork,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,github.com/josharian/intern,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/json-iterator/go,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/klauspost/compress,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,github.com/klauspost/compress/internal/snapref,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,github.com/klauspost/compress/s2,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,github.com/klauspost/compress/snappy,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,github.com/klauspost/compress/zstd/internal/xxhash,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/mailru/easyjson,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/mattermost/xml-roundtrip-validator,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,github.com/modern-go/concurrent,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,github.com/modern-go/reflect2,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,github.com/munnerz/goautoneg,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,github.com/paulmach/orb,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/pierrec/lz4/v4,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,github.com/russellhaering/goxmldsig,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,github.com/segmentio/asm/bswap,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
enterprise,github.com/segmentio/asm/cpu,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
enterprise,github.com/segmentio/asm/cpu/arm,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
enterprise,github.com/segmentio/asm/cpu/arm64,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
enterprise,github.com/segmentio/asm/cpu/cpuid,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
enterprise,github.com/segmentio/asm/cpu/x86,(see go.sum),"MIT-0 (declared as ""MIT No Attribution"" in LICENSE; SPDX MIT-0, permissive)",transitive,go,True,go-licenses reported Unknown; manually confirmed from module's LICENSE file,a
enterprise,github.com/segmentio/kafka-go,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/shopspring/decimal,(see go.sum),MIT,transitive,go,False,,a
enterprise,github.com/spf13/pflag,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,github.com/x448/float16,(see go.sum),MIT,transitive,go,False,,a
enterprise,go.opentelemetry.io/otel,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,go.opentelemetry.io/otel/trace,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,golang.org/x/crypto/ripemd160,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,golang.org/x/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,golang.org/x/oauth2,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,golang.org/x/sync,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,golang.org/x/sys,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,golang.org/x/term,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,golang.org/x/text,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,golang.org/x/time/rate,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,google.golang.org/genproto/googleapis/rpc/status,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,google.golang.org/grpc,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,google.golang.org/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,gopkg.in/inf.v0,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,gopkg.in/yaml.v2,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,gopkg.in/yaml.v3,(see go.sum),MIT,transitive,go,False,,a
enterprise,k8s.io/api,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,k8s.io/apimachinery/pkg,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,k8s.io/apimachinery/third_party/forked/golang/reflect,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,k8s.io/client-go,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,k8s.io/klog/v2,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,k8s.io/kube-openapi/pkg,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,k8s.io/kube-openapi/pkg/validation/spec,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,k8s.io/utils,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,k8s.io/utils/internal/third_party/forked/golang/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
enterprise,sigs.k8s.io/json,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,sigs.k8s.io/structured-merge-diff/v4,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,sigs.k8s.io/yaml,(see go.sum),Apache-2.0,transitive,go,False,,a
enterprise,sigs.k8s.io/yaml/goyaml.v2,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,github.com/beorn7/perks/quantile,(see go.sum),MIT,transitive,go,False,,a
deploy/operator,github.com/cespare/xxhash/v2,(see go.sum),MIT,transitive,go,False,,a
deploy/operator,github.com/davecgh/go-spew/spew,(see go.sum),ISC,transitive,go,False,,a
deploy/operator,github.com/emicklei/go-restful/v3,(see go.sum),MIT,transitive,go,False,,a
deploy/operator,github.com/evanphx/json-patch/v5,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,github.com/fxamacker/cbor/v2,(see go.sum),MIT,transitive,go,False,,a
deploy/operator,github.com/go-logr/logr,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,github.com/go-logr/zapr,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,github.com/go-openapi/jsonpointer,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,github.com/go-openapi/jsonreference,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,github.com/go-openapi/swag,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,github.com/gogo/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,github.com/golang/groupcache/lru,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,github.com/golang/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,github.com/google/gnostic-models,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,github.com/google/go-cmp/cmp,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,github.com/google/gofuzz,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,github.com/google/uuid,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,github.com/imdario/mergo,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,github.com/josharian/intern,(see go.sum),MIT,transitive,go,False,,a
deploy/operator,github.com/json-iterator/go,(see go.sum),MIT,transitive,go,False,,a
deploy/operator,github.com/mailru/easyjson,(see go.sum),MIT,transitive,go,False,,a
deploy/operator,github.com/modern-go/concurrent,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,github.com/modern-go/reflect2,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,github.com/munnerz/goautoneg,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,github.com/pkg/errors,(see go.sum),BSD-2-Clause,transitive,go,False,,a
deploy/operator,github.com/prometheus/client_golang/prometheus,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,github.com/prometheus/client_model/go,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,github.com/prometheus/common,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,github.com/prometheus/procfs,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,github.com/spf13/pflag,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,github.com/x448/float16,(see go.sum),MIT,transitive,go,False,,a
deploy/operator,go.uber.org/multierr,(see go.sum),MIT,transitive,go,False,,a
deploy/operator,go.uber.org/zap,(see go.sum),MIT,transitive,go,False,,a
deploy/operator,golang.org/x/exp/maps,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,golang.org/x/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,golang.org/x/oauth2,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,golang.org/x/sys/unix,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,golang.org/x/term,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,golang.org/x/text,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,golang.org/x/time/rate,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,gomodules.xyz/jsonpatch/v2,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,google.golang.org/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,gopkg.in/inf.v0,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,gopkg.in/yaml.v2,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,gopkg.in/yaml.v3,(see go.sum),MIT,transitive,go,False,,a
deploy/operator,k8s.io/api,(see go.sum),Apache-2.0,direct,go,False,,a
deploy/operator,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,k8s.io/apimachinery/pkg,(see go.sum),Apache-2.0,direct,go,False,,a
deploy/operator,k8s.io/apimachinery/third_party/forked/golang,(see go.sum),BSD-3-Clause,direct,go,False,,a
deploy/operator,k8s.io/client-go,(see go.sum),Apache-2.0,direct,go,False,,a
deploy/operator,k8s.io/klog/v2,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,k8s.io/kube-openapi/pkg,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,k8s.io/kube-openapi/pkg/validation/spec,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,k8s.io/utils,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,k8s.io/utils/internal/third_party/forked/golang/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
deploy/operator,sigs.k8s.io/controller-runtime,(see go.sum),Apache-2.0,direct,go,False,,a
deploy/operator,sigs.k8s.io/json,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,sigs.k8s.io/structured-merge-diff/v4,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,sigs.k8s.io/yaml,(see go.sum),Apache-2.0,transitive,go,False,,a
deploy/operator,sigs.k8s.io/yaml/goyaml.v2,(see go.sum),Apache-2.0,transitive,go,False,,a
terraform,github.com/fatih/color,(see go.sum),MIT,transitive,go,False,,a
terraform,github.com/golang/protobuf/ptypes/empty,(see go.sum),BSD-3-Clause,transitive,go,False,,a
terraform,github.com/hashicorp/go-hclog,(see go.sum),MIT,transitive,go,False,,a
terraform,github.com/hashicorp/go-plugin,(see go.sum),MPL-2.0,transitive,go,True,"MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block",a
terraform,github.com/hashicorp/go-uuid,(see go.sum),MPL-2.0,transitive,go,True,"MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block",a
terraform,github.com/hashicorp/terraform-plugin-framework,(see go.sum),MPL-2.0,direct,go,True,"MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block",a
terraform,github.com/hashicorp/terraform-plugin-go,(see go.sum),MPL-2.0,direct,go,True,"MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block",a
terraform,github.com/hashicorp/terraform-plugin-log,(see go.sum),MPL-2.0,transitive,go,True,"MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block",a
terraform,github.com/hashicorp/terraform-registry-address,(see go.sum),MPL-2.0,transitive,go,True,"MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block",a
terraform,github.com/hashicorp/terraform-svchost,(see go.sum),MPL-2.0,transitive,go,True,"MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block",a
terraform,github.com/hashicorp/yamux,(see go.sum),MPL-2.0,transitive,go,True,"MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block",a
terraform,github.com/mattn/go-colorable,(see go.sum),MIT,transitive,go,False,,a
terraform,github.com/mattn/go-isatty,(see go.sum),MIT,transitive,go,False,,a
terraform,github.com/mitchellh/go-testing-interface,(see go.sum),MIT,transitive,go,False,,a
terraform,github.com/oklog/run,(see go.sum),Apache-2.0,transitive,go,False,,a
terraform,github.com/vmihailenco/msgpack/v5,(see go.sum),BSD-2-Clause,transitive,go,False,,a
terraform,github.com/vmihailenco/tagparser/v2,(see go.sum),BSD-2-Clause,transitive,go,False,,a
terraform,golang.org/x/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
terraform,golang.org/x/sys/unix,(see go.sum),BSD-3-Clause,transitive,go,False,,a
terraform,golang.org/x/text,(see go.sum),BSD-3-Clause,transitive,go,False,,a
terraform,google.golang.org/genproto/googleapis/rpc/status,(see go.sum),Apache-2.0,transitive,go,False,,a
terraform,google.golang.org/grpc,(see go.sum),Apache-2.0,transitive,go,False,,a
terraform,google.golang.org/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
proto,golang.org/x/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
proto,golang.org/x/sys/unix,(see go.sum),BSD-3-Clause,transitive,go,False,,a
proto,golang.org/x/text,(see go.sum),BSD-3-Clause,transitive,go,False,,a
proto,google.golang.org/genproto/googleapis/rpc/status,(see go.sum),Apache-2.0,transitive,go,False,,a
proto,google.golang.org/grpc,(see go.sum),Apache-2.0,direct,go,False,,a
proto,google.golang.org/protobuf,(see go.sum),BSD-3-Clause,direct,go,False,,a
hack/benchmark-fixture,golang.org/x/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
hack/benchmark-fixture,golang.org/x/sys/unix,(see go.sum),BSD-3-Clause,transitive,go,False,,a
hack/benchmark-fixture,golang.org/x/text,(see go.sum),BSD-3-Clause,transitive,go,False,,a
hack/benchmark-fixture,google.golang.org/genproto/googleapis/rpc/status,(see go.sum),Apache-2.0,transitive,go,False,,a
hack/benchmark-fixture,google.golang.org/grpc,(see go.sum),Apache-2.0,direct,go,False,,a
hack/benchmark-fixture,google.golang.org/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
hack/windows-fixture,golang.org/x/net,(see go.sum),BSD-3-Clause,transitive,go,False,,a
hack/windows-fixture,golang.org/x/sys/unix,(see go.sum),BSD-3-Clause,transitive,go,False,,a
hack/windows-fixture,golang.org/x/text,(see go.sum),BSD-3-Clause,transitive,go,False,,a
hack/windows-fixture,google.golang.org/genproto/googleapis/rpc/status,(see go.sum),Apache-2.0,transitive,go,False,,a
hack/windows-fixture,google.golang.org/grpc,(see go.sum),Apache-2.0,direct,go,False,,a
hack/windows-fixture,google.golang.org/protobuf,(see go.sum),BSD-3-Clause,transitive,go,False,,a
web,@codemirror/autocomplete,6.20.3,MIT,direct,npm,False,,a
web,@codemirror/commands,6.10.4,MIT,direct,npm,False,,a
web,@codemirror/language,6.12.4,MIT,direct,npm,False,,a
web,@codemirror/state,6.7.1,MIT,direct,npm,False,,a
web,@codemirror/view,6.43.8,MIT,direct,npm,False,,a
web,@jridgewell/gen-mapping,0.3.13,MIT,transitive,npm,False,,a
web,@jridgewell/remapping,2.3.5,MIT,transitive,npm,False,,a
web,@jridgewell/resolve-uri,3.1.2,MIT,transitive,npm,False,,a
web,@jridgewell/sourcemap-codec,1.5.5,MIT,transitive,npm,False,,a
web,@jridgewell/trace-mapping,0.3.31,MIT,transitive,npm,False,,a
web,@lezer/common,1.5.2,MIT,transitive,npm,False,,a
web,@lezer/highlight,1.2.3,MIT,transitive,npm,False,,a
web,@lezer/lr,1.4.10,MIT,transitive,npm,False,,a
web,@marijn/find-cluster-break,1.0.3,MIT,transitive,npm,False,,a
web,@oxc-project/types,0.144.0,MIT,transitive,npm,False,,a
web,@polka/url,1.0.0-next.29,MIT,transitive,npm,False,,a
web,@rolldown/binding-linux-x64-gnu,1.2.4,MIT,transitive,npm,False,,a
web,@rolldown/pluginutils,1.0.1,MIT,transitive,npm,False,,a
web,@standard-schema/spec,1.1.0,MIT,transitive,npm,False,,a
web,@sveltejs/acorn-typescript,1.0.13,MIT,transitive,npm,False,,a
web,@sveltejs/adapter-static,3.0.10,MIT,direct,npm,False,,a
web,@sveltejs/kit,2.70.2,MIT,direct,npm,False,,a
web,@sveltejs/load-config,0.2.3,MIT,transitive,npm,False,,a
web,@sveltejs/vite-plugin-svelte,7.3.0,MIT,direct,npm,False,,a
web,@types/cookie,0.6.0,MIT,transitive,npm,False,,a
web,@types/estree,1.0.9,MIT,transitive,npm,False,,a
web,@types/trusted-types,2.0.7,MIT,transitive,npm,False,,a
web,acorn,8.18.0,MIT,transitive,npm,False,,a
web,aria-query,5.3.1,Apache-2.0,transitive,npm,False,,a
web,axe-core,4.13.0,MPL-2.0,direct,npm,True,"MPL-2.0: file-level copyleft, generally fine as a dependency per policy -- flagged for explicit citation, not because it's expected to block",a
web,axobject-query,4.1.0,Apache-2.0,transitive,npm,False,,a
web,chokidar,4.0.3,MIT,transitive,npm,False,,a
web,clsx,2.1.1,MIT,transitive,npm,False,,a
web,cookie,0.6.0,MIT,transitive,npm,False,,a
web,crelt,1.0.7,MIT,transitive,npm,False,,a
web,deepmerge,4.3.1,MIT,transitive,npm,False,,a
web,detect-libc,2.1.2,Apache-2.0,transitive,npm,False,,a
web,devalue,5.9.0,MIT,transitive,npm,False,,a
web,echarts,6.1.0,Apache-2.0,direct,npm,False,,a
web,esm-env,1.2.2,MIT,transitive,npm,False,,a
web,esrap,2.3.2,MIT,transitive,npm,False,,a
web,fdir,6.5.0,MIT,transitive,npm,False,,a
web,gridstack,11.5.1,MIT,direct,npm,False,,a
web,is-reference,3.0.3,MIT,transitive,npm,False,,a
web,kleur,4.1.5,MIT,transitive,npm,False,,a
web,lightningcss-linux-x64-gnu,1.33.0,MPL-2.0,transitive,npm,True,"MPL-2.0: file-level copyleft, generally fine as a dependency per policy -- flagged for explicit citation, not because it's expected to block",a
web,lightningcss,1.33.0,MPL-2.0,transitive,npm,True,"MPL-2.0: file-level copyleft, generally fine as a dependency per policy -- flagged for explicit citation, not because it's expected to block",a
web,locate-character,3.0.0,MIT,transitive,npm,False,,a
web,magic-string,0.30.21,MIT,transitive,npm,False,,a
web,magic-string,1.2.0,MIT,transitive,npm,False,,a
web,mri,1.2.0,MIT,transitive,npm,False,,a
web,mrmime,2.0.1,MIT,transitive,npm,False,,a
web,nanoid,3.3.18,MIT,transitive,npm,False,,a
web,obug,2.1.4,MIT,transitive,npm,False,,a
web,picocolors,1.1.1,ISC,transitive,npm,False,,a
web,picomatch,4.0.5,MIT,transitive,npm,False,,a
web,postcss,8.5.26,MIT,transitive,npm,False,,a
web,readdirp,4.1.2,MIT,transitive,npm,False,,a
web,rolldown,1.2.4,MIT,transitive,npm,False,,a
web,sade,1.8.1,MIT,transitive,npm,False,,a
web,set-cookie-parser,3.1.2,MIT,transitive,npm,False,,a
web,sirv,3.0.2,MIT,transitive,npm,False,,a
web,source-map-js,1.2.1,BSD-3-Clause,transitive,npm,False,,a
web,style-mod,4.1.3,MIT,transitive,npm,False,,a
web,svelte-check,4.7.6,MIT,direct,npm,False,,a
web,svelte,5.56.9,MIT,direct,npm,False,,a
web,tinyglobby,0.2.17,MIT,transitive,npm,False,,a
web,totalist,3.0.1,MIT,transitive,npm,False,,a
web,tslib,2.3.0,0BSD,transitive,npm,False,,a
web,typescript,6.0.3,Apache-2.0,direct,npm,False,,a
web,vite,8.2.1,MIT,direct,npm,False,,a
web,vitefu,1.1.3,MIT,transitive,npm,False,,a
web,w3c-keyname,2.2.8,MIT,transitive,npm,False,,a
web,zimmerframe,1.1.4,MIT,transitive,npm,False,,a
web,zrender,6.1.0,BSD-3-Clause,transitive,npm,False,,a
agent,anstream,1.0.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,anstyle,1.0.14,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,anstyle-parse,1.0.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,anstyle-query,1.1.5,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,anstyle-wincon,3.0.11,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,anyhow,1.0.104,Apache-2.0 OR MIT,direct,rust,False,,a
agent,async-stream,0.3.6,MIT,transitive,rust,False,,a
agent,async-stream-impl,0.3.6,MIT,transitive,rust,False,,a
agent,async-trait,0.1.92,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,atomic-waker,1.1.2,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,autocfg,1.5.1,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,axum,0.7.9,MIT,transitive,rust,False,,a
agent,axum-core,0.4.5,MIT,transitive,rust,False,,a
agent,base64,0.22.1,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,bitflags,2.13.1,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,bytes,1.12.1,MIT,transitive,rust,False,,a
agent,cc,1.4.2,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,cfg-if,1.0.4,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,clap,4.6.6,Apache-2.0 OR MIT,direct,rust,False,,a
agent,clap_builder,4.6.6,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,clap_derive,4.6.4,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,clap_lex,1.1.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,colorchoice,1.0.5,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,either,1.17.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,equivalent,1.0.2,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,errno,0.3.14,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,fastrand,2.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,find-msvc-tools,0.1.10,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,fixedbitset,0.5.7,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,fnv,1.0.7,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,futures-channel,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,futures-core,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,futures-sink,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,futures-task,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,futures-util,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,getrandom,0.2.17,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,getrandom,0.4.3,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,h2,0.4.15,MIT,transitive,rust,False,,a
agent,hashbrown,0.12.3,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,hashbrown,0.17.1,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,heck,0.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,http,1.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,http-body,1.1.0,MIT,transitive,rust,False,,a
agent,http-body-util,0.1.5,MIT,transitive,rust,False,,a
agent,httparse,1.10.1,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,httpdate,1.0.3,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,hyper,1.11.0,MIT,transitive,rust,False,,a
agent,hyper-timeout,0.5.2,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,hyper-util,0.1.20,MIT,transitive,rust,False,,a
agent,indexmap,1.9.3,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,indexmap,2.14.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,is_terminal_polyfill,1.70.2,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,itertools,0.14.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,itoa,1.0.18,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,lazy_static,1.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,libc,0.2.189,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,linux-raw-sys,0.12.1,Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT,transitive,rust,False,,a
agent,log,0.4.33,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,matchers,0.2.0,MIT,transitive,rust,False,,a
agent,matchit,0.7.3,BSD-3-Clause OR MIT,transitive,rust,False,,a
agent,memchr,2.8.3,MIT OR Unlicense,transitive,rust,False,,a
agent,mime,0.3.17,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,mio,1.2.2,MIT,transitive,rust,False,,a
agent,multimap,0.10.1,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,nu-ansi-term,0.50.3,MIT,transitive,rust,False,,a
agent,once_cell,1.21.4,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,once_cell_polyfill,1.70.2,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,percent-encoding,2.3.2,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,petgraph,0.7.1,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,pin-project,1.1.13,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,pin-project-internal,1.1.13,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,pin-project-lite,0.2.17,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,ppv-lite86,0.2.21,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,prettyplease,0.2.37,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,proc-macro2,1.0.107,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,prost,0.13.5,Apache-2.0,direct,rust,False,,a
agent,prost-build,0.13.5,Apache-2.0,transitive,rust,False,,a
agent,prost-derive,0.13.5,Apache-2.0,transitive,rust,False,,a
agent,prost-types,0.13.5,Apache-2.0,transitive,rust,False,,a
agent,quick-xml,0.36.2,MIT,direct,rust,False,,a
agent,quote,1.0.47,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,r-efi,6.0.0,Apache-2.0 OR LGPL-2.1-or-later OR MIT,transitive,rust,True,carries a copyleft/less-common license alongside permissive alternatives (SPDX OR) -- see classification,a
agent,rand,0.8.7,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,rand_chacha,0.3.1,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,rand_core,0.6.4,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,regex,1.13.1,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,regex-automata,0.4.18,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,regex-syntax,0.8.11,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,ring,0.17.14,Apache-2.0 OR ISC,transitive,rust,False,,a
agent,rustix,1.1.4,Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT,transitive,rust,False,,a
agent,rustls,0.23.43,Apache-2.0 OR ISC OR MIT,transitive,rust,False,,a
agent,rustls-pemfile,2.2.0,Apache-2.0 OR ISC OR MIT,transitive,rust,False,,a
agent,rustls-pki-types,1.15.1,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,rustls-webpki,0.103.14,ISC,transitive,rust,False,,a
agent,rustversion,1.0.23,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,serde,1.0.229,Apache-2.0 OR MIT,direct,rust,False,,a
agent,serde_core,1.0.229,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,serde_derive,1.0.229,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,serde_json,1.0.151,Apache-2.0 OR MIT,direct,rust,False,,a
agent,serde_spanned,0.6.9,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,sharded-slab,0.1.7,MIT,transitive,rust,False,,a
agent,shlex,2.0.1,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,signal-hook-registry,1.4.8,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,slab,0.4.12,MIT,transitive,rust,False,,a
agent,smallvec,1.15.2,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,socket2,0.5.10,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,socket2,0.6.5,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,strsim,0.11.1,MIT,transitive,rust,False,,a
agent,subtle,2.6.1,BSD-3-Clause,transitive,rust,False,,a
agent,syn,2.0.119,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,syn,3.0.3,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,sync_wrapper,1.0.2,Apache-2.0,transitive,rust,False,,a
agent,tempfile,3.27.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,thread_local,1.1.10,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,tokio,1.53.1,MIT,direct,rust,False,,a
agent,tokio-macros,2.7.2,MIT,transitive,rust,False,,a
agent,tokio-rustls,0.26.4,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,tokio-stream,0.1.19,MIT,transitive,rust,False,,a
agent,tokio-util,0.7.19,MIT,transitive,rust,False,,a
agent,toml,0.8.23,Apache-2.0 OR MIT,direct,rust,False,,a
agent,toml_datetime,0.6.11,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,toml_edit,0.22.27,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,toml_write,0.1.2,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,tonic,0.12.3,MIT,direct,rust,False,,a
agent,tonic-build,0.12.3,MIT,direct,rust,False,,a
agent,tower,0.4.13,MIT,transitive,rust,False,,a
agent,tower,0.5.3,MIT,transitive,rust,False,,a
agent,tower-layer,0.3.3,MIT,transitive,rust,False,,a
agent,tower-service,0.3.3,MIT,transitive,rust,False,,a
agent,tracing,0.1.44,MIT,direct,rust,False,,a
agent,tracing-attributes,0.1.31,MIT,transitive,rust,False,,a
agent,tracing-core,0.1.36,MIT,transitive,rust,False,,a
agent,tracing-log,0.2.0,MIT,transitive,rust,False,,a
agent,tracing-subscriber,0.3.23,MIT,direct,rust,False,,a
agent,try-lock,0.2.5,MIT,transitive,rust,False,,a
agent,unicode-ident,1.0.24,Apache-2.0 OR MIT OR Unicode-3.0,transitive,rust,False,,a
agent,untrusted,0.9.0,ISC,transitive,rust,False,,a
agent,utf8parse,0.2.2,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,want,0.3.1,MIT,transitive,rust,False,,a
agent,wasi,0.11.1+wasi-snapshot-preview1,Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT,transitive,rust,False,,a
agent,widestring,1.2.1,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows,0.58.0,Apache-2.0 OR MIT,direct,rust,False,,a
agent,windows-core,0.58.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows-implement,0.58.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows-interface,0.58.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows-link,0.2.1,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows-result,0.2.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows-service,0.7.0,Apache-2.0 OR MIT,direct,rust,False,,a
agent,windows-strings,0.1.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows-sys,0.52.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows-sys,0.61.2,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows-targets,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows_aarch64_gnullvm,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows_aarch64_msvc,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows_i686_gnu,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows_i686_gnullvm,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows_i686_msvc,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows_x86_64_gnu,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows_x86_64_gnullvm,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,windows_x86_64_msvc,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,winnow,0.7.15,MIT,transitive,rust,False,,a
agent,zerocopy,0.8.56,Apache-2.0 OR BSD-2-Clause OR MIT,transitive,rust,False,,a
agent,zeroize,1.9.0,Apache-2.0 OR MIT,transitive,rust,False,,a
agent,zmij,1.0.23,MIT,transitive,rust,False,,a
search,adler2,2.0.1,0BSD OR Apache-2.0 OR MIT,transitive,rust,False,,a
search,aho-corasick,1.1.5,MIT OR Unlicense,transitive,rust,False,,a
search,allocator-api2,0.2.21,Apache-2.0 OR MIT,transitive,rust,False,,a
search,anyhow,1.0.104,Apache-2.0 OR MIT,direct,rust,False,,a
search,arc-swap,1.9.2,Apache-2.0 OR MIT,transitive,rust,False,,a
search,async-stream,0.3.6,MIT,transitive,rust,False,,a
search,async-stream-impl,0.3.6,MIT,transitive,rust,False,,a
search,async-trait,0.1.92,Apache-2.0 OR MIT,transitive,rust,False,,a
search,atomic-waker,1.1.2,Apache-2.0 OR MIT,transitive,rust,False,,a
search,autocfg,1.5.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,axum,0.7.9,MIT,transitive,rust,False,,a
search,axum-core,0.4.5,MIT,transitive,rust,False,,a
search,base64,0.22.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,bitflags,2.13.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,bitpacking,0.9.3,MIT,transitive,rust,False,,a
search,block-buffer,0.10.4,Apache-2.0 OR MIT,transitive,rust,False,,a
search,bumpalo,3.20.3,Apache-2.0 OR MIT,transitive,rust,False,,a
search,byteorder,1.5.0,MIT OR Unlicense,transitive,rust,False,,a
search,bytes,1.12.1,MIT,transitive,rust,False,,a
search,cc,1.4.2,Apache-2.0 OR MIT,transitive,rust,False,,a
search,census,0.4.2,MIT,transitive,rust,False,,a
search,cfg-if,1.0.4,Apache-2.0 OR MIT,transitive,rust,False,,a
search,chrono,0.4.45,Apache-2.0 OR MIT,transitive,rust,False,,a
search,cpufeatures,0.2.17,Apache-2.0 OR MIT,transitive,rust,False,,a
search,crc32c,0.6.8,Apache-2.0 OR MIT,transitive,rust,False,,a
search,crc32fast,1.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,crossbeam-channel,0.5.16,Apache-2.0 OR MIT,transitive,rust,False,,a
search,crossbeam-deque,0.8.7,Apache-2.0 OR MIT,transitive,rust,False,,a
search,crossbeam-epoch,0.9.20,Apache-2.0 OR MIT,transitive,rust,False,,a
search,crossbeam-utils,0.8.22,Apache-2.0 OR MIT,transitive,rust,False,,a
search,crunchy,0.2.4,MIT,transitive,rust,False,,a
search,crypto-common,0.1.7,Apache-2.0 OR MIT,transitive,rust,False,,a
search,deranged,0.5.8,Apache-2.0 OR MIT,transitive,rust,False,,a
search,digest,0.10.7,Apache-2.0 OR MIT,transitive,rust,False,,a
search,displaydoc,0.2.7,Apache-2.0 OR MIT,transitive,rust,False,,a
search,downcast-rs,1.2.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,either,1.17.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,equivalent,1.0.2,Apache-2.0 OR MIT,transitive,rust,False,,a
search,errno,0.3.14,Apache-2.0 OR MIT,transitive,rust,False,,a
search,fastdivide,0.4.2,MIT OR zlib-acknowledgement,transitive,rust,True,carries a copyleft/less-common license alongside permissive alternatives (SPDX OR) -- see classification,a
search,fastrand,2.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,find-msvc-tools,0.1.10,Apache-2.0 OR MIT,transitive,rust,False,,a
search,fixedbitset,0.5.7,Apache-2.0 OR MIT,transitive,rust,False,,a
search,flate2,1.1.9,Apache-2.0 OR MIT,transitive,rust,False,,a
search,fnv,1.0.7,Apache-2.0 OR MIT,transitive,rust,False,,a
search,foldhash,0.1.5,Zlib,transitive,rust,False,,a
search,form_urlencoded,1.2.2,Apache-2.0 OR MIT,transitive,rust,False,,a
search,fs4,0.8.4,Apache-2.0 OR MIT,transitive,rust,False,,a
search,futures,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
search,futures-channel,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
search,futures-core,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
search,futures-executor,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
search,futures-io,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
search,futures-macro,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
search,futures-sink,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
search,futures-task,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
search,futures-util,0.3.34,Apache-2.0 OR MIT,transitive,rust,False,,a
search,generic-array,0.14.7,MIT,transitive,rust,False,,a
search,getrandom,0.2.17,Apache-2.0 OR MIT,transitive,rust,False,,a
search,getrandom,0.4.3,Apache-2.0 OR MIT,transitive,rust,False,,a
search,h2,0.4.15,MIT,transitive,rust,False,,a
search,hashbrown,0.12.3,Apache-2.0 OR MIT,transitive,rust,False,,a
search,hashbrown,0.15.5,Apache-2.0 OR MIT,transitive,rust,False,,a
search,hashbrown,0.17.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,heck,0.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,hermit-abi,0.5.2,Apache-2.0 OR MIT,transitive,rust,False,,a
search,hmac,0.12.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,htmlescape,0.3.1,Apache-2.0 OR MIT OR MPL-2.0,transitive,rust,True,carries a copyleft/less-common license alongside permissive alternatives (SPDX OR) -- see classification,a
search,http,1.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,http-body,1.1.0,MIT,transitive,rust,False,,a
search,http-body-util,0.1.5,MIT,transitive,rust,False,,a
search,httparse,1.10.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,httpdate,1.0.3,Apache-2.0 OR MIT,transitive,rust,False,,a
search,hyper,1.11.0,MIT,transitive,rust,False,,a
search,hyper-timeout,0.5.2,Apache-2.0 OR MIT,transitive,rust,False,,a
search,hyper-util,0.1.20,MIT,transitive,rust,False,,a
search,icu_collections,2.3.0,Unicode-3.0,transitive,rust,False,,a
search,icu_locale_core,2.3.0,Unicode-3.0,transitive,rust,False,,a
search,icu_normalizer,2.3.0,Unicode-3.0,transitive,rust,False,,a
search,icu_normalizer_data,2.3.0,Unicode-3.0,transitive,rust,False,,a
search,icu_properties,2.3.0,Unicode-3.0,transitive,rust,False,,a
search,icu_properties_data,2.3.0,Unicode-3.0,transitive,rust,False,,a
search,icu_provider,2.3.0,Unicode-3.0,transitive,rust,False,,a
search,idna,1.1.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,idna_adapter,1.2.2,Apache-2.0 OR MIT,transitive,rust,False,,a
search,indexmap,1.9.3,Apache-2.0 OR MIT,transitive,rust,False,,a
search,indexmap,2.14.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,instant,0.1.13,BSD-3-Clause,transitive,rust,False,,a
search,integer-encoding,4.1.0,MIT,transitive,rust,False,,a
search,ipnet,2.12.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,itertools,0.12.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,itertools,0.14.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,itoa,1.0.18,Apache-2.0 OR MIT,transitive,rust,False,,a
search,jobserver,0.1.35,Apache-2.0 OR MIT,transitive,rust,False,,a
search,js-sys,0.3.104,Apache-2.0 OR MIT,transitive,rust,False,,a
search,lazy_static,1.5.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,levenshtein_automata,0.2.1,MIT,transitive,rust,False,,a
search,libc,0.2.189,Apache-2.0 OR MIT,transitive,rust,False,,a
search,libm,0.2.16,MIT,transitive,rust,False,,a
search,linux-raw-sys,0.12.1,Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT,transitive,rust,False,,a
search,linux-raw-sys,0.4.15,Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT,transitive,rust,False,,a
search,litemap,0.8.3,Unicode-3.0,transitive,rust,False,,a
search,lock_api,0.4.14,Apache-2.0 OR MIT,transitive,rust,False,,a
search,log,0.4.33,Apache-2.0 OR MIT,transitive,rust,False,,a
search,lru,0.12.5,MIT,transitive,rust,False,,a
search,lz4,1.28.1,MIT,transitive,rust,False,,a
search,lz4-sys,1.11.1+lz4-1.10.0,MIT,transitive,rust,False,,a
search,lz4_flex,0.11.6,MIT,transitive,rust,False,,a
search,matchers,0.2.0,MIT,transitive,rust,False,,a
search,matchit,0.7.3,BSD-3-Clause OR MIT,transitive,rust,False,,a
search,measure_time,0.8.3,MIT,transitive,rust,False,,a
search,memchr,2.8.3,MIT OR Unlicense,transitive,rust,False,,a
search,memmap2,0.9.11,Apache-2.0 OR MIT,transitive,rust,False,,a
search,mime,0.3.17,Apache-2.0 OR MIT,transitive,rust,False,,a
search,minimal-lexical,0.2.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,miniz_oxide,0.8.9,Apache-2.0 OR MIT OR Zlib,transitive,rust,False,,a
search,mio,1.2.2,MIT,transitive,rust,False,,a
search,multimap,0.10.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,murmurhash32,0.3.1,MIT,transitive,rust,False,,a
search,nom,7.1.3,MIT,transitive,rust,False,,a
search,nu-ansi-term,0.50.3,MIT,transitive,rust,False,,a
search,num-conv,0.2.2,Apache-2.0 OR MIT,transitive,rust,False,,a
search,num-traits,0.2.19,Apache-2.0 OR MIT,transitive,rust,False,,a
search,num_cpus,1.17.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,once_cell,1.21.4,Apache-2.0 OR MIT,transitive,rust,False,,a
search,oneshot,0.1.13,Apache-2.0 OR MIT,transitive,rust,False,,a
search,ownedbytes,0.7.0,MIT,transitive,rust,False,,a
search,parking_lot,0.12.5,Apache-2.0 OR MIT,transitive,rust,False,,a
search,parking_lot_core,0.9.12,Apache-2.0 OR MIT,transitive,rust,False,,a
search,pbkdf2,0.12.2,Apache-2.0 OR MIT,transitive,rust,False,,a
search,percent-encoding,2.3.2,Apache-2.0 OR MIT,transitive,rust,False,,a
search,petgraph,0.7.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,pin-project,1.1.13,Apache-2.0 OR MIT,transitive,rust,False,,a
search,pin-project-internal,1.1.13,Apache-2.0 OR MIT,transitive,rust,False,,a
search,pin-project-lite,0.2.17,Apache-2.0 OR MIT,transitive,rust,False,,a
search,pkg-config,0.3.33,Apache-2.0 OR MIT,transitive,rust,False,,a
search,potential_utf,0.1.6,Unicode-3.0,transitive,rust,False,,a
search,powerfmt,0.2.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,ppv-lite86,0.2.21,Apache-2.0 OR MIT,transitive,rust,False,,a
search,prettyplease,0.2.37,Apache-2.0 OR MIT,transitive,rust,False,,a
search,proc-macro2,1.0.107,Apache-2.0 OR MIT,transitive,rust,False,,a
search,prost,0.13.5,Apache-2.0,direct,rust,False,,a
search,prost-build,0.13.5,Apache-2.0,transitive,rust,False,,a
search,prost-derive,0.13.5,Apache-2.0,transitive,rust,False,,a
search,prost-types,0.13.5,Apache-2.0,transitive,rust,False,,a
search,quote,1.0.47,Apache-2.0 OR MIT,transitive,rust,False,,a
search,r-efi,6.0.0,Apache-2.0 OR LGPL-2.1-or-later OR MIT,transitive,rust,True,carries a copyleft/less-common license alongside permissive alternatives (SPDX OR) -- see classification,a
search,rand,0.8.7,Apache-2.0 OR MIT,transitive,rust,False,,a
search,rand_chacha,0.3.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,rand_core,0.6.4,Apache-2.0 OR MIT,transitive,rust,False,,a
search,rand_distr,0.4.3,Apache-2.0 OR MIT,transitive,rust,False,,a
search,rayon,1.12.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,rayon-core,1.13.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,redox_syscall,0.5.18,MIT,transitive,rust,False,,a
search,regex,1.13.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,regex-automata,0.4.18,Apache-2.0 OR MIT,transitive,rust,False,,a
search,regex-syntax,0.8.11,Apache-2.0 OR MIT,transitive,rust,False,,a
search,reqwest,0.12.28,Apache-2.0 OR MIT,direct,rust,False,,a
search,rsasl,2.3.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,rskafka,0.6.0,Apache-2.0 OR MIT,direct,rust,False,,a
search,rust-stemmers,1.2.0,BSD-3-Clause OR MIT,transitive,rust,False,,a
search,rustc-hash,1.1.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,rustc_version,0.4.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,rustix,0.38.44,Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT,transitive,rust,False,,a
search,rustix,1.1.4,Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT,transitive,rust,False,,a
search,rustversion,1.0.23,Apache-2.0 OR MIT,transitive,rust,False,,a
search,ryu,1.0.23,Apache-2.0 OR BSL-1.0,transitive,rust,True,carries a copyleft/less-common license alongside permissive alternatives (SPDX OR) -- see classification,a
search,scopeguard,1.2.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,semver,1.0.28,Apache-2.0 OR MIT,transitive,rust,False,,a
search,serde,1.0.229,Apache-2.0 OR MIT,direct,rust,False,,a
search,serde_core,1.0.229,Apache-2.0 OR MIT,transitive,rust,False,,a
search,serde_derive,1.0.229,Apache-2.0 OR MIT,transitive,rust,False,,a
search,serde_json,1.0.151,Apache-2.0 OR MIT,direct,rust,False,,a
search,serde_urlencoded,0.7.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,sha2,0.10.9,Apache-2.0 OR MIT,transitive,rust,False,,a
search,sharded-slab,0.1.7,MIT,transitive,rust,False,,a
search,shlex,2.0.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,signal-hook-registry,1.4.8,Apache-2.0 OR MIT,transitive,rust,False,,a
search,simd-adler32,0.3.10,MIT,transitive,rust,False,,a
search,sketches-ddsketch,0.2.2,Apache-2.0,transitive,rust,False,,a
search,slab,0.4.12,MIT,transitive,rust,False,,a
search,smallvec,1.15.2,Apache-2.0 OR MIT,transitive,rust,False,,a
search,snap,1.1.2,BSD-3-Clause,transitive,rust,False,,a
search,socket2,0.5.10,Apache-2.0 OR MIT,transitive,rust,False,,a
search,socket2,0.6.5,Apache-2.0 OR MIT,transitive,rust,False,,a
search,stable_deref_trait,1.2.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,stringprep,0.1.5,Apache-2.0 OR MIT,transitive,rust,False,,a
search,subtle,2.6.1,BSD-3-Clause,transitive,rust,False,,a
search,syn,2.0.119,Apache-2.0 OR MIT,transitive,rust,False,,a
search,syn,3.0.3,Apache-2.0 OR MIT,transitive,rust,False,,a
search,sync_wrapper,1.0.2,Apache-2.0,transitive,rust,False,,a
search,synstructure,0.13.2,MIT,transitive,rust,False,,a
search,tantivy,0.22.1,MIT,direct,rust,False,,a
search,tantivy-bitpacker,0.6.0,MIT,transitive,rust,False,,a
search,tantivy-columnar,0.3.0,MIT,transitive,rust,False,,a
search,tantivy-common,0.7.0,MIT,transitive,rust,False,,a
search,tantivy-fst,0.5.0,MIT OR Unlicense,transitive,rust,False,,a
search,tantivy-query-grammar,0.22.0,MIT,transitive,rust,False,,a
search,tantivy-sstable,0.3.0,MIT,transitive,rust,False,,a
search,tantivy-stacker,0.3.0,MIT,transitive,rust,False,,a
search,tantivy-tokenizer-api,0.3.0,MIT,transitive,rust,False,,a
search,tempfile,3.27.0,Apache-2.0 OR MIT,direct,rust,False,,a
search,thiserror,1.0.69,Apache-2.0 OR MIT,transitive,rust,False,,a
search,thiserror,2.0.20,Apache-2.0 OR MIT,transitive,rust,False,,a
search,thiserror-impl,1.0.69,Apache-2.0 OR MIT,transitive,rust,False,,a
search,thiserror-impl,2.0.20,Apache-2.0 OR MIT,transitive,rust,False,,a
search,thread_local,1.1.10,Apache-2.0 OR MIT,transitive,rust,False,,a
search,time,0.3.55,Apache-2.0 OR MIT,transitive,rust,False,,a
search,time-core,0.1.9,Apache-2.0 OR MIT,transitive,rust,False,,a
search,tinystr,0.8.4,Unicode-3.0,transitive,rust,False,,a
search,tinyvec,1.12.0,Apache-2.0 OR MIT OR Zlib,transitive,rust,False,,a
search,tinyvec_macros,0.1.1,Apache-2.0 OR MIT OR Zlib,transitive,rust,False,,a
search,tokio,1.53.1,MIT,direct,rust,False,,a
search,tokio-macros,2.7.2,MIT,transitive,rust,False,,a
search,tokio-stream,0.1.19,MIT,transitive,rust,False,,a
search,tokio-util,0.7.19,MIT,transitive,rust,False,,a
search,tonic,0.12.3,MIT,direct,rust,False,,a
search,tonic-build,0.12.3,MIT,direct,rust,False,,a
search,tower,0.4.13,MIT,transitive,rust,False,,a
search,tower,0.5.3,MIT,transitive,rust,False,,a
search,tower-http,0.6.11,MIT,transitive,rust,False,,a
search,tower-layer,0.3.3,MIT,transitive,rust,False,,a
search,tower-service,0.3.3,MIT,transitive,rust,False,,a
search,tracing,0.1.44,MIT,direct,rust,False,,a
search,tracing-attributes,0.1.31,MIT,transitive,rust,False,,a
search,tracing-core,0.1.36,MIT,transitive,rust,False,,a
search,tracing-log,0.2.0,MIT,transitive,rust,False,,a
search,tracing-subscriber,0.3.23,MIT,direct,rust,False,,a
search,try-lock,0.2.5,MIT,transitive,rust,False,,a
search,typenum,1.20.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,unicode-bidi,0.3.18,Apache-2.0 OR MIT,transitive,rust,False,,a
search,unicode-ident,1.0.24,Apache-2.0 OR MIT OR Unicode-3.0,transitive,rust,False,,a
search,unicode-normalization,0.1.25,Apache-2.0 OR MIT,transitive,rust,False,,a
search,unicode-properties,0.1.4,Apache-2.0 OR MIT,transitive,rust,False,,a
search,url,2.5.8,Apache-2.0 OR MIT,transitive,rust,False,,a
search,utf8-ranges,1.0.5,MIT OR Unlicense,transitive,rust,False,,a
search,utf8_iter,1.0.4,Apache-2.0 OR MIT,transitive,rust,False,,a
search,uuid,1.24.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,version_check,0.9.5,Apache-2.0 OR MIT,transitive,rust,False,,a
search,want,0.3.1,MIT,transitive,rust,False,,a
search,wasi,0.11.1+wasi-snapshot-preview1,Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT,transitive,rust,False,,a
search,wasm-bindgen,0.2.127,Apache-2.0 OR MIT,transitive,rust,False,,a
search,wasm-bindgen-futures,0.4.77,Apache-2.0 OR MIT,transitive,rust,False,,a
search,wasm-bindgen-macro,0.2.127,Apache-2.0 OR MIT,transitive,rust,False,,a
search,wasm-bindgen-macro-support,0.2.127,Apache-2.0 OR MIT,transitive,rust,False,,a
search,wasm-bindgen-shared,0.2.127,Apache-2.0 OR MIT,transitive,rust,False,,a
search,web-sys,0.3.104,Apache-2.0 OR MIT,transitive,rust,False,,a
search,winapi,0.3.9,Apache-2.0 OR MIT,transitive,rust,False,,a
search,winapi-i686-pc-windows-gnu,0.4.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,winapi-x86_64-pc-windows-gnu,0.4.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,windows-link,0.2.1,Apache-2.0 OR MIT,transitive,rust,False,,a
search,windows-sys,0.52.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,windows-sys,0.59.0,Apache-2.0 OR MIT,transitive,rust,False,,a
search,windows-sys,0.61.2,Apache-2.0 OR MIT,transitive,rust,False,,a
search,windows-targets,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
search,windows_aarch64_gnullvm,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
search,windows_aarch64_msvc,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
search,windows_i686_gnu,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
search,windows_i686_gnullvm,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
search,windows_i686_msvc,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
search,windows_x86_64_gnu,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
search,windows_x86_64_gnullvm,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
search,windows_x86_64_msvc,0.52.6,Apache-2.0 OR MIT,transitive,rust,False,,a
search,writeable,0.6.4,Unicode-3.0,transitive,rust,False,,a
search,yoke,0.8.3,Unicode-3.0,transitive,rust,False,,a
search,yoke-derive,0.8.2,Unicode-3.0,transitive,rust,False,,a
search,zerocopy,0.8.56,Apache-2.0 OR BSD-2-Clause OR MIT,transitive,rust,False,,a
search,zerofrom,0.1.8,Unicode-3.0,transitive,rust,False,,a
search,zerofrom-derive,0.1.7,Unicode-3.0,transitive,rust,False,,a
search,zerotrie,0.2.5,Unicode-3.0,transitive,rust,False,,a
search,zerovec,0.11.7,Unicode-3.0,transitive,rust,False,,a
search,zerovec-derive,0.11.4,Unicode-3.0,transitive,rust,False,,a
search,zmij,1.0.23,MIT,transitive,rust,False,,a
search,zstd,0.13.3,MIT,transitive,rust,False,,a
search,zstd-safe,7.2.4,Apache-2.0 OR MIT,transitive,rust,False,,a
search,zstd-sys,2.0.16+zstd.1.5.7,Apache-2.0 OR MIT,transitive,rust,False,,a
web,Overpass (font),variable,OFL-1.1,direct,font-asset,False,,a
web,Overpass Mono (font),variable,OFL-1.1,direct,font-asset,False,,a
web,favicon.svg,n/a,MIT (Svelte project asset),direct,vendored-asset,True,"Copied from SvelteKit's default project scaffold (<title>svelte-logo</title>), never replaced with an original mark -- not a license-compatibility blocker (Svelte's own assets are MIT) but is unauthored, unattributed, third-party branded content shipping as this product's own favicon. Flagged for replacement, not a legal blocker.",n/a-branding
transport,redpanda (docker image),v24.2.7,"BSL 1.1 (Business Source License) for Redpanda Core, as pinned (v24.2.7, released 2024-10-11) -- NOT yet converted to Apache-2.0 (4-year Change Date is ~2028-10-11). Source-available, not OSI-approved open source. Additional Use Grant permits any use except offering it as a hosted 'Streaming or Queuing Service' to third parties.",direct,docker-image,True,"Category (c): BSL is explicitly source-available, not OSI-approved open source, per the audit's own classification framework. Verified against the actual licenses/bsl.md at the v24.2.7 tag, not assumed. No AGPL linking-compatibility issue (Redpanda is consumed only over the Kafka wire protocol, never linked into Sentry's own code -- same relationship as ClickHouse/Postgres). Real open question: whether a third party self-hosting Sentry (now fully AGPLv3 per task 6) 'as a service' would trip BSL's Streaming-or-Queuing-Service restriction on the bundled Redpanda image -- Sentry's ingest pipeline creates fixed internal topics, not per-end-user topics, so this is very likely NOT a Streaming-or-Queuing-Service under BSL's own definition, but this is a business/redistribution judgment call, not a pure technical one -- flagged for your decision, not resolved unilaterally. See license-audit-report.md's Redpanda section for the three remediation options (accept as-is / swap to Apache Kafka / flag only). RESOLVED 2026-08-16 (business decision): accept as-is. Sentry's own use (internal Kafka-protocol transport, no resale of broker access) is within BSL's Additional Use Grant; the third-party self-hosting-as-a-service question was judged unlikely to trip BSL's Streaming-or-Queuing-Service restriction, and was accepted as a known, disclosed risk rather than swapping to a heavier broker or dropping the bundled image. See license-audit-report.md's Redpanda section.",c
storage,clickhouse-server (docker image),24.8,"Apache-2.0, confirmed directly against ClickHouse's LICENSE file. No evidence of any historical license change (unlike Redpanda/Elastic/MongoDB) -- confirmed via web search plus direct file fetch, not assumed from general reputation.",direct,docker-image,False,,a
metadata,postgres (docker image),16-alpine,"PostgreSQL License (OSI-approved, MIT/BSD-equivalent permissive terms), confirmed directly against the official postgres/postgres COPYRIGHT file.",direct,docker-image,False,,a
1 component dependency version license direct_or_transitive ecosystem flagged flag_reason classification
2 api github.com/ClickHouse/ch-go (see go.sum) Apache-2.0 transitive go False a
3 api github.com/ClickHouse/clickhouse-go/v2 (see go.sum) Apache-2.0 direct go False a
4 api github.com/andybalholm/brotli (see go.sum) MIT transitive go False a
5 api github.com/andybalholm/brotli/flate (see go.sum) BSD-3-Clause transitive go False a
6 api github.com/cespare/xxhash/v2 (see go.sum) MIT transitive go False a
7 api github.com/go-faster/city (see go.sum) MIT transitive go False a
8 api github.com/go-faster/errors (see go.sum) BSD-3-Clause transitive go False a
9 api github.com/google/uuid (see go.sum) BSD-3-Clause direct go False a
10 api github.com/jackc/pgpassfile (see go.sum) MIT transitive go False a
11 api github.com/jackc/pgservicefile (see go.sum) MIT transitive go False a
12 api github.com/jackc/pgx/v5 (see go.sum) MIT transitive go False a
13 api github.com/jackc/puddle/v2 (see go.sum) MIT transitive go False a
14 api github.com/klauspost/compress (see go.sum) Apache-2.0 transitive go False a
15 api github.com/klauspost/compress/internal/snapref (see go.sum) BSD-3-Clause transitive go False a
16 api github.com/klauspost/compress/zstd/internal/xxhash (see go.sum) MIT transitive go False a
17 api github.com/paulmach/orb (see go.sum) MIT transitive go False a
18 api github.com/pierrec/lz4/v4 (see go.sum) BSD-3-Clause transitive go False a
19 api github.com/segmentio/asm/bswap (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
20 api github.com/segmentio/asm/cpu (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
21 api github.com/segmentio/asm/cpu/arm (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
22 api github.com/segmentio/asm/cpu/arm64 (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
23 api github.com/segmentio/asm/cpu/cpuid (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
24 api github.com/segmentio/asm/cpu/x86 (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
25 api github.com/shopspring/decimal (see go.sum) MIT transitive go False a
26 api go.opentelemetry.io/otel (see go.sum) Apache-2.0 transitive go False a
27 api go.opentelemetry.io/otel/trace (see go.sum) Apache-2.0 transitive go False a
28 api golang.org/x/net (see go.sum) BSD-3-Clause transitive go False a
29 api golang.org/x/sync/semaphore (see go.sum) BSD-3-Clause transitive go False a
30 api golang.org/x/sys (see go.sum) BSD-3-Clause transitive go False a
31 api golang.org/x/text (see go.sum) BSD-3-Clause transitive go False a
32 api google.golang.org/genproto/googleapis/rpc/status (see go.sum) Apache-2.0 transitive go False a
33 api google.golang.org/grpc (see go.sum) Apache-2.0 direct go False a
34 api google.golang.org/protobuf (see go.sum) BSD-3-Clause transitive go False a
35 ingest github.com/ClickHouse/ch-go (see go.sum) Apache-2.0 transitive go False a
36 ingest github.com/ClickHouse/clickhouse-go/v2 (see go.sum) Apache-2.0 direct go False a
37 ingest github.com/andybalholm/brotli (see go.sum) MIT transitive go False a
38 ingest github.com/andybalholm/brotli/flate (see go.sum) BSD-3-Clause transitive go False a
39 ingest github.com/cespare/xxhash/v2 (see go.sum) MIT transitive go False a
40 ingest github.com/go-faster/city (see go.sum) MIT transitive go False a
41 ingest github.com/go-faster/errors (see go.sum) BSD-3-Clause transitive go False a
42 ingest github.com/google/uuid (see go.sum) BSD-3-Clause direct go False a
43 ingest github.com/klauspost/compress (see go.sum) Apache-2.0 transitive go False a
44 ingest github.com/klauspost/compress/internal/snapref (see go.sum) BSD-3-Clause transitive go False a
45 ingest github.com/klauspost/compress/s2 (see go.sum) BSD-3-Clause transitive go False a
46 ingest github.com/klauspost/compress/snappy (see go.sum) BSD-3-Clause transitive go False a
47 ingest github.com/klauspost/compress/zstd/internal/xxhash (see go.sum) MIT transitive go False a
48 ingest github.com/paulmach/orb (see go.sum) MIT transitive go False a
49 ingest github.com/pierrec/lz4/v4 (see go.sum) BSD-3-Clause transitive go False a
50 ingest github.com/segmentio/asm/bswap (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
51 ingest github.com/segmentio/asm/cpu (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
52 ingest github.com/segmentio/asm/cpu/arm (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
53 ingest github.com/segmentio/asm/cpu/arm64 (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
54 ingest github.com/segmentio/asm/cpu/cpuid (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
55 ingest github.com/segmentio/asm/cpu/x86 (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
56 ingest github.com/segmentio/kafka-go (see go.sum) MIT direct go False a
57 ingest github.com/shopspring/decimal (see go.sum) MIT transitive go False a
58 ingest go.opentelemetry.io/otel (see go.sum) Apache-2.0 transitive go False a
59 ingest go.opentelemetry.io/otel/trace (see go.sum) Apache-2.0 transitive go False a
60 ingest golang.org/x/net (see go.sum) BSD-3-Clause transitive go False a
61 ingest golang.org/x/sync/errgroup (see go.sum) BSD-3-Clause direct go False a
62 ingest golang.org/x/sys (see go.sum) BSD-3-Clause transitive go False a
63 ingest golang.org/x/text (see go.sum) BSD-3-Clause transitive go False a
64 ingest google.golang.org/genproto/googleapis/rpc/status (see go.sum) Apache-2.0 transitive go False a
65 ingest google.golang.org/grpc (see go.sum) Apache-2.0 direct go False a
66 ingest google.golang.org/protobuf (see go.sum) BSD-3-Clause direct go False a
67 enterprise github.com/ClickHouse/ch-go (see go.sum) Apache-2.0 transitive go False a
68 enterprise github.com/ClickHouse/clickhouse-go/v2 (see go.sum) Apache-2.0 transitive go False a
69 enterprise github.com/andybalholm/brotli (see go.sum) MIT transitive go False a
70 enterprise github.com/andybalholm/brotli/flate (see go.sum) BSD-3-Clause transitive go False a
71 enterprise github.com/beevik/etree (see go.sum) BSD-2-Clause transitive go False a
72 enterprise github.com/cespare/xxhash/v2 (see go.sum) MIT transitive go False a
73 enterprise github.com/coreos/go-oidc/v3/oidc (see go.sum) Apache-2.0 transitive go False a
74 enterprise github.com/crewjam/saml (see go.sum) BSD-2-Clause transitive go False a
75 enterprise github.com/davecgh/go-spew/spew (see go.sum) ISC transitive go False a
76 enterprise github.com/emicklei/go-restful/v3 (see go.sum) MIT transitive go False a
77 enterprise github.com/fxamacker/cbor/v2 (see go.sum) MIT transitive go False a
78 enterprise github.com/go-faster/city (see go.sum) MIT transitive go False a
79 enterprise github.com/go-faster/errors (see go.sum) BSD-3-Clause transitive go False a
80 enterprise github.com/go-jose/go-jose/v4 (see go.sum) Apache-2.0 transitive go False a
81 enterprise github.com/go-jose/go-jose/v4/json (see go.sum) BSD-3-Clause transitive go False a
82 enterprise github.com/go-logr/logr (see go.sum) Apache-2.0 transitive go False a
83 enterprise github.com/go-openapi/jsonpointer (see go.sum) Apache-2.0 transitive go False a
84 enterprise github.com/go-openapi/jsonreference (see go.sum) Apache-2.0 transitive go False a
85 enterprise github.com/go-openapi/swag (see go.sum) Apache-2.0 transitive go False a
86 enterprise github.com/gogo/protobuf (see go.sum) BSD-3-Clause transitive go False a
87 enterprise github.com/golang-jwt/jwt/v4 (see go.sum) MIT transitive go False a
88 enterprise github.com/golang/protobuf (see go.sum) BSD-3-Clause transitive go False a
89 enterprise github.com/google/gnostic-models (see go.sum) Apache-2.0 transitive go False a
90 enterprise github.com/google/go-cmp/cmp (see go.sum) BSD-3-Clause transitive go False a
91 enterprise github.com/google/gofuzz (see go.sum) Apache-2.0 transitive go False a
92 enterprise github.com/google/uuid (see go.sum) BSD-3-Clause transitive go False a
93 enterprise github.com/imdario/mergo (see go.sum) BSD-3-Clause transitive go False a
94 enterprise github.com/jackc/pgpassfile (see go.sum) MIT transitive go False a
95 enterprise github.com/jackc/pgservicefile (see go.sum) MIT transitive go False a
96 enterprise github.com/jackc/pgx/v5 (see go.sum) MIT transitive go False a
97 enterprise github.com/jackc/puddle/v2 (see go.sum) MIT transitive go False a
98 enterprise github.com/jonboulle/clockwork (see go.sum) Apache-2.0 transitive go False a
99 enterprise github.com/josharian/intern (see go.sum) MIT transitive go False a
100 enterprise github.com/json-iterator/go (see go.sum) MIT transitive go False a
101 enterprise github.com/klauspost/compress (see go.sum) Apache-2.0 transitive go False a
102 enterprise github.com/klauspost/compress/internal/snapref (see go.sum) BSD-3-Clause transitive go False a
103 enterprise github.com/klauspost/compress/s2 (see go.sum) BSD-3-Clause transitive go False a
104 enterprise github.com/klauspost/compress/snappy (see go.sum) BSD-3-Clause transitive go False a
105 enterprise github.com/klauspost/compress/zstd/internal/xxhash (see go.sum) MIT transitive go False a
106 enterprise github.com/mailru/easyjson (see go.sum) MIT transitive go False a
107 enterprise github.com/mattermost/xml-roundtrip-validator (see go.sum) Apache-2.0 transitive go False a
108 enterprise github.com/modern-go/concurrent (see go.sum) Apache-2.0 transitive go False a
109 enterprise github.com/modern-go/reflect2 (see go.sum) Apache-2.0 transitive go False a
110 enterprise github.com/munnerz/goautoneg (see go.sum) BSD-3-Clause transitive go False a
111 enterprise github.com/paulmach/orb (see go.sum) MIT transitive go False a
112 enterprise github.com/pierrec/lz4/v4 (see go.sum) BSD-3-Clause transitive go False a
113 enterprise github.com/russellhaering/goxmldsig (see go.sum) Apache-2.0 transitive go False a
114 enterprise github.com/segmentio/asm/bswap (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
115 enterprise github.com/segmentio/asm/cpu (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
116 enterprise github.com/segmentio/asm/cpu/arm (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
117 enterprise github.com/segmentio/asm/cpu/arm64 (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
118 enterprise github.com/segmentio/asm/cpu/cpuid (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
119 enterprise github.com/segmentio/asm/cpu/x86 (see go.sum) MIT-0 (declared as "MIT No Attribution" in LICENSE; SPDX MIT-0, permissive) transitive go True go-licenses reported Unknown; manually confirmed from module's LICENSE file a
120 enterprise github.com/segmentio/kafka-go (see go.sum) MIT transitive go False a
121 enterprise github.com/shopspring/decimal (see go.sum) MIT transitive go False a
122 enterprise github.com/spf13/pflag (see go.sum) BSD-3-Clause transitive go False a
123 enterprise github.com/x448/float16 (see go.sum) MIT transitive go False a
124 enterprise go.opentelemetry.io/otel (see go.sum) Apache-2.0 transitive go False a
125 enterprise go.opentelemetry.io/otel/trace (see go.sum) Apache-2.0 transitive go False a
126 enterprise golang.org/x/crypto/ripemd160 (see go.sum) BSD-3-Clause transitive go False a
127 enterprise golang.org/x/net (see go.sum) BSD-3-Clause transitive go False a
128 enterprise golang.org/x/oauth2 (see go.sum) BSD-3-Clause transitive go False a
129 enterprise golang.org/x/sync (see go.sum) BSD-3-Clause transitive go False a
130 enterprise golang.org/x/sys (see go.sum) BSD-3-Clause transitive go False a
131 enterprise golang.org/x/term (see go.sum) BSD-3-Clause transitive go False a
132 enterprise golang.org/x/text (see go.sum) BSD-3-Clause transitive go False a
133 enterprise golang.org/x/time/rate (see go.sum) BSD-3-Clause transitive go False a
134 enterprise google.golang.org/genproto/googleapis/rpc/status (see go.sum) Apache-2.0 transitive go False a
135 enterprise google.golang.org/grpc (see go.sum) Apache-2.0 transitive go False a
136 enterprise google.golang.org/protobuf (see go.sum) BSD-3-Clause transitive go False a
137 enterprise gopkg.in/inf.v0 (see go.sum) BSD-3-Clause transitive go False a
138 enterprise gopkg.in/yaml.v2 (see go.sum) Apache-2.0 transitive go False a
139 enterprise gopkg.in/yaml.v3 (see go.sum) MIT transitive go False a
140 enterprise k8s.io/api (see go.sum) Apache-2.0 transitive go False a
141 enterprise k8s.io/apimachinery/pkg (see go.sum) Apache-2.0 transitive go False a
142 enterprise k8s.io/apimachinery/third_party/forked/golang/reflect (see go.sum) BSD-3-Clause transitive go False a
143 enterprise k8s.io/client-go (see go.sum) Apache-2.0 transitive go False a
144 enterprise k8s.io/klog/v2 (see go.sum) Apache-2.0 transitive go False a
145 enterprise k8s.io/kube-openapi/pkg (see go.sum) Apache-2.0 transitive go False a
146 enterprise k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json (see go.sum) BSD-3-Clause transitive go False a
147 enterprise k8s.io/kube-openapi/pkg/validation/spec (see go.sum) Apache-2.0 transitive go False a
148 enterprise k8s.io/utils (see go.sum) Apache-2.0 transitive go False a
149 enterprise k8s.io/utils/internal/third_party/forked/golang/net (see go.sum) BSD-3-Clause transitive go False a
150 enterprise sigs.k8s.io/json (see go.sum) Apache-2.0 transitive go False a
151 enterprise sigs.k8s.io/structured-merge-diff/v4 (see go.sum) Apache-2.0 transitive go False a
152 enterprise sigs.k8s.io/yaml (see go.sum) Apache-2.0 transitive go False a
153 enterprise sigs.k8s.io/yaml/goyaml.v2 (see go.sum) Apache-2.0 transitive go False a
154 deploy/operator github.com/beorn7/perks/quantile (see go.sum) MIT transitive go False a
155 deploy/operator github.com/cespare/xxhash/v2 (see go.sum) MIT transitive go False a
156 deploy/operator github.com/davecgh/go-spew/spew (see go.sum) ISC transitive go False a
157 deploy/operator github.com/emicklei/go-restful/v3 (see go.sum) MIT transitive go False a
158 deploy/operator github.com/evanphx/json-patch/v5 (see go.sum) BSD-3-Clause transitive go False a
159 deploy/operator github.com/fxamacker/cbor/v2 (see go.sum) MIT transitive go False a
160 deploy/operator github.com/go-logr/logr (see go.sum) Apache-2.0 transitive go False a
161 deploy/operator github.com/go-logr/zapr (see go.sum) Apache-2.0 transitive go False a
162 deploy/operator github.com/go-openapi/jsonpointer (see go.sum) Apache-2.0 transitive go False a
163 deploy/operator github.com/go-openapi/jsonreference (see go.sum) Apache-2.0 transitive go False a
164 deploy/operator github.com/go-openapi/swag (see go.sum) Apache-2.0 transitive go False a
165 deploy/operator github.com/gogo/protobuf (see go.sum) BSD-3-Clause transitive go False a
166 deploy/operator github.com/golang/groupcache/lru (see go.sum) Apache-2.0 transitive go False a
167 deploy/operator github.com/golang/protobuf (see go.sum) BSD-3-Clause transitive go False a
168 deploy/operator github.com/google/gnostic-models (see go.sum) Apache-2.0 transitive go False a
169 deploy/operator github.com/google/go-cmp/cmp (see go.sum) BSD-3-Clause transitive go False a
170 deploy/operator github.com/google/gofuzz (see go.sum) Apache-2.0 transitive go False a
171 deploy/operator github.com/google/uuid (see go.sum) BSD-3-Clause transitive go False a
172 deploy/operator github.com/imdario/mergo (see go.sum) BSD-3-Clause transitive go False a
173 deploy/operator github.com/josharian/intern (see go.sum) MIT transitive go False a
174 deploy/operator github.com/json-iterator/go (see go.sum) MIT transitive go False a
175 deploy/operator github.com/mailru/easyjson (see go.sum) MIT transitive go False a
176 deploy/operator github.com/modern-go/concurrent (see go.sum) Apache-2.0 transitive go False a
177 deploy/operator github.com/modern-go/reflect2 (see go.sum) Apache-2.0 transitive go False a
178 deploy/operator github.com/munnerz/goautoneg (see go.sum) BSD-3-Clause transitive go False a
179 deploy/operator github.com/pkg/errors (see go.sum) BSD-2-Clause transitive go False a
180 deploy/operator github.com/prometheus/client_golang/prometheus (see go.sum) Apache-2.0 transitive go False a
181 deploy/operator github.com/prometheus/client_model/go (see go.sum) Apache-2.0 transitive go False a
182 deploy/operator github.com/prometheus/common (see go.sum) Apache-2.0 transitive go False a
183 deploy/operator github.com/prometheus/procfs (see go.sum) Apache-2.0 transitive go False a
184 deploy/operator github.com/spf13/pflag (see go.sum) BSD-3-Clause transitive go False a
185 deploy/operator github.com/x448/float16 (see go.sum) MIT transitive go False a
186 deploy/operator go.uber.org/multierr (see go.sum) MIT transitive go False a
187 deploy/operator go.uber.org/zap (see go.sum) MIT transitive go False a
188 deploy/operator golang.org/x/exp/maps (see go.sum) BSD-3-Clause transitive go False a
189 deploy/operator golang.org/x/net (see go.sum) BSD-3-Clause transitive go False a
190 deploy/operator golang.org/x/oauth2 (see go.sum) BSD-3-Clause transitive go False a
191 deploy/operator golang.org/x/sys/unix (see go.sum) BSD-3-Clause transitive go False a
192 deploy/operator golang.org/x/term (see go.sum) BSD-3-Clause transitive go False a
193 deploy/operator golang.org/x/text (see go.sum) BSD-3-Clause transitive go False a
194 deploy/operator golang.org/x/time/rate (see go.sum) BSD-3-Clause transitive go False a
195 deploy/operator gomodules.xyz/jsonpatch/v2 (see go.sum) Apache-2.0 transitive go False a
196 deploy/operator google.golang.org/protobuf (see go.sum) BSD-3-Clause transitive go False a
197 deploy/operator gopkg.in/inf.v0 (see go.sum) BSD-3-Clause transitive go False a
198 deploy/operator gopkg.in/yaml.v2 (see go.sum) Apache-2.0 transitive go False a
199 deploy/operator gopkg.in/yaml.v3 (see go.sum) MIT transitive go False a
200 deploy/operator k8s.io/api (see go.sum) Apache-2.0 direct go False a
201 deploy/operator k8s.io/apiextensions-apiserver/pkg/apis/apiextensions (see go.sum) Apache-2.0 transitive go False a
202 deploy/operator k8s.io/apimachinery/pkg (see go.sum) Apache-2.0 direct go False a
203 deploy/operator k8s.io/apimachinery/third_party/forked/golang (see go.sum) BSD-3-Clause direct go False a
204 deploy/operator k8s.io/client-go (see go.sum) Apache-2.0 direct go False a
205 deploy/operator k8s.io/klog/v2 (see go.sum) Apache-2.0 transitive go False a
206 deploy/operator k8s.io/kube-openapi/pkg (see go.sum) Apache-2.0 transitive go False a
207 deploy/operator k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json (see go.sum) BSD-3-Clause transitive go False a
208 deploy/operator k8s.io/kube-openapi/pkg/validation/spec (see go.sum) Apache-2.0 transitive go False a
209 deploy/operator k8s.io/utils (see go.sum) Apache-2.0 transitive go False a
210 deploy/operator k8s.io/utils/internal/third_party/forked/golang/net (see go.sum) BSD-3-Clause transitive go False a
211 deploy/operator sigs.k8s.io/controller-runtime (see go.sum) Apache-2.0 direct go False a
212 deploy/operator sigs.k8s.io/json (see go.sum) Apache-2.0 transitive go False a
213 deploy/operator sigs.k8s.io/structured-merge-diff/v4 (see go.sum) Apache-2.0 transitive go False a
214 deploy/operator sigs.k8s.io/yaml (see go.sum) Apache-2.0 transitive go False a
215 deploy/operator sigs.k8s.io/yaml/goyaml.v2 (see go.sum) Apache-2.0 transitive go False a
216 terraform github.com/fatih/color (see go.sum) MIT transitive go False a
217 terraform github.com/golang/protobuf/ptypes/empty (see go.sum) BSD-3-Clause transitive go False a
218 terraform github.com/hashicorp/go-hclog (see go.sum) MIT transitive go False a
219 terraform github.com/hashicorp/go-plugin (see go.sum) MPL-2.0 transitive go True MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block a
220 terraform github.com/hashicorp/go-uuid (see go.sum) MPL-2.0 transitive go True MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block a
221 terraform github.com/hashicorp/terraform-plugin-framework (see go.sum) MPL-2.0 direct go True MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block a
222 terraform github.com/hashicorp/terraform-plugin-go (see go.sum) MPL-2.0 direct go True MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block a
223 terraform github.com/hashicorp/terraform-plugin-log (see go.sum) MPL-2.0 transitive go True MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block a
224 terraform github.com/hashicorp/terraform-registry-address (see go.sum) MPL-2.0 transitive go True MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block a
225 terraform github.com/hashicorp/terraform-svchost (see go.sum) MPL-2.0 transitive go True MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block a
226 terraform github.com/hashicorp/yamux (see go.sum) MPL-2.0 transitive go True MPL-2.0: flagged for explicit per-item citation per policy, not because it's expected to block a
227 terraform github.com/mattn/go-colorable (see go.sum) MIT transitive go False a
228 terraform github.com/mattn/go-isatty (see go.sum) MIT transitive go False a
229 terraform github.com/mitchellh/go-testing-interface (see go.sum) MIT transitive go False a
230 terraform github.com/oklog/run (see go.sum) Apache-2.0 transitive go False a
231 terraform github.com/vmihailenco/msgpack/v5 (see go.sum) BSD-2-Clause transitive go False a
232 terraform github.com/vmihailenco/tagparser/v2 (see go.sum) BSD-2-Clause transitive go False a
233 terraform golang.org/x/net (see go.sum) BSD-3-Clause transitive go False a
234 terraform golang.org/x/sys/unix (see go.sum) BSD-3-Clause transitive go False a
235 terraform golang.org/x/text (see go.sum) BSD-3-Clause transitive go False a
236 terraform google.golang.org/genproto/googleapis/rpc/status (see go.sum) Apache-2.0 transitive go False a
237 terraform google.golang.org/grpc (see go.sum) Apache-2.0 transitive go False a
238 terraform google.golang.org/protobuf (see go.sum) BSD-3-Clause transitive go False a
239 proto golang.org/x/net (see go.sum) BSD-3-Clause transitive go False a
240 proto golang.org/x/sys/unix (see go.sum) BSD-3-Clause transitive go False a
241 proto golang.org/x/text (see go.sum) BSD-3-Clause transitive go False a
242 proto google.golang.org/genproto/googleapis/rpc/status (see go.sum) Apache-2.0 transitive go False a
243 proto google.golang.org/grpc (see go.sum) Apache-2.0 direct go False a
244 proto google.golang.org/protobuf (see go.sum) BSD-3-Clause direct go False a
245 hack/benchmark-fixture golang.org/x/net (see go.sum) BSD-3-Clause transitive go False a
246 hack/benchmark-fixture golang.org/x/sys/unix (see go.sum) BSD-3-Clause transitive go False a
247 hack/benchmark-fixture golang.org/x/text (see go.sum) BSD-3-Clause transitive go False a
248 hack/benchmark-fixture google.golang.org/genproto/googleapis/rpc/status (see go.sum) Apache-2.0 transitive go False a
249 hack/benchmark-fixture google.golang.org/grpc (see go.sum) Apache-2.0 direct go False a
250 hack/benchmark-fixture google.golang.org/protobuf (see go.sum) BSD-3-Clause transitive go False a
251 hack/windows-fixture golang.org/x/net (see go.sum) BSD-3-Clause transitive go False a
252 hack/windows-fixture golang.org/x/sys/unix (see go.sum) BSD-3-Clause transitive go False a
253 hack/windows-fixture golang.org/x/text (see go.sum) BSD-3-Clause transitive go False a
254 hack/windows-fixture google.golang.org/genproto/googleapis/rpc/status (see go.sum) Apache-2.0 transitive go False a
255 hack/windows-fixture google.golang.org/grpc (see go.sum) Apache-2.0 direct go False a
256 hack/windows-fixture google.golang.org/protobuf (see go.sum) BSD-3-Clause transitive go False a
257 web @codemirror/autocomplete 6.20.3 MIT direct npm False a
258 web @codemirror/commands 6.10.4 MIT direct npm False a
259 web @codemirror/language 6.12.4 MIT direct npm False a
260 web @codemirror/state 6.7.1 MIT direct npm False a
261 web @codemirror/view 6.43.8 MIT direct npm False a
262 web @jridgewell/gen-mapping 0.3.13 MIT transitive npm False a
263 web @jridgewell/remapping 2.3.5 MIT transitive npm False a
264 web @jridgewell/resolve-uri 3.1.2 MIT transitive npm False a
265 web @jridgewell/sourcemap-codec 1.5.5 MIT transitive npm False a
266 web @jridgewell/trace-mapping 0.3.31 MIT transitive npm False a
267 web @lezer/common 1.5.2 MIT transitive npm False a
268 web @lezer/highlight 1.2.3 MIT transitive npm False a
269 web @lezer/lr 1.4.10 MIT transitive npm False a
270 web @marijn/find-cluster-break 1.0.3 MIT transitive npm False a
271 web @oxc-project/types 0.144.0 MIT transitive npm False a
272 web @polka/url 1.0.0-next.29 MIT transitive npm False a
273 web @rolldown/binding-linux-x64-gnu 1.2.4 MIT transitive npm False a
274 web @rolldown/pluginutils 1.0.1 MIT transitive npm False a
275 web @standard-schema/spec 1.1.0 MIT transitive npm False a
276 web @sveltejs/acorn-typescript 1.0.13 MIT transitive npm False a
277 web @sveltejs/adapter-static 3.0.10 MIT direct npm False a
278 web @sveltejs/kit 2.70.2 MIT direct npm False a
279 web @sveltejs/load-config 0.2.3 MIT transitive npm False a
280 web @sveltejs/vite-plugin-svelte 7.3.0 MIT direct npm False a
281 web @types/cookie 0.6.0 MIT transitive npm False a
282 web @types/estree 1.0.9 MIT transitive npm False a
283 web @types/trusted-types 2.0.7 MIT transitive npm False a
284 web acorn 8.18.0 MIT transitive npm False a
285 web aria-query 5.3.1 Apache-2.0 transitive npm False a
286 web axe-core 4.13.0 MPL-2.0 direct npm True MPL-2.0: file-level copyleft, generally fine as a dependency per policy -- flagged for explicit citation, not because it's expected to block a
287 web axobject-query 4.1.0 Apache-2.0 transitive npm False a
288 web chokidar 4.0.3 MIT transitive npm False a
289 web clsx 2.1.1 MIT transitive npm False a
290 web cookie 0.6.0 MIT transitive npm False a
291 web crelt 1.0.7 MIT transitive npm False a
292 web deepmerge 4.3.1 MIT transitive npm False a
293 web detect-libc 2.1.2 Apache-2.0 transitive npm False a
294 web devalue 5.9.0 MIT transitive npm False a
295 web echarts 6.1.0 Apache-2.0 direct npm False a
296 web esm-env 1.2.2 MIT transitive npm False a
297 web esrap 2.3.2 MIT transitive npm False a
298 web fdir 6.5.0 MIT transitive npm False a
299 web gridstack 11.5.1 MIT direct npm False a
300 web is-reference 3.0.3 MIT transitive npm False a
301 web kleur 4.1.5 MIT transitive npm False a
302 web lightningcss-linux-x64-gnu 1.33.0 MPL-2.0 transitive npm True MPL-2.0: file-level copyleft, generally fine as a dependency per policy -- flagged for explicit citation, not because it's expected to block a
303 web lightningcss 1.33.0 MPL-2.0 transitive npm True MPL-2.0: file-level copyleft, generally fine as a dependency per policy -- flagged for explicit citation, not because it's expected to block a
304 web locate-character 3.0.0 MIT transitive npm False a
305 web magic-string 0.30.21 MIT transitive npm False a
306 web magic-string 1.2.0 MIT transitive npm False a
307 web mri 1.2.0 MIT transitive npm False a
308 web mrmime 2.0.1 MIT transitive npm False a
309 web nanoid 3.3.18 MIT transitive npm False a
310 web obug 2.1.4 MIT transitive npm False a
311 web picocolors 1.1.1 ISC transitive npm False a
312 web picomatch 4.0.5 MIT transitive npm False a
313 web postcss 8.5.26 MIT transitive npm False a
314 web readdirp 4.1.2 MIT transitive npm False a
315 web rolldown 1.2.4 MIT transitive npm False a
316 web sade 1.8.1 MIT transitive npm False a
317 web set-cookie-parser 3.1.2 MIT transitive npm False a
318 web sirv 3.0.2 MIT transitive npm False a
319 web source-map-js 1.2.1 BSD-3-Clause transitive npm False a
320 web style-mod 4.1.3 MIT transitive npm False a
321 web svelte-check 4.7.6 MIT direct npm False a
322 web svelte 5.56.9 MIT direct npm False a
323 web tinyglobby 0.2.17 MIT transitive npm False a
324 web totalist 3.0.1 MIT transitive npm False a
325 web tslib 2.3.0 0BSD transitive npm False a
326 web typescript 6.0.3 Apache-2.0 direct npm False a
327 web vite 8.2.1 MIT direct npm False a
328 web vitefu 1.1.3 MIT transitive npm False a
329 web w3c-keyname 2.2.8 MIT transitive npm False a
330 web zimmerframe 1.1.4 MIT transitive npm False a
331 web zrender 6.1.0 BSD-3-Clause transitive npm False a
332 agent anstream 1.0.0 Apache-2.0 OR MIT transitive rust False a
333 agent anstyle 1.0.14 Apache-2.0 OR MIT transitive rust False a
334 agent anstyle-parse 1.0.0 Apache-2.0 OR MIT transitive rust False a
335 agent anstyle-query 1.1.5 Apache-2.0 OR MIT transitive rust False a
336 agent anstyle-wincon 3.0.11 Apache-2.0 OR MIT transitive rust False a
337 agent anyhow 1.0.104 Apache-2.0 OR MIT direct rust False a
338 agent async-stream 0.3.6 MIT transitive rust False a
339 agent async-stream-impl 0.3.6 MIT transitive rust False a
340 agent async-trait 0.1.92 Apache-2.0 OR MIT transitive rust False a
341 agent atomic-waker 1.1.2 Apache-2.0 OR MIT transitive rust False a
342 agent autocfg 1.5.1 Apache-2.0 OR MIT transitive rust False a
343 agent axum 0.7.9 MIT transitive rust False a
344 agent axum-core 0.4.5 MIT transitive rust False a
345 agent base64 0.22.1 Apache-2.0 OR MIT transitive rust False a
346 agent bitflags 2.13.1 Apache-2.0 OR MIT transitive rust False a
347 agent bytes 1.12.1 MIT transitive rust False a
348 agent cc 1.4.2 Apache-2.0 OR MIT transitive rust False a
349 agent cfg-if 1.0.4 Apache-2.0 OR MIT transitive rust False a
350 agent clap 4.6.6 Apache-2.0 OR MIT direct rust False a
351 agent clap_builder 4.6.6 Apache-2.0 OR MIT transitive rust False a
352 agent clap_derive 4.6.4 Apache-2.0 OR MIT transitive rust False a
353 agent clap_lex 1.1.0 Apache-2.0 OR MIT transitive rust False a
354 agent colorchoice 1.0.5 Apache-2.0 OR MIT transitive rust False a
355 agent either 1.17.0 Apache-2.0 OR MIT transitive rust False a
356 agent equivalent 1.0.2 Apache-2.0 OR MIT transitive rust False a
357 agent errno 0.3.14 Apache-2.0 OR MIT transitive rust False a
358 agent fastrand 2.5.0 Apache-2.0 OR MIT transitive rust False a
359 agent find-msvc-tools 0.1.10 Apache-2.0 OR MIT transitive rust False a
360 agent fixedbitset 0.5.7 Apache-2.0 OR MIT transitive rust False a
361 agent fnv 1.0.7 Apache-2.0 OR MIT transitive rust False a
362 agent futures-channel 0.3.34 Apache-2.0 OR MIT transitive rust False a
363 agent futures-core 0.3.34 Apache-2.0 OR MIT transitive rust False a
364 agent futures-sink 0.3.34 Apache-2.0 OR MIT transitive rust False a
365 agent futures-task 0.3.34 Apache-2.0 OR MIT transitive rust False a
366 agent futures-util 0.3.34 Apache-2.0 OR MIT transitive rust False a
367 agent getrandom 0.2.17 Apache-2.0 OR MIT transitive rust False a
368 agent getrandom 0.4.3 Apache-2.0 OR MIT transitive rust False a
369 agent h2 0.4.15 MIT transitive rust False a
370 agent hashbrown 0.12.3 Apache-2.0 OR MIT transitive rust False a
371 agent hashbrown 0.17.1 Apache-2.0 OR MIT transitive rust False a
372 agent heck 0.5.0 Apache-2.0 OR MIT transitive rust False a
373 agent http 1.5.0 Apache-2.0 OR MIT transitive rust False a
374 agent http-body 1.1.0 MIT transitive rust False a
375 agent http-body-util 0.1.5 MIT transitive rust False a
376 agent httparse 1.10.1 Apache-2.0 OR MIT transitive rust False a
377 agent httpdate 1.0.3 Apache-2.0 OR MIT transitive rust False a
378 agent hyper 1.11.0 MIT transitive rust False a
379 agent hyper-timeout 0.5.2 Apache-2.0 OR MIT transitive rust False a
380 agent hyper-util 0.1.20 MIT transitive rust False a
381 agent indexmap 1.9.3 Apache-2.0 OR MIT transitive rust False a
382 agent indexmap 2.14.0 Apache-2.0 OR MIT transitive rust False a
383 agent is_terminal_polyfill 1.70.2 Apache-2.0 OR MIT transitive rust False a
384 agent itertools 0.14.0 Apache-2.0 OR MIT transitive rust False a
385 agent itoa 1.0.18 Apache-2.0 OR MIT transitive rust False a
386 agent lazy_static 1.5.0 Apache-2.0 OR MIT transitive rust False a
387 agent libc 0.2.189 Apache-2.0 OR MIT transitive rust False a
388 agent linux-raw-sys 0.12.1 Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT transitive rust False a
389 agent log 0.4.33 Apache-2.0 OR MIT transitive rust False a
390 agent matchers 0.2.0 MIT transitive rust False a
391 agent matchit 0.7.3 BSD-3-Clause OR MIT transitive rust False a
392 agent memchr 2.8.3 MIT OR Unlicense transitive rust False a
393 agent mime 0.3.17 Apache-2.0 OR MIT transitive rust False a
394 agent mio 1.2.2 MIT transitive rust False a
395 agent multimap 0.10.1 Apache-2.0 OR MIT transitive rust False a
396 agent nu-ansi-term 0.50.3 MIT transitive rust False a
397 agent once_cell 1.21.4 Apache-2.0 OR MIT transitive rust False a
398 agent once_cell_polyfill 1.70.2 Apache-2.0 OR MIT transitive rust False a
399 agent percent-encoding 2.3.2 Apache-2.0 OR MIT transitive rust False a
400 agent petgraph 0.7.1 Apache-2.0 OR MIT transitive rust False a
401 agent pin-project 1.1.13 Apache-2.0 OR MIT transitive rust False a
402 agent pin-project-internal 1.1.13 Apache-2.0 OR MIT transitive rust False a
403 agent pin-project-lite 0.2.17 Apache-2.0 OR MIT transitive rust False a
404 agent ppv-lite86 0.2.21 Apache-2.0 OR MIT transitive rust False a
405 agent prettyplease 0.2.37 Apache-2.0 OR MIT transitive rust False a
406 agent proc-macro2 1.0.107 Apache-2.0 OR MIT transitive rust False a
407 agent prost 0.13.5 Apache-2.0 direct rust False a
408 agent prost-build 0.13.5 Apache-2.0 transitive rust False a
409 agent prost-derive 0.13.5 Apache-2.0 transitive rust False a
410 agent prost-types 0.13.5 Apache-2.0 transitive rust False a
411 agent quick-xml 0.36.2 MIT direct rust False a
412 agent quote 1.0.47 Apache-2.0 OR MIT transitive rust False a
413 agent r-efi 6.0.0 Apache-2.0 OR LGPL-2.1-or-later OR MIT transitive rust True carries a copyleft/less-common license alongside permissive alternatives (SPDX OR) -- see classification a
414 agent rand 0.8.7 Apache-2.0 OR MIT transitive rust False a
415 agent rand_chacha 0.3.1 Apache-2.0 OR MIT transitive rust False a
416 agent rand_core 0.6.4 Apache-2.0 OR MIT transitive rust False a
417 agent regex 1.13.1 Apache-2.0 OR MIT transitive rust False a
418 agent regex-automata 0.4.18 Apache-2.0 OR MIT transitive rust False a
419 agent regex-syntax 0.8.11 Apache-2.0 OR MIT transitive rust False a
420 agent ring 0.17.14 Apache-2.0 OR ISC transitive rust False a
421 agent rustix 1.1.4 Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT transitive rust False a
422 agent rustls 0.23.43 Apache-2.0 OR ISC OR MIT transitive rust False a
423 agent rustls-pemfile 2.2.0 Apache-2.0 OR ISC OR MIT transitive rust False a
424 agent rustls-pki-types 1.15.1 Apache-2.0 OR MIT transitive rust False a
425 agent rustls-webpki 0.103.14 ISC transitive rust False a
426 agent rustversion 1.0.23 Apache-2.0 OR MIT transitive rust False a
427 agent serde 1.0.229 Apache-2.0 OR MIT direct rust False a
428 agent serde_core 1.0.229 Apache-2.0 OR MIT transitive rust False a
429 agent serde_derive 1.0.229 Apache-2.0 OR MIT transitive rust False a
430 agent serde_json 1.0.151 Apache-2.0 OR MIT direct rust False a
431 agent serde_spanned 0.6.9 Apache-2.0 OR MIT transitive rust False a
432 agent sharded-slab 0.1.7 MIT transitive rust False a
433 agent shlex 2.0.1 Apache-2.0 OR MIT transitive rust False a
434 agent signal-hook-registry 1.4.8 Apache-2.0 OR MIT transitive rust False a
435 agent slab 0.4.12 MIT transitive rust False a
436 agent smallvec 1.15.2 Apache-2.0 OR MIT transitive rust False a
437 agent socket2 0.5.10 Apache-2.0 OR MIT transitive rust False a
438 agent socket2 0.6.5 Apache-2.0 OR MIT transitive rust False a
439 agent strsim 0.11.1 MIT transitive rust False a
440 agent subtle 2.6.1 BSD-3-Clause transitive rust False a
441 agent syn 2.0.119 Apache-2.0 OR MIT transitive rust False a
442 agent syn 3.0.3 Apache-2.0 OR MIT transitive rust False a
443 agent sync_wrapper 1.0.2 Apache-2.0 transitive rust False a
444 agent tempfile 3.27.0 Apache-2.0 OR MIT transitive rust False a
445 agent thread_local 1.1.10 Apache-2.0 OR MIT transitive rust False a
446 agent tokio 1.53.1 MIT direct rust False a
447 agent tokio-macros 2.7.2 MIT transitive rust False a
448 agent tokio-rustls 0.26.4 Apache-2.0 OR MIT transitive rust False a
449 agent tokio-stream 0.1.19 MIT transitive rust False a
450 agent tokio-util 0.7.19 MIT transitive rust False a
451 agent toml 0.8.23 Apache-2.0 OR MIT direct rust False a
452 agent toml_datetime 0.6.11 Apache-2.0 OR MIT transitive rust False a
453 agent toml_edit 0.22.27 Apache-2.0 OR MIT transitive rust False a
454 agent toml_write 0.1.2 Apache-2.0 OR MIT transitive rust False a
455 agent tonic 0.12.3 MIT direct rust False a
456 agent tonic-build 0.12.3 MIT direct rust False a
457 agent tower 0.4.13 MIT transitive rust False a
458 agent tower 0.5.3 MIT transitive rust False a
459 agent tower-layer 0.3.3 MIT transitive rust False a
460 agent tower-service 0.3.3 MIT transitive rust False a
461 agent tracing 0.1.44 MIT direct rust False a
462 agent tracing-attributes 0.1.31 MIT transitive rust False a
463 agent tracing-core 0.1.36 MIT transitive rust False a
464 agent tracing-log 0.2.0 MIT transitive rust False a
465 agent tracing-subscriber 0.3.23 MIT direct rust False a
466 agent try-lock 0.2.5 MIT transitive rust False a
467 agent unicode-ident 1.0.24 Apache-2.0 OR MIT OR Unicode-3.0 transitive rust False a
468 agent untrusted 0.9.0 ISC transitive rust False a
469 agent utf8parse 0.2.2 Apache-2.0 OR MIT transitive rust False a
470 agent want 0.3.1 MIT transitive rust False a
471 agent wasi 0.11.1+wasi-snapshot-preview1 Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT transitive rust False a
472 agent widestring 1.2.1 Apache-2.0 OR MIT transitive rust False a
473 agent windows 0.58.0 Apache-2.0 OR MIT direct rust False a
474 agent windows-core 0.58.0 Apache-2.0 OR MIT transitive rust False a
475 agent windows-implement 0.58.0 Apache-2.0 OR MIT transitive rust False a
476 agent windows-interface 0.58.0 Apache-2.0 OR MIT transitive rust False a
477 agent windows-link 0.2.1 Apache-2.0 OR MIT transitive rust False a
478 agent windows-result 0.2.0 Apache-2.0 OR MIT transitive rust False a
479 agent windows-service 0.7.0 Apache-2.0 OR MIT direct rust False a
480 agent windows-strings 0.1.0 Apache-2.0 OR MIT transitive rust False a
481 agent windows-sys 0.52.0 Apache-2.0 OR MIT transitive rust False a
482 agent windows-sys 0.61.2 Apache-2.0 OR MIT transitive rust False a
483 agent windows-targets 0.52.6 Apache-2.0 OR MIT transitive rust False a
484 agent windows_aarch64_gnullvm 0.52.6 Apache-2.0 OR MIT transitive rust False a
485 agent windows_aarch64_msvc 0.52.6 Apache-2.0 OR MIT transitive rust False a
486 agent windows_i686_gnu 0.52.6 Apache-2.0 OR MIT transitive rust False a
487 agent windows_i686_gnullvm 0.52.6 Apache-2.0 OR MIT transitive rust False a
488 agent windows_i686_msvc 0.52.6 Apache-2.0 OR MIT transitive rust False a
489 agent windows_x86_64_gnu 0.52.6 Apache-2.0 OR MIT transitive rust False a
490 agent windows_x86_64_gnullvm 0.52.6 Apache-2.0 OR MIT transitive rust False a
491 agent windows_x86_64_msvc 0.52.6 Apache-2.0 OR MIT transitive rust False a
492 agent winnow 0.7.15 MIT transitive rust False a
493 agent zerocopy 0.8.56 Apache-2.0 OR BSD-2-Clause OR MIT transitive rust False a
494 agent zeroize 1.9.0 Apache-2.0 OR MIT transitive rust False a
495 agent zmij 1.0.23 MIT transitive rust False a
496 search adler2 2.0.1 0BSD OR Apache-2.0 OR MIT transitive rust False a
497 search aho-corasick 1.1.5 MIT OR Unlicense transitive rust False a
498 search allocator-api2 0.2.21 Apache-2.0 OR MIT transitive rust False a
499 search anyhow 1.0.104 Apache-2.0 OR MIT direct rust False a
500 search arc-swap 1.9.2 Apache-2.0 OR MIT transitive rust False a
501 search async-stream 0.3.6 MIT transitive rust False a
502 search async-stream-impl 0.3.6 MIT transitive rust False a
503 search async-trait 0.1.92 Apache-2.0 OR MIT transitive rust False a
504 search atomic-waker 1.1.2 Apache-2.0 OR MIT transitive rust False a
505 search autocfg 1.5.1 Apache-2.0 OR MIT transitive rust False a
506 search axum 0.7.9 MIT transitive rust False a
507 search axum-core 0.4.5 MIT transitive rust False a
508 search base64 0.22.1 Apache-2.0 OR MIT transitive rust False a
509 search bitflags 2.13.1 Apache-2.0 OR MIT transitive rust False a
510 search bitpacking 0.9.3 MIT transitive rust False a
511 search block-buffer 0.10.4 Apache-2.0 OR MIT transitive rust False a
512 search bumpalo 3.20.3 Apache-2.0 OR MIT transitive rust False a
513 search byteorder 1.5.0 MIT OR Unlicense transitive rust False a
514 search bytes 1.12.1 MIT transitive rust False a
515 search cc 1.4.2 Apache-2.0 OR MIT transitive rust False a
516 search census 0.4.2 MIT transitive rust False a
517 search cfg-if 1.0.4 Apache-2.0 OR MIT transitive rust False a
518 search chrono 0.4.45 Apache-2.0 OR MIT transitive rust False a
519 search cpufeatures 0.2.17 Apache-2.0 OR MIT transitive rust False a
520 search crc32c 0.6.8 Apache-2.0 OR MIT transitive rust False a
521 search crc32fast 1.5.0 Apache-2.0 OR MIT transitive rust False a
522 search crossbeam-channel 0.5.16 Apache-2.0 OR MIT transitive rust False a
523 search crossbeam-deque 0.8.7 Apache-2.0 OR MIT transitive rust False a
524 search crossbeam-epoch 0.9.20 Apache-2.0 OR MIT transitive rust False a
525 search crossbeam-utils 0.8.22 Apache-2.0 OR MIT transitive rust False a
526 search crunchy 0.2.4 MIT transitive rust False a
527 search crypto-common 0.1.7 Apache-2.0 OR MIT transitive rust False a
528 search deranged 0.5.8 Apache-2.0 OR MIT transitive rust False a
529 search digest 0.10.7 Apache-2.0 OR MIT transitive rust False a
530 search displaydoc 0.2.7 Apache-2.0 OR MIT transitive rust False a
531 search downcast-rs 1.2.1 Apache-2.0 OR MIT transitive rust False a
532 search either 1.17.0 Apache-2.0 OR MIT transitive rust False a
533 search equivalent 1.0.2 Apache-2.0 OR MIT transitive rust False a
534 search errno 0.3.14 Apache-2.0 OR MIT transitive rust False a
535 search fastdivide 0.4.2 MIT OR zlib-acknowledgement transitive rust True carries a copyleft/less-common license alongside permissive alternatives (SPDX OR) -- see classification a
536 search fastrand 2.5.0 Apache-2.0 OR MIT transitive rust False a
537 search find-msvc-tools 0.1.10 Apache-2.0 OR MIT transitive rust False a
538 search fixedbitset 0.5.7 Apache-2.0 OR MIT transitive rust False a
539 search flate2 1.1.9 Apache-2.0 OR MIT transitive rust False a
540 search fnv 1.0.7 Apache-2.0 OR MIT transitive rust False a
541 search foldhash 0.1.5 Zlib transitive rust False a
542 search form_urlencoded 1.2.2 Apache-2.0 OR MIT transitive rust False a
543 search fs4 0.8.4 Apache-2.0 OR MIT transitive rust False a
544 search futures 0.3.34 Apache-2.0 OR MIT transitive rust False a
545 search futures-channel 0.3.34 Apache-2.0 OR MIT transitive rust False a
546 search futures-core 0.3.34 Apache-2.0 OR MIT transitive rust False a
547 search futures-executor 0.3.34 Apache-2.0 OR MIT transitive rust False a
548 search futures-io 0.3.34 Apache-2.0 OR MIT transitive rust False a
549 search futures-macro 0.3.34 Apache-2.0 OR MIT transitive rust False a
550 search futures-sink 0.3.34 Apache-2.0 OR MIT transitive rust False a
551 search futures-task 0.3.34 Apache-2.0 OR MIT transitive rust False a
552 search futures-util 0.3.34 Apache-2.0 OR MIT transitive rust False a
553 search generic-array 0.14.7 MIT transitive rust False a
554 search getrandom 0.2.17 Apache-2.0 OR MIT transitive rust False a
555 search getrandom 0.4.3 Apache-2.0 OR MIT transitive rust False a
556 search h2 0.4.15 MIT transitive rust False a
557 search hashbrown 0.12.3 Apache-2.0 OR MIT transitive rust False a
558 search hashbrown 0.15.5 Apache-2.0 OR MIT transitive rust False a
559 search hashbrown 0.17.1 Apache-2.0 OR MIT transitive rust False a
560 search heck 0.5.0 Apache-2.0 OR MIT transitive rust False a
561 search hermit-abi 0.5.2 Apache-2.0 OR MIT transitive rust False a
562 search hmac 0.12.1 Apache-2.0 OR MIT transitive rust False a
563 search htmlescape 0.3.1 Apache-2.0 OR MIT OR MPL-2.0 transitive rust True carries a copyleft/less-common license alongside permissive alternatives (SPDX OR) -- see classification a
564 search http 1.5.0 Apache-2.0 OR MIT transitive rust False a
565 search http-body 1.1.0 MIT transitive rust False a
566 search http-body-util 0.1.5 MIT transitive rust False a
567 search httparse 1.10.1 Apache-2.0 OR MIT transitive rust False a
568 search httpdate 1.0.3 Apache-2.0 OR MIT transitive rust False a
569 search hyper 1.11.0 MIT transitive rust False a
570 search hyper-timeout 0.5.2 Apache-2.0 OR MIT transitive rust False a
571 search hyper-util 0.1.20 MIT transitive rust False a
572 search icu_collections 2.3.0 Unicode-3.0 transitive rust False a
573 search icu_locale_core 2.3.0 Unicode-3.0 transitive rust False a
574 search icu_normalizer 2.3.0 Unicode-3.0 transitive rust False a
575 search icu_normalizer_data 2.3.0 Unicode-3.0 transitive rust False a
576 search icu_properties 2.3.0 Unicode-3.0 transitive rust False a
577 search icu_properties_data 2.3.0 Unicode-3.0 transitive rust False a
578 search icu_provider 2.3.0 Unicode-3.0 transitive rust False a
579 search idna 1.1.0 Apache-2.0 OR MIT transitive rust False a
580 search idna_adapter 1.2.2 Apache-2.0 OR MIT transitive rust False a
581 search indexmap 1.9.3 Apache-2.0 OR MIT transitive rust False a
582 search indexmap 2.14.0 Apache-2.0 OR MIT transitive rust False a
583 search instant 0.1.13 BSD-3-Clause transitive rust False a
584 search integer-encoding 4.1.0 MIT transitive rust False a
585 search ipnet 2.12.1 Apache-2.0 OR MIT transitive rust False a
586 search itertools 0.12.1 Apache-2.0 OR MIT transitive rust False a
587 search itertools 0.14.0 Apache-2.0 OR MIT transitive rust False a
588 search itoa 1.0.18 Apache-2.0 OR MIT transitive rust False a
589 search jobserver 0.1.35 Apache-2.0 OR MIT transitive rust False a
590 search js-sys 0.3.104 Apache-2.0 OR MIT transitive rust False a
591 search lazy_static 1.5.0 Apache-2.0 OR MIT transitive rust False a
592 search levenshtein_automata 0.2.1 MIT transitive rust False a
593 search libc 0.2.189 Apache-2.0 OR MIT transitive rust False a
594 search libm 0.2.16 MIT transitive rust False a
595 search linux-raw-sys 0.12.1 Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT transitive rust False a
596 search linux-raw-sys 0.4.15 Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT transitive rust False a
597 search litemap 0.8.3 Unicode-3.0 transitive rust False a
598 search lock_api 0.4.14 Apache-2.0 OR MIT transitive rust False a
599 search log 0.4.33 Apache-2.0 OR MIT transitive rust False a
600 search lru 0.12.5 MIT transitive rust False a
601 search lz4 1.28.1 MIT transitive rust False a
602 search lz4-sys 1.11.1+lz4-1.10.0 MIT transitive rust False a
603 search lz4_flex 0.11.6 MIT transitive rust False a
604 search matchers 0.2.0 MIT transitive rust False a
605 search matchit 0.7.3 BSD-3-Clause OR MIT transitive rust False a
606 search measure_time 0.8.3 MIT transitive rust False a
607 search memchr 2.8.3 MIT OR Unlicense transitive rust False a
608 search memmap2 0.9.11 Apache-2.0 OR MIT transitive rust False a
609 search mime 0.3.17 Apache-2.0 OR MIT transitive rust False a
610 search minimal-lexical 0.2.1 Apache-2.0 OR MIT transitive rust False a
611 search miniz_oxide 0.8.9 Apache-2.0 OR MIT OR Zlib transitive rust False a
612 search mio 1.2.2 MIT transitive rust False a
613 search multimap 0.10.1 Apache-2.0 OR MIT transitive rust False a
614 search murmurhash32 0.3.1 MIT transitive rust False a
615 search nom 7.1.3 MIT transitive rust False a
616 search nu-ansi-term 0.50.3 MIT transitive rust False a
617 search num-conv 0.2.2 Apache-2.0 OR MIT transitive rust False a
618 search num-traits 0.2.19 Apache-2.0 OR MIT transitive rust False a
619 search num_cpus 1.17.0 Apache-2.0 OR MIT transitive rust False a
620 search once_cell 1.21.4 Apache-2.0 OR MIT transitive rust False a
621 search oneshot 0.1.13 Apache-2.0 OR MIT transitive rust False a
622 search ownedbytes 0.7.0 MIT transitive rust False a
623 search parking_lot 0.12.5 Apache-2.0 OR MIT transitive rust False a
624 search parking_lot_core 0.9.12 Apache-2.0 OR MIT transitive rust False a
625 search pbkdf2 0.12.2 Apache-2.0 OR MIT transitive rust False a
626 search percent-encoding 2.3.2 Apache-2.0 OR MIT transitive rust False a
627 search petgraph 0.7.1 Apache-2.0 OR MIT transitive rust False a
628 search pin-project 1.1.13 Apache-2.0 OR MIT transitive rust False a
629 search pin-project-internal 1.1.13 Apache-2.0 OR MIT transitive rust False a
630 search pin-project-lite 0.2.17 Apache-2.0 OR MIT transitive rust False a
631 search pkg-config 0.3.33 Apache-2.0 OR MIT transitive rust False a
632 search potential_utf 0.1.6 Unicode-3.0 transitive rust False a
633 search powerfmt 0.2.0 Apache-2.0 OR MIT transitive rust False a
634 search ppv-lite86 0.2.21 Apache-2.0 OR MIT transitive rust False a
635 search prettyplease 0.2.37 Apache-2.0 OR MIT transitive rust False a
636 search proc-macro2 1.0.107 Apache-2.0 OR MIT transitive rust False a
637 search prost 0.13.5 Apache-2.0 direct rust False a
638 search prost-build 0.13.5 Apache-2.0 transitive rust False a
639 search prost-derive 0.13.5 Apache-2.0 transitive rust False a
640 search prost-types 0.13.5 Apache-2.0 transitive rust False a
641 search quote 1.0.47 Apache-2.0 OR MIT transitive rust False a
642 search r-efi 6.0.0 Apache-2.0 OR LGPL-2.1-or-later OR MIT transitive rust True carries a copyleft/less-common license alongside permissive alternatives (SPDX OR) -- see classification a
643 search rand 0.8.7 Apache-2.0 OR MIT transitive rust False a
644 search rand_chacha 0.3.1 Apache-2.0 OR MIT transitive rust False a
645 search rand_core 0.6.4 Apache-2.0 OR MIT transitive rust False a
646 search rand_distr 0.4.3 Apache-2.0 OR MIT transitive rust False a
647 search rayon 1.12.0 Apache-2.0 OR MIT transitive rust False a
648 search rayon-core 1.13.0 Apache-2.0 OR MIT transitive rust False a
649 search redox_syscall 0.5.18 MIT transitive rust False a
650 search regex 1.13.1 Apache-2.0 OR MIT transitive rust False a
651 search regex-automata 0.4.18 Apache-2.0 OR MIT transitive rust False a
652 search regex-syntax 0.8.11 Apache-2.0 OR MIT transitive rust False a
653 search reqwest 0.12.28 Apache-2.0 OR MIT direct rust False a
654 search rsasl 2.3.1 Apache-2.0 OR MIT transitive rust False a
655 search rskafka 0.6.0 Apache-2.0 OR MIT direct rust False a
656 search rust-stemmers 1.2.0 BSD-3-Clause OR MIT transitive rust False a
657 search rustc-hash 1.1.0 Apache-2.0 OR MIT transitive rust False a
658 search rustc_version 0.4.1 Apache-2.0 OR MIT transitive rust False a
659 search rustix 0.38.44 Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT transitive rust False a
660 search rustix 1.1.4 Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT transitive rust False a
661 search rustversion 1.0.23 Apache-2.0 OR MIT transitive rust False a
662 search ryu 1.0.23 Apache-2.0 OR BSL-1.0 transitive rust True carries a copyleft/less-common license alongside permissive alternatives (SPDX OR) -- see classification a
663 search scopeguard 1.2.0 Apache-2.0 OR MIT transitive rust False a
664 search semver 1.0.28 Apache-2.0 OR MIT transitive rust False a
665 search serde 1.0.229 Apache-2.0 OR MIT direct rust False a
666 search serde_core 1.0.229 Apache-2.0 OR MIT transitive rust False a
667 search serde_derive 1.0.229 Apache-2.0 OR MIT transitive rust False a
668 search serde_json 1.0.151 Apache-2.0 OR MIT direct rust False a
669 search serde_urlencoded 0.7.1 Apache-2.0 OR MIT transitive rust False a
670 search sha2 0.10.9 Apache-2.0 OR MIT transitive rust False a
671 search sharded-slab 0.1.7 MIT transitive rust False a
672 search shlex 2.0.1 Apache-2.0 OR MIT transitive rust False a
673 search signal-hook-registry 1.4.8 Apache-2.0 OR MIT transitive rust False a
674 search simd-adler32 0.3.10 MIT transitive rust False a
675 search sketches-ddsketch 0.2.2 Apache-2.0 transitive rust False a
676 search slab 0.4.12 MIT transitive rust False a
677 search smallvec 1.15.2 Apache-2.0 OR MIT transitive rust False a
678 search snap 1.1.2 BSD-3-Clause transitive rust False a
679 search socket2 0.5.10 Apache-2.0 OR MIT transitive rust False a
680 search socket2 0.6.5 Apache-2.0 OR MIT transitive rust False a
681 search stable_deref_trait 1.2.1 Apache-2.0 OR MIT transitive rust False a
682 search stringprep 0.1.5 Apache-2.0 OR MIT transitive rust False a
683 search subtle 2.6.1 BSD-3-Clause transitive rust False a
684 search syn 2.0.119 Apache-2.0 OR MIT transitive rust False a
685 search syn 3.0.3 Apache-2.0 OR MIT transitive rust False a
686 search sync_wrapper 1.0.2 Apache-2.0 transitive rust False a
687 search synstructure 0.13.2 MIT transitive rust False a
688 search tantivy 0.22.1 MIT direct rust False a
689 search tantivy-bitpacker 0.6.0 MIT transitive rust False a
690 search tantivy-columnar 0.3.0 MIT transitive rust False a
691 search tantivy-common 0.7.0 MIT transitive rust False a
692 search tantivy-fst 0.5.0 MIT OR Unlicense transitive rust False a
693 search tantivy-query-grammar 0.22.0 MIT transitive rust False a
694 search tantivy-sstable 0.3.0 MIT transitive rust False a
695 search tantivy-stacker 0.3.0 MIT transitive rust False a
696 search tantivy-tokenizer-api 0.3.0 MIT transitive rust False a
697 search tempfile 3.27.0 Apache-2.0 OR MIT direct rust False a
698 search thiserror 1.0.69 Apache-2.0 OR MIT transitive rust False a
699 search thiserror 2.0.20 Apache-2.0 OR MIT transitive rust False a
700 search thiserror-impl 1.0.69 Apache-2.0 OR MIT transitive rust False a
701 search thiserror-impl 2.0.20 Apache-2.0 OR MIT transitive rust False a
702 search thread_local 1.1.10 Apache-2.0 OR MIT transitive rust False a
703 search time 0.3.55 Apache-2.0 OR MIT transitive rust False a
704 search time-core 0.1.9 Apache-2.0 OR MIT transitive rust False a
705 search tinystr 0.8.4 Unicode-3.0 transitive rust False a
706 search tinyvec 1.12.0 Apache-2.0 OR MIT OR Zlib transitive rust False a
707 search tinyvec_macros 0.1.1 Apache-2.0 OR MIT OR Zlib transitive rust False a
708 search tokio 1.53.1 MIT direct rust False a
709 search tokio-macros 2.7.2 MIT transitive rust False a
710 search tokio-stream 0.1.19 MIT transitive rust False a
711 search tokio-util 0.7.19 MIT transitive rust False a
712 search tonic 0.12.3 MIT direct rust False a
713 search tonic-build 0.12.3 MIT direct rust False a
714 search tower 0.4.13 MIT transitive rust False a
715 search tower 0.5.3 MIT transitive rust False a
716 search tower-http 0.6.11 MIT transitive rust False a
717 search tower-layer 0.3.3 MIT transitive rust False a
718 search tower-service 0.3.3 MIT transitive rust False a
719 search tracing 0.1.44 MIT direct rust False a
720 search tracing-attributes 0.1.31 MIT transitive rust False a
721 search tracing-core 0.1.36 MIT transitive rust False a
722 search tracing-log 0.2.0 MIT transitive rust False a
723 search tracing-subscriber 0.3.23 MIT direct rust False a
724 search try-lock 0.2.5 MIT transitive rust False a
725 search typenum 1.20.1 Apache-2.0 OR MIT transitive rust False a
726 search unicode-bidi 0.3.18 Apache-2.0 OR MIT transitive rust False a
727 search unicode-ident 1.0.24 Apache-2.0 OR MIT OR Unicode-3.0 transitive rust False a
728 search unicode-normalization 0.1.25 Apache-2.0 OR MIT transitive rust False a
729 search unicode-properties 0.1.4 Apache-2.0 OR MIT transitive rust False a
730 search url 2.5.8 Apache-2.0 OR MIT transitive rust False a
731 search utf8-ranges 1.0.5 MIT OR Unlicense transitive rust False a
732 search utf8_iter 1.0.4 Apache-2.0 OR MIT transitive rust False a
733 search uuid 1.24.0 Apache-2.0 OR MIT transitive rust False a
734 search version_check 0.9.5 Apache-2.0 OR MIT transitive rust False a
735 search want 0.3.1 MIT transitive rust False a
736 search wasi 0.11.1+wasi-snapshot-preview1 Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT transitive rust False a
737 search wasm-bindgen 0.2.127 Apache-2.0 OR MIT transitive rust False a
738 search wasm-bindgen-futures 0.4.77 Apache-2.0 OR MIT transitive rust False a
739 search wasm-bindgen-macro 0.2.127 Apache-2.0 OR MIT transitive rust False a
740 search wasm-bindgen-macro-support 0.2.127 Apache-2.0 OR MIT transitive rust False a
741 search wasm-bindgen-shared 0.2.127 Apache-2.0 OR MIT transitive rust False a
742 search web-sys 0.3.104 Apache-2.0 OR MIT transitive rust False a
743 search winapi 0.3.9 Apache-2.0 OR MIT transitive rust False a
744 search winapi-i686-pc-windows-gnu 0.4.0 Apache-2.0 OR MIT transitive rust False a
745 search winapi-x86_64-pc-windows-gnu 0.4.0 Apache-2.0 OR MIT transitive rust False a
746 search windows-link 0.2.1 Apache-2.0 OR MIT transitive rust False a
747 search windows-sys 0.52.0 Apache-2.0 OR MIT transitive rust False a
748 search windows-sys 0.59.0 Apache-2.0 OR MIT transitive rust False a
749 search windows-sys 0.61.2 Apache-2.0 OR MIT transitive rust False a
750 search windows-targets 0.52.6 Apache-2.0 OR MIT transitive rust False a
751 search windows_aarch64_gnullvm 0.52.6 Apache-2.0 OR MIT transitive rust False a
752 search windows_aarch64_msvc 0.52.6 Apache-2.0 OR MIT transitive rust False a
753 search windows_i686_gnu 0.52.6 Apache-2.0 OR MIT transitive rust False a
754 search windows_i686_gnullvm 0.52.6 Apache-2.0 OR MIT transitive rust False a
755 search windows_i686_msvc 0.52.6 Apache-2.0 OR MIT transitive rust False a
756 search windows_x86_64_gnu 0.52.6 Apache-2.0 OR MIT transitive rust False a
757 search windows_x86_64_gnullvm 0.52.6 Apache-2.0 OR MIT transitive rust False a
758 search windows_x86_64_msvc 0.52.6 Apache-2.0 OR MIT transitive rust False a
759 search writeable 0.6.4 Unicode-3.0 transitive rust False a
760 search yoke 0.8.3 Unicode-3.0 transitive rust False a
761 search yoke-derive 0.8.2 Unicode-3.0 transitive rust False a
762 search zerocopy 0.8.56 Apache-2.0 OR BSD-2-Clause OR MIT transitive rust False a
763 search zerofrom 0.1.8 Unicode-3.0 transitive rust False a
764 search zerofrom-derive 0.1.7 Unicode-3.0 transitive rust False a
765 search zerotrie 0.2.5 Unicode-3.0 transitive rust False a
766 search zerovec 0.11.7 Unicode-3.0 transitive rust False a
767 search zerovec-derive 0.11.4 Unicode-3.0 transitive rust False a
768 search zmij 1.0.23 MIT transitive rust False a
769 search zstd 0.13.3 MIT transitive rust False a
770 search zstd-safe 7.2.4 Apache-2.0 OR MIT transitive rust False a
771 search zstd-sys 2.0.16+zstd.1.5.7 Apache-2.0 OR MIT transitive rust False a
772 web Overpass (font) variable OFL-1.1 direct font-asset False a
773 web Overpass Mono (font) variable OFL-1.1 direct font-asset False a
774 web favicon.svg n/a MIT (Svelte project asset) direct vendored-asset True Copied from SvelteKit's default project scaffold (<title>svelte-logo</title>), never replaced with an original mark -- not a license-compatibility blocker (Svelte's own assets are MIT) but is unauthored, unattributed, third-party branded content shipping as this product's own favicon. Flagged for replacement, not a legal blocker. n/a-branding
775 transport redpanda (docker image) v24.2.7 BSL 1.1 (Business Source License) for Redpanda Core, as pinned (v24.2.7, released 2024-10-11) -- NOT yet converted to Apache-2.0 (4-year Change Date is ~2028-10-11). Source-available, not OSI-approved open source. Additional Use Grant permits any use except offering it as a hosted 'Streaming or Queuing Service' to third parties. direct docker-image True Category (c): BSL is explicitly source-available, not OSI-approved open source, per the audit's own classification framework. Verified against the actual licenses/bsl.md at the v24.2.7 tag, not assumed. No AGPL linking-compatibility issue (Redpanda is consumed only over the Kafka wire protocol, never linked into Sentry's own code -- same relationship as ClickHouse/Postgres). Real open question: whether a third party self-hosting Sentry (now fully AGPLv3 per task 6) 'as a service' would trip BSL's Streaming-or-Queuing-Service restriction on the bundled Redpanda image -- Sentry's ingest pipeline creates fixed internal topics, not per-end-user topics, so this is very likely NOT a Streaming-or-Queuing-Service under BSL's own definition, but this is a business/redistribution judgment call, not a pure technical one -- flagged for your decision, not resolved unilaterally. See license-audit-report.md's Redpanda section for the three remediation options (accept as-is / swap to Apache Kafka / flag only). RESOLVED 2026-08-16 (business decision): accept as-is. Sentry's own use (internal Kafka-protocol transport, no resale of broker access) is within BSL's Additional Use Grant; the third-party self-hosting-as-a-service question was judged unlikely to trip BSL's Streaming-or-Queuing-Service restriction, and was accepted as a known, disclosed risk rather than swapping to a heavier broker or dropping the bundled image. See license-audit-report.md's Redpanda section. c
776 storage clickhouse-server (docker image) 24.8 Apache-2.0, confirmed directly against ClickHouse's LICENSE file. No evidence of any historical license change (unlike Redpanda/Elastic/MongoDB) -- confirmed via web search plus direct file fetch, not assumed from general reputation. direct docker-image False a
777 metadata postgres (docker image) 16-alpine PostgreSQL License (OSI-approved, MIT/BSD-equivalent permissive terms), confirmed directly against the official postgres/postgres COPYRIGHT file. direct docker-image False a
File diff suppressed because it is too large Load Diff
+125
View File
@@ -0,0 +1,125 @@
# License policy
**This is a policy document derived from a first-pass compliance audit,
not a legal opinion.** See `/docs/compliance/license-audit-report.md`
for the audit itself and its findings; this document is the resulting
ongoing policy, enforced in CI (`.github/workflows/license-compliance.yml`)
on every PR across all three dependency ecosystems (Rust, Go, npm) plus
the deployment-image surface reviewed manually at audit time.
The entire project, including `enterprise/`, is licensed AGPLv3 as of
Phase 6 — there is no separate commercial-license carve-out anywhere in
this repo. Every third-party dependency must be compatible with AGPLv3
as the single project-wide license.
## Auto-allowed (CI passes without review)
These license families are pre-cleared as dependencies of AGPLv3/GPLv3
code — permissive licenses impose no copyleft obligation at all, and
MPL-2.0's file-level copyleft doesn't extend to a larger work that
merely links/imports MPL-covered code (MPL 2.0 §3.3, "Distribution of a
Larger Work"):
- MIT, MIT-0 ("MIT No Attribution")
- Apache-2.0 (including `Apache-2.0 WITH LLVM-exception`)
- BSD-2-Clause, BSD-3-Clause, 0BSD
- ISC
- MPL-2.0
- Unlicense, Zlib, Unicode-3.0, BSL-1.0 (Boost — not to be confused with
the *Business Source License*, also abbreviated BSL elsewhere in this
document; Boost's BSL-1.0 is a permissive OSI-approved license with no
relation to Redpanda's BSL 1.1)
CI enforcement:
- **Rust**: `cargo deny check licenses` against `agent/deny.toml` and
`search/deny.toml`'s `[licenses.allow]` list.
- **Go**: `go-licenses check ./... --allowed_licenses=...` per module
with real dependencies (see the workflow's matrix for the full list).
- **npm**: `license-checker --onlyAllow "..."` against `web`'s
dependency tree.
A dependency whose *only* license is outside this list fails CI. A
dependency offering one of these licenses as *one option* in an SPDX OR
expression (e.g. `MIT OR Apache-2.0 OR LGPL-2.1-or-later`) passes,
because we elect the permissive branch — this is a normal, standard
reading of a disjunctive license grant, not a loophole.
## Requires manual review (category b)
Anything not on the auto-allowed list and not obviously incompatible
needs a human to actually read the license and record reasoning here or
in the audit report before merging — not a guess, and not a silent
`--ignore`/allow-list addition. This includes:
- Other copyleft licenses not listed above: LGPL (any version), EPL,
CDDL, and similar. The specific question that matters is usually
*how* the code is consumed — a dynamically-linked/networked LGPL
dependency is generally fine; statically linking LGPL code into an
AGPL binary is murkier for some LGPL versions and needs a real
per-case read, not a blanket rule.
- Dual/multi-licensed packages where *none* of the offered licenses is
on the auto-allowed list.
- Anything with a custom license file rather than a standard SPDX
identifier, unless it's been manually confirmed (as
`github.com/segmentio/asm`'s "MIT No Attribution" text was at audit
time — SPDX `MIT-0`, added to the CI ignore list with that
citation, not silently allowed) — a new custom-licensed dependency
should not get the same free pass without its own confirmation.
- Docker/container base images pulled into `docker-compose.yml` or
`/deploy` — not covered by any of the three CI dependency scans above,
since they're not a language-ecosystem dependency. Reviewed manually
at audit time (Redpanda, ClickHouse, Postgres); a new base image needs
the same manual check, not an assumption that "it's just
infrastructure."
## Rejected (category c)
Not usable as a dependency of this project without an explicit,
recorded exception:
- Source-available licenses that aren't OSI-approved open source: BSL
(Business Source License), SSPL (Server Side Public License), Commons
Clause, and similar "free to use except..." terms.
- Any license with a field-of-use restriction or a "non-compete" clause
(e.g. "may not be used to offer a competing hosted service").
- "Free for non-commercial use" or similarly non-open terms.
**Known, accepted exception**: Redpanda (the
`docker.redpanda.com/redpandadata/redpanda` image pinned in
`docker-compose.yml`/`transport/`) ships under BSL 1.1 as of the pinned
version (v24.2.7), confirmed against the actual license file at that
tag, not assumed. This is consumed only as an external networked
Kafka-protocol broker — never linked into any AGPLv3 binary — so it
doesn't create an AGPL compatibility problem in the traditional linking
sense, and BSL's specific restriction (no reselling direct broker access
as a hosted streaming/queuing service) doesn't obviously apply to how
this project uses it. **Decision recorded 2026-08-16: accept as-is**
see the audit report's Redpanda section for the full reasoning, the
other two remediation options that were considered and not chosen, and
the condition under which this decision should be revisited (an
official hosted/managed Sentry offering). A future change to Redpanda's
license, or to this project's own redistribution posture, should trigger
re-review, not silently ride on this entry.
## What CI does not cover
The automated checks above only see what a package manager sees. They
do not catch:
- Vendored/copied code not declared as a dependency (checked manually
at audit time via a repo-wide grep for copy/attribution markers — see
the audit report's methodology section; not re-run automatically).
- Font files, icon packs, or other design assets (also checked manually
at audit time).
- Docker base images (see above).
A new instance of any of these needs the same manual treatment the
original audit gave — this policy doesn't claim CI makes the project
audit-proof going forward, only that *dependency-manifest* drift is
caught automatically.
## Legal disclaimer
This policy, and the audit it's derived from, is a strong first pass —
not a legal opinion. It should be reviewed by actual legal counsel
before the project is publicly released, pitched to customers, or used
as the basis for any compliance claim.
+5 -2
View File
@@ -42,8 +42,11 @@ boundary text names multi-tenancy as enterprise-gated, and a
"mechanism in core, feature in enterprise" split would have let a "mechanism in core, feature in enterprise" split would have let a
sufficiently motivated self-hosting AGPL user wire up real isolation sufficiently motivated self-hosting AGPL user wire up real isolation
without ever touching `enterprise/` — undermining that boundary in without ever touching `enterprise/` — undermining that boundary in
substance even while technically respecting the AGPL/commercial import substance even while technically respecting the import graph (at the
graph. Confirmed: enterprise-only. time, an AGPL/commercial split; as of Phase 6, `enterprise/` is AGPLv3
too, so the import graph is now the whole reason this boundary exists,
not a proxy for a licensing one — see
`/docs/compliance/license-audit-report.md`). Confirmed: enterprise-only.
Mechanically, this works because `api/internal/querylang/executor` Mechanically, this works because `api/internal/querylang/executor`
already defines the seam Phase 2 needs regardless of tenancy: already defines the seam Phase 2 needs regardless of tenancy:
+7 -4
View File
@@ -192,10 +192,13 @@ replacement for it. Full middleware/handler wiring is task 5's scope.
## Web UI boundary: a runtime capability check, not a conditional import ## Web UI boundary: a runtime capability check, not a conditional import
Core `web` never bundles enterprise-licensed Svelte components into its Core `web` never bundles `enterprise/`'s Svelte components into its
build — that would put commercial-licensed source inside an AGPL build (at the time this was written, that would have put
artifact, the UI-layer equivalent of the Go import-boundary problem commercial-licensed source inside an AGPL artifact; as of Phase 6 both
`hack/check-tenant-boundary.sh` already guards against. Instead: core are AGPLv3, but the architectural separation stands on its own merits —
core builds and ships standalone, the UI-layer equivalent of the Go
import-boundary problem `hack/check-tenant-boundary.sh` already guards
against). Instead: core
`web` ships a generic settings/admin route `web` ships a generic settings/admin route
(`web/src/routes/settings/+page.svelte`, added in task 5) that, on load, (`web/src/routes/settings/+page.svelte`, added in task 5) that, on load,
calls `GET {enterprise-auth base URL}/auth/features` and renders calls `GET {enterprise-auth base URL}/auth/features` and renders
+7 -4
View File
@@ -355,8 +355,9 @@ docker run --rm --network sentry_default -v $(pwd)/api:/src -w /src \
earlier in Phase 4, once `enterprise/cmd/enterprise-api` needed to earlier in Phase 4, once `enterprise/cmd/enterprise-api` needed to
import it: Go's compiler-enforced `internal/` visibility rule meant a import it: Go's compiler-enforced `internal/` visibility rule meant a
separate module like `enterprise/` could never import anything under separate module like `enterprise/` could never import anything under
`api/internal/...`, regardless of the AGPL/commercial licensing `api/internal/...`, regardless of the licensing boundary (AGPL/commercial
boundary, which only forbids the reverse direction.) at the time this was written; both AGPLv3 as of Phase 6), which only
forbids the reverse direction.)
Expect all `TestIntegration*` tests to pass, including Expect all `TestIntegration*` tests to pass, including
`TestIntegrationDashboardTenantForeignKeyRejectsUnknownTenant` (the `TestIntegrationDashboardTenantForeignKeyRejectsUnknownTenant` (the
@@ -921,8 +922,10 @@ same registry the read side (§9) already uses -- routing each record's
write into its own tenant's Tantivy index instead of the single default write into its own tenant's Tantivy index instead of the single default
one. No "second binary" was needed here the way ClickHouse needed one. No "second binary" was needed here the way ClickHouse needed
`enterprise-ingest`: Tantivy has no grant system to gate a `enterprise-ingest`: Tantivy has no grant system to gate a
commercially-licensed credential behind, so `IndexRegistry` already separately-credentialed binary behind (commercially licensed at the
lives directly in AGPL-core `search`, and read/write just share it. time this was written; AGPLv3 as of Phase 6, though the architectural
point never depended on that), so `IndexRegistry` already lives directly
in AGPL-core `search`, and read/write just share it.
Because Tantivy is an embedded library (no Docker/broker needed to Because Tantivy is an embedded library (no Docker/broker needed to
exercise real logic), this actually ran in this environment: exercise real logic), this actually ran in this environment:
+17 -7
View File
@@ -167,9 +167,14 @@ always into the default index — genuinely verified in this environment,
same as the read-side Tantivy claim above, since Tantivy is an embedded same as the read-side Tantivy claim above, since Tantivy is an embedded
library with no Docker dependency. No "second binary" was needed here, library with no Docker dependency. No "second binary" was needed here,
unlike ClickHouse: Tantivy has no grant system to gate a unlike ClickHouse: Tantivy has no grant system to gate a
commercially-licensed credential behind, so `IndexRegistry` already separately-credentialed binary behind, so `IndexRegistry` already lived
lived directly in this AGPL-core `search` binary, and read/write simply directly in this AGPL-core `search` binary, and read/write simply share
share it. This write path is now also active-tenant-gated: it. (This reasoning predates Phase 6's relicensing of `enterprise/` to
AGPLv3 and originally referred to a commercially-licensed credential --
restated here because the architectural point holds independent of
licensing: Tantivy still has no grant system, so the split was never
about which license `enterprise/` carried.)
This write path is now also active-tenant-gated:
`search/src/tenants.rs`'s `ActiveTenantTracker` polls a new `search/src/tenants.rs`'s `ActiveTenantTracker` polls a new
`GET /internal/active-tenants` endpoint on `enterprise-auth` every 60 `GET /internal/active-tenants` endpoint on `enterprise-auth` every 60
seconds (RoleService-credentialed, the same auth shape `alerting` uses seconds (RoleService-credentialed, the same auth shape `alerting` uses
@@ -245,10 +250,15 @@ design doc doesn't yet cover, not just an implementation gap.
## Module boundary (trust boundary #1) ## Module boundary (trust boundary #1)
`enterprise/` (commercial license: SSO, RBAC storage, audit logging, `enterprise/` (SSO, RBAC storage, audit logging, session issuance — AGPLv3,
session issuance) is never imported by AGPL core (`/api`, `/alerting`, same as core as of Phase 6, see `/docs/compliance/license-audit-report.md`)
`/web`, `/cli`) — enforced in CI by `hack/check-tenant-boundary.sh`, is never imported by core (`/api`, `/alerting`, `/web`, `/cli`) —
which greps for the import edge on every build. Core calls enforced in CI by `hack/check-tenant-boundary.sh`, which greps for the
import edge on every build. This is an architectural trust boundary, not
a licensing one: it keeps core buildable and deployable with zero
multi-tenant mechanism present regardless of what license either side
carries, and keeps tenant identity resolution server-side rather than
trusting a request parameter. Core calls
`enterprise-auth` over plain HTTP (`api/authz.HTTPAuthorizer`), `enterprise-auth` over plain HTTP (`api/authz.HTTPAuthorizer`),
forwarding only the `Cookie`/`Authorization` headers, never the full forwarding only the `Cookie`/`Authorization` headers, never the full
request (`api/authz/httpauthz_test.go` asserts this — an request (`api/authz/httpauthz_test.go` asserts this — an
+1 -1
View File
@@ -1,4 +1,4 @@
# Commercial-license module, built like every other Go service here -- # AGPLv3 module (same as core as of Phase 6), built like every other Go service here --
# context must be the repo root, not enterprise/ alone. enterprise/go.mod # context must be the repo root, not enterprise/ alone. enterprise/go.mod
# has replace directives for api/, ingest/, and proto/ (all resolved as # has replace directives for api/, ingest/, and proto/ (all resolved as
# sibling directories, e.g. ../api), and enterprise-auth needs api/ # sibling directories, e.g. ../api), and enterprise-auth needs api/
+16 -8
View File
@@ -1,13 +1,21 @@
# enterprise # enterprise
**Commercial license, not AGPLv3** — see `/CLAUDE.md`'s licensing **AGPLv3, same as core** (relicensed from a commercial-license stub as
boundary. SSO (OIDC/SAML), tenant provisioning, and RBAC. Nothing in of Phase 6 — see `/docs/compliance/license-audit-report.md`'s
`/agent`, `/ingest`, `/storage`, `/api`, `/web` core, or `/cli` imports "enterprise/ relicensing" section for the record of that decision and
from this module — confirmed by `hack/check-tenant-boundary.sh`, run in what it means). SSO (OIDC/SAML), tenant provisioning, and RBAC. Nothing
CI. `enterprise/` supplies tenant-scoped implementations of core's in `/agent`, `/ingest`, `/storage`, `/api`, `/web` core, or `/cli`
already-shipped `api/querylang/executor.SQLRunner`/ imports from this module — confirmed by `hack/check-tenant-boundary.sh`,
`SearchClient` interfaces rather than core growing tenant awareness — run in CI. This is now an *architectural* boundary only, not a licensing
see `/docs/phase-4-isolation-design.md` for why. one: keeps core buildable and deployable with zero multi-tenant
mechanism present even though both sides carry the same license, and
preserves the network-trust-boundary design
`/docs/phase-4-isolation-design.md` describes (tenant identity is
resolved server-side, never taken from a request parameter). `enterprise/`
supplies tenant-scoped implementations of core's already-shipped
`api/querylang/executor.SQLRunner`/`SearchClient` interfaces rather than
core growing tenant awareness — see `/docs/phase-4-isolation-design.md`
for why.
## Status ## Status
+7 -4
View File
@@ -5,9 +5,12 @@
# every change; both checks exit non-zero (and print the offending lines) # every change; both checks exit non-zero (and print the offending lines)
# on a violation. # on a violation.
# #
# 1. No AGPL-core Go code imports enterprise/ -- core must stay # 1. No core Go code imports enterprise/ -- core must stay genuinely
# genuinely single-tenant with zero multi-tenant mechanism present, # single-tenant with zero multi-tenant mechanism present. This was
# per the licensing-boundary decision confirmed for Phase 4. # originally also a licensing boundary (enterprise/ was
# commercial-licensed through Phase 5); as of Phase 6 both sides are
# AGPLv3, so this is now purely architectural -- see
# /docs/compliance/license-audit-report.md.
# 2. tenant.TrustFromValidatedSession is called, in non-test production # 2. tenant.TrustFromValidatedSession is called, in non-test production
# code, only from the auth-middleware allowlist below -- everywhere # code, only from the auth-middleware allowlist below -- everywhere
# else is either a mistake or a new call site that needs the same # else is either a mistake or a new call site that needs the same
@@ -22,7 +25,7 @@ fail=0
echo "Checking: no core Go package imports enterprise/..." echo "Checking: no core Go package imports enterprise/..."
# Core = every top-level Go module except enterprise/ and hack/ (hack/ # Core = every top-level Go module except enterprise/ and hack/ (hack/
# tooling isn't shipped, and load-test/fixture scripts have no reason to # tooling isn't shipped, and load-test/fixture scripts have no reason to
# import enterprise/ either, but they're not part of the licensing # import enterprise/ either, but they're not part of the architectural
# boundary claim, so they're excluded rather than asserted about). # boundary claim, so they're excluded rather than asserted about).
core_hits="$(grep -rn '"github.com/sentry/sentry/enterprise' \ core_hits="$(grep -rn '"github.com/sentry/sentry/enterprise' \
--include='*.go' \ --include='*.go' \
+2 -1
View File
@@ -42,7 +42,8 @@ This package (AGPL core) only ever writes to one shared ClickHouse
database, regardless of any `tenant_id` tag a message carries -- routing database, regardless of any `tenant_id` tag a message carries -- routing
a tagged record into its own tenant's dedicated database is a tagged record into its own tenant's dedicated database is
`enterprise/internal/chwriter` and `enterprise/cmd/enterprise-ingest`'s `enterprise/internal/chwriter` and `enterprise/cmd/enterprise-ingest`'s
job (commercial-licensed, per `/CLAUDE.md`'s licensing boundary), not job (a separate module by architectural convention, not a licensing
split -- both are AGPLv3, see `/CLAUDE.md`'s licensing boundary), not
this package's. `consumer` and `clickhousewriter` live outside this package's. `consumer` and `clickhousewriter` live outside
`internal/` (moved there once `enterprise/internal/chwriter` needed to `internal/` (moved there once `enterprise/internal/chwriter` needed to
import them directly -- Go's compiler-enforced `internal/` visibility import them directly -- Go's compiler-enforced `internal/` visibility
+3 -2
View File
@@ -5,8 +5,9 @@
// tenant -- same reasoning api/internal/dashboards and friends moved out // tenant -- same reasoning api/internal/dashboards and friends moved out
// of internal/ earlier in Phase 4: Go's compiler-enforced internal/ // of internal/ earlier in Phase 4: Go's compiler-enforced internal/
// visibility blocks a separate module (enterprise/) from importing // visibility blocks a separate module (enterprise/) from importing
// anything under ingest/internal/..., regardless of what the AGPL/ // anything under ingest/internal/..., independent of licensing --
// commercial licensing boundary itself would otherwise allow. // both modules are AGPLv3 as of Phase 6, and this was always an
// import-graph constraint, not a license one.
package clickhousewriter package clickhousewriter
import ( import (
@@ -1,9 +1,9 @@
// Package tenantresolver is ingest's HTTP client for resolving an // Package tenantresolver is ingest's HTTP client for resolving an
// agent-presented ingest credential to a tenant -- calls enterprise- // agent-presented ingest credential to a tenant -- calls enterprise-
// auth's POST /internal/authorize-ingest over the network, never // auth's POST /internal/authorize-ingest over the network, never
// importing enterprise/ (ingest is AGPL core; enterprise/ is // importing enterprise/ (both ingest and enterprise/ are AGPLv3 as of
// commercial-licensed and must never be imported by core code -- same // Phase 6; the import boundary is architectural, not a licensing wall --
// "network boundary, not import boundary" shape api/authz.HTTPAuthorizer // same "network boundary, not import boundary" shape api/authz.HTTPAuthorizer
// already uses for the query path, and enterprise-auth's own doc // already uses for the query path, and enterprise-auth's own doc
// comment on POST /internal/authorize-ingest). nil (no resolver // comment on POST /internal/authorize-ingest). nil (no resolver
// configured) is grpcserver.Server's documented no-op default -- // configured) is grpcserver.Server's documented no-op default --
+264
View File
@@ -0,0 +1,264 @@
# This template contains all of the possible sections and their default values
# Note that all fields that take a lint level have these possible values:
# * deny - An error will be produced and the check will fail
# * warn - A warning will be produced, but the check will not fail
# * allow - No warning or error will be produced, though in some cases a note
# will be
# The values provided in this template are the default values that will be used
# when any section or field is not specified in your own configuration
# Root options
# The graph table configures how the dependency graph is constructed and thus
# which crates the checks are performed against
[graph]
# If 1 or more target triples (and optionally, target_features) are specified,
# only the specified targets will be checked when running `cargo deny check`.
# This means, if a particular package is only ever used as a target specific
# dependency, such as, for example, the `nix` crate only being used via the
# `target_family = "unix"` configuration, that only having windows targets in
# this list would mean the nix crate, as well as any of its exclusive
# dependencies not shared by any other crates, would be ignored, as the target
# list here is effectively saying which targets you are building for.
targets = [
# The triple can be any string, but only the target triples built in to
# rustc (as of 1.40) can be checked against actual config expressions
#"x86_64-unknown-linux-musl",
# You can also specify which target_features you promise are enabled for a
# particular target. target_features are currently not validated against
# the actual valid features supported by the target architecture.
#{ triple = "wasm32-unknown-unknown", features = ["atomics"] },
]
# When creating the dependency graph used as the source of truth when checks are
# executed, this field can be used to prune crates from the graph, removing them
# from the view of cargo-deny. This is an extremely heavy hammer, as if a crate
# is pruned from the graph, all of its dependencies will also be pruned unless
# they are connected to another crate in the graph that hasn't been pruned,
# so it should be used with care. The identifiers are [Package ID Specifications]
# (https://doc.rust-lang.org/cargo/reference/pkgid-spec.html)
#exclude = []
# If true, metadata will be collected with `--all-features`. Note that this can't
# be toggled off if true, if you want to conditionally enable `--all-features` it
# is recommended to pass `--all-features` on the cmd line instead
all-features = false
# If true, metadata will be collected with `--no-default-features`. The same
# caveat with `all-features` applies
no-default-features = false
# If set, these feature will be enabled when collecting metadata. If `--features`
# is specified on the cmd line they will take precedence over this option.
#features = []
# The output table provides options for how/if diagnostics are outputted
[output]
# When outputting inclusion graphs in diagnostics that include features, this
# option can be used to specify the depth at which feature edges will be added.
# This option is included since the graphs can be quite large and the addition
# of features from the crate(s) to all of the graph roots can be far too verbose.
# This option can be overridden via `--feature-depth` on the cmd line
feature-depth = 1
# This section is considered when running `cargo deny check advisories`
# More documentation for the advisories section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/advisories/cfg.html
[advisories]
# The path where the advisory databases are cloned/fetched into
#db-path = "$CARGO_HOME/advisory-dbs"
# The url(s) of the advisory databases to use
#db-urls = ["https://github.com/rustsec/advisory-db"]
# A list of advisory IDs to ignore. Note that ignored advisories will still
# output a note when they are encountered.
ignore = [
#"RUSTSEC-0000-0000",
#{ id = "RUSTSEC-0000-0000", reason = "you can specify a reason the advisory is ignored" },
#"[email protected]", # you can also ignore yanked crate versions if you wish
#{ crate = "[email protected]", reason = "you can specify why you are ignoring the yanked crate" },
]
# If this is true, then cargo deny will use the git executable to fetch advisory database.
# If this is false, then it uses a built-in git library.
# Setting this to true can be helpful if you have special authentication requirements that cargo-deny does not support.
# See Git Authentication for more information about setting up git authentication.
#git-fetch-with-cli = true
# This section is considered when running `cargo deny check licenses`
# More documentation for the licenses section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/licenses/cfg.html
[licenses]
# List of explicitly allowed licenses
# See https://spdx.org/licenses/ for list of possible licenses
# [possible values: any SPDX 3.11 short identifier (+ optional exception)].
# Sentry's own AGPLv3-project license policy (Phase 6 license audit --
# see /docs/compliance/license-policy.md for the full rationale per
# category). Every license actually found in this crate's dependency
# tree at audit time is listed explicitly here, not just the common
# ones, so a genuinely new license shows up as a real CI failure, not
# something silently covered by a broad wildcard.
allow = [
"MIT",
"Apache-2.0",
"Apache-2.0 WITH LLVM-exception",
"BSD-2-Clause",
"BSD-3-Clause",
"ISC",
"0BSD",
"BSL-1.0",
"MPL-2.0",
"Unicode-3.0",
"Unlicense",
"Zlib",
"AGPL-3.0-only", # this project's own crates
]
# Deliberately NOT in the blanket allow list: LGPL-2.1-or-later,
# zlib-acknowledgement. Both currently appear only on crates that also
# offer a permissive alternative in an SPDX OR expression (r-efi:
# "MIT OR Apache-2.0 OR LGPL-2.1-or-later"; fastdivide:
# "MIT OR zlib-acknowledgement") -- cargo-deny accepts a crate if ANY
# license in its OR expression is allowed, so these pass via MIT/Apache-2.0
# without either weaker-copyleft license needing a blanket allow. A future
# crate offering ONLY one of these, with no permissive alternative, should
# fail this check and get manual (b)-category review, not sail through.
# The confidence threshold for detecting a license from license text.
# The higher the value, the more closely the license text must be to the
# canonical license text of a valid SPDX license file.
# [possible values: any between 0.0 and 1.0].
confidence-threshold = 0.8
# Allow 1 or more licenses on a per-crate basis, so that particular licenses
# aren't accepted for every possible crate as with the normal allow list
exceptions = [
# Each entry is the crate and version constraint, and its specific allow
# list
#{ allow = ["Zlib"], crate = "adler32" },
]
# Some crates don't have (easily) machine readable licensing information,
# adding a clarification entry for it allows you to manually specify the
# licensing information
#[[licenses.clarify]]
# The package spec the clarification applies to
#crate = "ring"
# The SPDX expression for the license requirements of the crate
#expression = "MIT AND ISC AND OpenSSL"
# One or more files in the crate's source used as the "source of truth" for
# the license expression. If the contents match, the clarification will be used
# when running the license check, otherwise the clarification will be ignored
# and the crate will be checked normally, which may produce warnings or errors
# depending on the rest of your configuration
#license-files = [
# Each entry is a crate relative path, and the (opaque) hash of its contents
#{ path = "LICENSE", hash = 0xbd0eed23 }
#]
[licenses.private]
# If true, ignores workspace crates that aren't published, or are only
# published to private registries.
# To see how to mark a crate as unpublished (to the official registry),
# visit https://doc.rust-lang.org/cargo/reference/manifest.html#the-publish-field.
ignore = false
# One or more private registries that you might publish crates to, if a crate
# is only published to private registries, and ignore is true, the crate will
# not have its license(s) checked
registries = [
#"https://sekretz.com/registry
]
# This section is considered when running `cargo deny check bans`.
# More documentation about the 'bans' section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/bans/cfg.html
[bans]
# Lint level for when multiple versions of the same crate are detected
multiple-versions = "warn"
# Lint level for when a crate version requirement is `*`
wildcards = "allow"
# The graph highlighting used when creating dotgraphs for crates
# with multiple versions
# * lowest-version - The path to the lowest versioned duplicate is highlighted
# * simplest-path - The path to the version with the fewest edges is highlighted
# * all - Both lowest-version and simplest-path are used
highlight = "all"
# The default lint level for `default` features for crates that are members of
# the workspace that is being checked. This can be overridden by allowing/denying
# `default` on a crate-by-crate basis if desired.
workspace-default-features = "allow"
# The default lint level for `default` features for external crates that are not
# members of the workspace. This can be overridden by allowing/denying `default`
# on a crate-by-crate basis if desired.
external-default-features = "allow"
# List of crates that are allowed. Use with care!
allow = [
#"[email protected]",
#{ crate = "[email protected]", reason = "you can specify a reason it is allowed" },
]
# If true, workspace members are automatically allowed even when using deny-by-default
# This is useful for organizations that want to deny all external dependencies by default
# but allow their own workspace crates without having to explicitly list them
allow-workspace = false
# List of crates to deny
deny = [
#"[email protected]",
#{ crate = "[email protected]", reason = "you can specify a reason it is banned" },
# Wrapper crates can optionally be specified to allow the crate when it
# is a direct dependency of the otherwise banned crate
#{ crate = "[email protected]", wrappers = ["this-crate-directly-depends-on-ansi_term"] },
]
# List of features to allow/deny
# Each entry the name of a crate and a version range. If version is
# not specified, all versions will be matched.
#[[bans.features]]
#crate = "reqwest"
# Features to not allow
#deny = ["json"]
# Features to allow
#allow = [
# "rustls",
# "__rustls",
# "__tls",
# "hyper-rustls",
# "rustls",
# "rustls-pemfile",
# "rustls-tls-webpki-roots",
# "tokio-rustls",
# "webpki-roots",
#]
# If true, the allowed features must exactly match the enabled feature set. If
# this is set there is no point setting `deny`
#exact = true
# Certain crates/versions that will be skipped when doing duplicate detection.
skip = [
#"[email protected]",
#{ crate = "[email protected]", reason = "you can specify a reason why it can't be updated/removed" },
]
# Similarly to `skip` allows you to skip certain crates during duplicate
# detection. Unlike skip, it also includes the entire tree of transitive
# dependencies starting at the specified crate, up to a certain depth, which is
# by default infinite.
skip-tree = [
#"[email protected]", # will be skipped along with _all_ of its direct and transitive dependencies
#{ crate = "[email protected]", depth = 20 },
]
# This section is considered when running `cargo deny check sources`.
# More documentation about the 'sources' section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/sources/cfg.html
[sources]
# Lint level for what to happen when a crate from a crate registry that is not
# in the allow list is encountered
unknown-registry = "warn"
# Lint level for what to happen when a crate from a git repository that is not
# in the allow list is encountered
unknown-git = "warn"
# List of URLs for allowed crate registries. Defaults to the crates.io index
# if not specified. If it is specified but empty, no registries are allowed.
allow-registry = ["https://github.com/rust-lang/crates.io-index"]
# List of URLs for allowed Git repositories
allow-git = []
[sources.allow-org]
# github.com organizations to allow git sources for
github = []
# gitlab.com organizations to allow git sources for
gitlab = []
# bitbucket.org organizations to allow git sources for
bitbucket = []
+4 -2
View File
@@ -192,8 +192,10 @@ attribute" above.
surface) -- meaningfully different auth model (offline operator flags surface) -- meaningfully different auth model (offline operator flags
today, not a stable REST API a provider could safely drive today, not a stable REST API a provider could safely drive
idempotently -- see `/enterprise/README.md`'s "Bootstrapping a tenant" idempotently -- see `/enterprise/README.md`'s "Bootstrapping a tenant"
section) and Phase 4 commercial licensing, so this would need its own section), so this would need its own design pass, not just "add
design pass, not just "add another resource file." another resource file." (Not a licensing question as of Phase 6 --
`enterprise/` is AGPLv3 same as this provider module; the blocker is
purely that the underlying API isn't idempotent-safe yet.)
- Publishing to the real Terraform Registry -- `main.go`'s `Address` - Publishing to the real Terraform Registry -- `main.go`'s `Address`
(`registry.terraform.io/sentry/sentry`) is the address a real (`registry.terraform.io/sentry/sentry`) is the address a real
publication would use, but nothing has actually been published; local publication would use, but nothing has actually been published; local
+1
View File
@@ -1,6 +1,7 @@
{ {
"name": "web", "name": "web",
"private": true, "private": true,
"license": "AGPL-3.0-only",
"version": "0.0.1", "version": "0.0.1",
"type": "module", "type": "module",
"scripts": { "scripts": {
+7 -5
View File
@@ -5,11 +5,13 @@
export const apiBase = import.meta.env.VITE_API_BASE_URL ?? 'http://localhost:8080'; export const apiBase = import.meta.env.VITE_API_BASE_URL ?? 'http://localhost:8080';
export const alertingBase = import.meta.env.VITE_ALERTING_API_BASE_URL ?? 'http://localhost:8081'; export const alertingBase = import.meta.env.VITE_ALERTING_API_BASE_URL ?? 'http://localhost:8081';
// Optional third backend (Phase 4, commercial-license) -- undefined in a // Optional third backend (Phase 4; enterprise/ is AGPLv3 same as core
// deployment that hasn't built/deployed enterprise-auth, same "runtime // as of Phase 6, but stays a separate optional service architecturally)
// capability check" shape /docs/phase-4-rbac-design.md's Web UI boundary // -- undefined in a deployment that hasn't built/deployed enterprise-auth,
// section describes. getAuthFeatures below treats a missing base URL the // same "runtime capability check" shape /docs/phase-4-rbac-design.md's
// same as a failed fetch: everything reports disabled, no broken links. // Web UI boundary section describes. getAuthFeatures below treats a
// missing base URL the same as a failed fetch: everything reports
// disabled, no broken links.
export const enterpriseAuthBase = import.meta.env.VITE_ENTERPRISE_AUTH_BASE_URL as string | undefined; export const enterpriseAuthBase = import.meta.env.VITE_ENTERPRISE_AUTH_BASE_URL as string | undefined;
export type Language = '' | 'sql' | 'spl'; export type Language = '' | 'sql' | 'spl';
+100 -6
View File
@@ -1,7 +1,101 @@
Overpass and Overpass Mono are licensed under the SIL Open Font License, Copyright 2015 Red Hat, Inc.,
Version 1.1: https://openfontlicense.org/
Fetched from Google Fonts (fonts.google.com/specimen/Overpass, This Font Software is licensed under the SIL Open Font License, Version 1.1.
fonts.google.com/specimen/Overpass+Mono) and self-hosted here rather than This license is copied below, and is also available with a FAQ at:
loaded from a CDN, so the app has no runtime dependency on Google's font http://scripts.sil.org/OFL
service.
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply to any
document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components
as distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to
a new environment.
"Author" refers to any designer, engineer, programmer, technical writer
or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining a
copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components, in
Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or in
the appropriate machine-readable metadata fields within text or binary
files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the
corresponding Copyright Holder. This restriction only applies to the
primary font name as presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any Modified
Version, except to acknowledge the contribution(s) of the Copyright
Holder(s) and the Author(s) or with their explicit written permission.
5) The Font Software, modified or unmodified, in part or in whole, must
be distributed entirely under this license, and must not be distributed
under any other license. The requirement for fonts to remain under this
license does not apply to any document created using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER
DEALINGS IN THE FONT SOFTWARE.
---
Project note (not part of the license): fetched from Google Fonts
(fonts.google.com/specimen/Overpass, fonts.google.com/specimen/Overpass+Mono)
and self-hosted here rather than loaded from a CDN, so the app has no
runtime dependency on Google's font service. Text above is the unmodified
OFL-1.1 license as published at github.com/googlefonts/overpass, the
source repository these files were fetched from.