iceberg
AGENTS.md9.4k starsChanged 46 days agoApache-2.0View on GitHub
http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Project conventions, architecture, and coding patterns synthesized from 58,000+ review comments across 4,300+ merged PRs. Reviewer attention is the project's scarcest resource. When a rule below is ambiguous, pick the option…
Trending
Steady talk.about the whole repository
Who's talking about apache/iceberg
- apache/iceberg-rust“[EPIC] Iceberg-rust Write support”GitHub · Nov 18, 2024 · 62 reactions
- apache/iceberg-python“Support partitioned writes”GitHub · Dec 12, 2023 · 43 reactions
- apache/polaris“[FEATURE REQUEST] On-Premise S3 & Remote Signing”GitHub · Jul 31, 2024 · 32 reactions
- apache/parquet-format“PARQUET-2471: Add GEOMETRY and GEOGRAPHY logical types”GitHub · May 10, 2024 · 30 reactions
- apache/iceberg-python“Python write support ”GitHub · Oct 2, 2023 · 28 reactions
The biggest 5 of 42 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 42
Talked about on GitHub, Stack Overflow, Hacker News, Bluesky and the web (42 times).
On GitHub · 29
- Nov 18, 2024[EPIC] Iceberg-rust Write support — apache/iceberg-rust62 reactions · 25 comments
- Dec 12, 2023Support partitioned writes — apache/iceberg-python43 reactions · 45 comments
- Jul 31, 2024[FEATURE REQUEST] On-Premise S3 & Remote Signing — apache/polaris32 reactions · 64 comments
- May 10, 2024PARQUET-2471: Add GEOMETRY and GEOGRAPHY logical types — apache/parquet-format30 reactions · 78 comments
- Oct 2, 2023Python write support — apache/iceberg-python28 reactions · 2 comments
24 more on GitHub
- Oct 6, 2023[Feature] Add support iceberg table — apache/datafusion-ballista19 reactions · 4 comments
- Mar 29, 2022Support Nessie Catalog in Iceberg connector — trinodb/trino19 reactions · 56 comments
- Oct 2, 2023Support Nessie catalog — apache/iceberg-python16 reactions · 28 comments
- Dec 20, 2024Add support for variant type in Iceberg — trinodb/trino13 reactions · 13 comments
- Oct 16, 2020Add support for HDFS only iceberg tables — trinodb/trino13 reactions · 1 comment
- Nov 24, 2025Support geo types — apache/iceberg-rust12 reactions · 12 comments
- Dec 18, 2024[EPIC] feat: support metadata tables — apache/iceberg-rust12 reactions · 15 comments
- Jun 13, 2024[feature request] Add additional Iceberg REST Catalog endpoints — unitycatalog/unitycatalog12 reactions · 6 comments
- Oct 2, 2023Expose PyIceberg table as PyArrow Dataset — apache/iceberg-python12 reactions · 25 comments
- Dec 16, 2024Is this deprecated/replaced? — databricks/iceberg-kafka-connect11 reactions · 2 comments
- Sep 20, 2024ENH: Geometry native type to Iceberg connector — trinodb/trino11 reactions · 7 comments
- Jun 14, 2024Support IsolationLevels and Concurrency Safety Validation Checks — apache/iceberg-python11 reactions · 18 comments
- Mar 7, 2024Explore integration with Delta Lake — apache/datafusion-comet11 reactions · 11 comments
- Sep 26, 2024[feature request] Support reading equality delete files — apache/iceberg-python10 reactions · 10 comments
- Nov 30, 2024[EPIC] Support Puffin file format — apache/iceberg-rust9 reactions · 5 comments
- Apr 24, 2024Tracking issues of iceberg-rust v0.3.0 — apache/iceberg-rust9 reactions · 12 comments
- Apr 18, 2023[Feature Request] Add support for Storage Partitioned Joins (SPJ) introduced in Spark v3.3 — delta-io/delta9 reactions · 4 comments
- Jun 4, 2022Add Apache Iceberg IO connector — apache/beam9 reactions · 16 comments
- Aug 11, 2025Pluggable Scan Planning — apache/iceberg-python8 reactions · 3 comments
- Sep 17, 2025feat: Support for V3 Metadata — apache/iceberg-rust7 reactions · 5 comments
- Jan 14, 2026feat(encryption) [1/N] Support encryption: Add crypto for AES-GCM — apache/iceberg-rust6 reactions · 15 comments
- Oct 10, 2025Check storage-credentials before config in table response — apache/iceberg-python6 reactions · 5 comments
- Jul 29, 2025Add delete file index to pyiceberg and support equality delete reads — apache/iceberg-python6 reactions · 14 comments
- Jul 16, 2026feat: Add support for reading/writing vortex in iceberg — apache/iceberg-rust5 reactions · 7 comments
On Stack Overflow · 10
- Aug 1, 2024Azure Databricks Hadoop Streaming Error for Read From Apache Iceberg2 votes
- Aug 6, 2024apache-iceberg fixing found conflicting files that can contain records matching true1 vote
- Aug 5, 2024apache-iceberg fixing found conflicting files that can contain records matching true1 vote · 1 answer
- Dec 13, 2023org.apache.spark.unsafe.types.UTF8String cannot be cast to java.lang.Long Exception when trying to use MERGE INTO1 vote
- May 23, 2023How to enable storage partitioned join in spark/iceberg?1 vote
5 more on Stack Overflow
- Apr 7, 2021flink: Interrupted while waiting for data to be acknowledged by pipeline1 vote
- Apr 3, 2025Iceberg slow read0 votes
- Jan 24, 2024Enforcing Column Level Constraints on Iceberg Table0 votes
- Oct 19, 2022How to enable storage partitioned join in spark/iceberg?0 votes
- Mar 3, 2024Apache Iceberg - Storage Partition Join Not Working-1 votes · 1 answer
On Hacker News · 1
- Jul 17, 2021Apache Iceberg: A new table format for storing large, slow-moving tabular data2 points
On Bluesky · 1
- Nov 2, 2026Why on earth is Apache Iceberg written in Java. What the hell is wrong with people. Need a Rust fork lmao github.com/apache/iceberg — @michaelmclean.me1 likes and repost · 2 replies
On the web · 1
- Dec 10, 2020[GitHub] [iceberg] aokolnychyi commented on a change in pull ... — google.com
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,439 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
The file
Show its rules and text
We split this AGENTS.md into the rules it gives an agent
51 rules. About 1 is common, 28 are distinctive, and 22 are very specific to this project.
≈1
Common · estimate
Many files like this have a rule of this kind.
≈28
Distinctive · estimate
This author's own choices. Worth a look.
22
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 28
When assessing potential vulnerabilities or calibrating automated security findings, use SECURITY-THREAT-MODEL.md as the authoritative …
- Distinctive: line 50
REST spec: Check for ambiguity, over-constraining, missing client-side guidance.
- Very specific: line 57
Null over
Optional: Use null for missing values. - Distinctive: line 59
Package-private by default: Only make things public with demonstrated need.
- Very specific: line 63
Metadata updates for REST: All mutations must produce serializable MetadataUpdate objects.
- Distinctive: line 73
Never break APIs. Add default implementations to new interface methods.
- Distinctive: line 74
Don't introduce deprecated methods in brand-new interfaces.
- Very specific: line 75
Use @SuppressWarnings({"unchecked", "rawtypes"}) internally rather than widening public signatures.
- Distinctive: line 76
Prefer builders over multi-argument create methods.
- Very specific: line 77
Keep the Table API small. Utility methods go in helper classes.
- Very specific: line 84
Avoid get prefix — use find, fetch, load, parse, create, or drop it.
- Very specific: line 87
Avoid Factory suffix unless the class is a true factory.
- Very specific: line 92
Use this. for instance field assignment.
- Distinctive: line 96
Prefer method references over lambdas.
- Very specific: line 97
Prefer switch expressions (case X -> ...) over statement switches.
- Distinctive: line 98
Always use imports — never use fully-qualified class names inline.
- Distinctive: line 102
When writing new code, default to no comment and no Javadoc.
- Distinctive: line 104
Check before adding: if the comment or Javadoc you are about to write would need editing during a refactor that keeps behavior identical, …
- Distinctive: line 108
Don't write a comment that restates the method name, the condition, or the next line.
- Very specific: line 109
Don't add commented-out code, section banners, or // getter / // loop over files narration.
- Distinctive: line 110
No personal pronouns. Never describe how the code changed, what a PR did, or what the behavior used to be.
- Distinctive: line 115
Don't name internal fields, helper classes, data structures, caching, or algorithms.
- Distinctive: line 117
Document thrown exceptions, null behavior, and resource ownership (for example that a returned iterable must be closed).
- Very specific: line 118
Keep @param and @return tags in api/ even when brief — @return this for method chaining is the established phrasing.
- Distinctive: line 119
Don't re-document an inherited contract.
- Very specific: line 120
Document public and protected members, interface methods, and anything designed to be overridden.
- Very specific: line 149
Avoid expanding Guava — use JDK equivalents.
- Distinctive: line 150
Keep things internal until proven needed.
- Very specific: line 154
Never use Jackson annotations.
- Very specific: line 158
Use Iterable/CloseableIterable over Stream.
- Very specific: line 159
Use Iceberg's Pair instead of Map.Entry.
- Very specific: line 164
Don't swallow exceptions. Use closeQuietly for cleanup that shouldn't mask real failures.
- Very specific: line 165
Use ConcurrentMap for shared mutable state.
- Distinctive: line 174
Avoid streams/closures in tight loops.
- Distinctive: line 186
Test the behavior in the plan.
- Distinctive: line 187
Test the behavior this change adds or modifies.
- Distinctive: line 190
Don't add tests for unreachable states, or tests that only restate the implementation.
- Distinctive: line 192
Test classes and methods should be package private unless required by inheritance.
- Distinctive: line 194
Write the most direct test for the bug.
- Very specific: line 196
Avoid using test prefixes for newly added tests.
- Distinctive: line 219
Search open PRs and issues for the same problem before starting.
- Distinctive: line 222
Keep first version of a PR minimal — defer recovery, optimization, and edge cases to follow-ups.
- Very specific: line 223
Before opening a PR, run ./gradlew spotlessApply, run checkstyleMain and checkstyleTest for the modules you changed, and build and test …
- Distinctive: line 225
Never restate the diff: no file-by-file walkthrough, no per-method summaries, no "Changes made" checklist, no "Summary", "Background", …
- Distinctive: line 226
Commit messages describe the *what* and *why*, not implementation details.
- Distinctive: line 250
Add the following block at the bottom of PR descriptions:
- Very specific: line 264
Never: add Jackson annotations to serialization classes — always use custom XxxParser classes.
- Very specific: line 266
Never: add Hadoop dependencies where FileIO abstractions exist.
- Common: line 267
Never: commit secrets, credentials, or cloud-specific tokens.
- Distinctive: line 268
Ask first: before adding new third-party dependencies (license compatibility matters).
- Distinctive: line 269
Ask first: before promoting package-private classes/methods to public.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->Apache Iceberg — Agent Instructions
Project conventions, architecture, and coding patterns synthesized from 58,000+ review comments across 4,300+ merged PRs.
Reviewer attention is the project's scarcest resource. When a rule below is ambiguous, pick the option that produces less for a reviewer to read.
Security Model
When assessing potential vulnerabilities or calibrating automated security findings, use SECURITY-THREAT-MODEL.md as the authoritative detailed description of Iceberg's security boundaries, trust assumptions, and non-boundaries.
Architecture
Module Boundaries
- API (
api/): Public interfaces and types. Changes affect every engine and catalog. API breaks are almost never acceptable. - Core (
core/): Table spec implementation. Must be engine-agnostic. No Spark/Flink references. Properties should apply to all catalogs. - Data (
data/): Generic data layer (DeleteFilter, BaseDeleteLoader, readers/writers). Behavior should be general, not engine-specific. - Spark (
spark/): Spark integration only. Tests here validate integration, not core behavior. - Flink (
flink/): Same principle as Spark — integration tests only. - REST Catalog (
open-api/): OpenAPI spec for catalog interop. Precision in spec text is critical. - AWS/GCP/Azure: Cloud-specific catalog implementations. Don't leak cloud-specific assumptions into core.
The api/ module has the strongest stability guarantees — breaking changes are almost never allowed. Other modules with public APIs (iceberg-data, iceberg-parquet, and others marked in build.gradle) may have breaking changes in minor releases, but they must be justified and all changes are tracked via revapi. New interface methods in any of these modules must include default implementations.
High-Sensitivity Areas
TableMetadata: Changes ripple through all engines and catalogs. UseTableMetadata.Builder; produce proper metadata updates for REST.SnapshotProducer/MergingSnapshotProducer: The commit path. Validations must use established patterns.ManifestGroup/ManifestReader: Container reuse causes bugs in parallel code. Callers mustcopyWithoutStatsif holding references.- Serialization (parsers): Never use Jackson annotations. Custom
XxxParser.toJson/fromJsononly. JSON keys use kebab-case. Optional fields only written when present. - REST spec: Check for ambiguity, over-constraining, missing client-side guidance. POST for deltas, PUT for full-state replacement.
- Scan planning: Metrics must not leak across
TableScanrefinements. Timers must be thread-safe (parallel manifest scanning).
Design Patterns
- Refinement:
TableScanmethods return new independent scans. State must not leak between refinements. CloseableIterableoverStream: Iceberg's standard lazy collection. Always close iterables.- Null over
Optional: Usenullfor missing values.Optionalis not used. - Builder pattern: For complex creation. Never require passing
nullfor optional parameters. - Package-private by default: Only make things public with demonstrated need.
- Postel's Law: Accept case-insensitive input, produce canonical output.
Tasks.foreach: For bulk operations with parallelism, retry, and error handling.- Immutable metadata:
TableMetadata,Schema,PartitionSpec,SortOrderproduce new instances via builders. - Metadata updates for REST: All mutations must produce serializable
MetadataUpdateobjects. SerializableTable: Wrap table references for Spark/Flink serialization. Don't serialize the catalog.- Validate at boundaries:
Preconditionsat public entry points; internal methods assume invariants hold. - Spec version gating: Version 2+ features must check
formatVersion >= 2with clear errors for v1 tables.
Coding Conventions
API Design
- New public methods require strong justification. Prefer package-private.
- Never break APIs. Add default implementations to new interface methods.
- Don't introduce deprecated methods in brand-new interfaces.
- Use
@SuppressWarnings({"unchecked", "rawtypes"})internally rather than widening public signatures. - Prefer builders over multi-argument create methods.
- Keep the
TableAPI small. Utility methods go in helper classes. - Operations should be idempotent. Return final state from
apply(), not intermediate changes. - Minimize third-party types (JTS, Guava) in public APIs.
StructLikeequality requiresStructLikeWrapper.
Naming
- Method names describe specific behavior:
selectInIdOrdernotselectOrdered. - Avoid
getprefix — usefind,fetch,load,parse,create, or drop it. - Variable names indicate meaning, not type. Property names use kebab-case.
- Capitalize
IDconsistently.toString()must produce parseable output. - Avoid
Factorysuffix unless the class is a true factory.
Code Style
- 2 spaces indent, 4 spaces continuation. Empty newline after control flow blocks.
- Use
this.for instance field assignment.Preconditionscalls first in methods. - No
finalon locals. No one-argument-per-line unless necessary. - Magic numbers should be named constants.
} else {on same line. Minimize variable scope.try-with-resourcesfor allAutoCloseable.- Prefer method references over lambdas. Wrap lines at the highest semantic level.
- Prefer switch expressions (
case X -> ...) over statement switches. Exhaustive enum switches need nodefault; others must have one. - Always use imports — never use fully-qualified class names inline.
Comments & Javadoc
When writing new code, default to no comment and no Javadoc. Add one only when it states something the code does not. Leave existing comments and Javadoc as they are unless you are changing the code they describe or they have become wrong.
Check before adding: if the comment or Javadoc you are about to write would need editing during a refactor that keeps behavior identical, it is describing internals — rewrite it or leave it out.
Comments
- Don't write a comment that restates the method name, the condition, or the next line.
- Don't add commented-out code, section banners, or
// getter/// loop over filesnarration. - No personal pronouns. Never describe how the code changed, what a PR did, or what the behavior used to be.
Javadoc
- Javadoc states the goal — what the method does for the caller — never how it does it. Strictest in
api/. - Don't name internal fields, helper classes, data structures, caching, or algorithms. If you find yourself naming a type that isn't in the signature, you are documenting internals.
- One sentence is usually enough. Longer is justified only by contract the caller must know: see
AppendFiles.appendManifest, whose length is entirely about manifest lifecycle ownership on success and failure. - Document thrown exceptions, null behavior, and resource ownership (for example that a returned iterable must be closed).
- Keep
@paramand@returntags inapi/even when brief —@return this for method chainingis the established phrasing. Don't strip them. - Don't re-document an inherited contract; let overrides inherit unless they narrow or extend it.
- Document
publicandprotectedmembers, interface methods, and anything designed to be overridden.privateand package-private methods get none unless there is a caller obligation the signature can't express, such as a required lock or pre-sorted input.
// Bad: documents the algorithm. The caller cannot rely on any of it.
/**
* Plans files by opening each manifest in the current snapshot's manifest list, evaluating the
* filter expression against partition summaries to skip manifests, then reading the surviving
* manifests in parallel using the worker pool and wrapping each entry in a BaseFileScanTask.
*
* @return an iterable of scan tasks
*/
CloseableIterable<FileScanTask> planFiles();
// Good: the goal, plus the one thing the caller must do.
/**
* Plans the files that will be read by this scan.
*
* <p>The returned iterable holds open resources and must be closed by the caller.
*
* @return an iterable of scan tasks matching this scan's filters
*/
CloseableIterable<FileScanTask> planFiles();Code Placement
- Extract reusable logic to the right utility layer (
TypeUtil,SchemaUtil,DateTimeUtil, etc.). - Engine-specific concepts must not leak into core. Follow existing patterns before introducing new ones.
- Parsers:
XxxParser.toJson/fromJson. Config:XxxProperties. Check existing utilities first. - Avoid expanding Guava — use JDK equivalents. Use
CloseableGroupfor multi-resource lifecycle. - Keep things internal until proven needed.
Serialization
- Never use Jackson annotations. Custom
XxxParser.toJson/fromJsononly. - JSON keys: kebab-case. Optional fields: only write when non-null. Required fields: validate in constructors.
Preconditions.checkArgumentfor validation.MoreObjects.toStringHelperfortoString().- Wrap
IOExceptioninUncheckedIOException. UseLocale.ROOTfor case conversions. - Use
Iterable/CloseableIterableoverStream. UsenullnotOptional. Chain exception causes. - Use Iceberg's
Pairinstead ofMap.Entry.
Error Handling
- Messages: direct, actionable, with specific values. Capitalize first word.
- Don't swallow exceptions. Use
closeQuietlyfor cleanup that shouldn't mask real failures. - Use
ConcurrentMapfor shared mutable state.Preconditions.checkArgumentover NPE. - Close iterables in
finally. SeparatePreconditionscalls for each condition. - Forward compatibility: don't fail on unknown reserved bytes.
Performance
- Watch for hidden materialization in streaming pipelines (copy/collect steps).
- Builders over rebuild patterns in hot paths. Lazy over eager evaluation.
ByteBufferoverbyte[]. Direct-access arrays for dense integer keys.- Avoid streams/closures in tight loops. Cache per-class, not per-call.
Configuration
- New features default to off. Question whether a property is even needed.
- Properties must work across all catalogs. Zero/negative disables caches/features.
- Versions go to version catalog. Engine-specific properties don't belong in
TableProperties.
Testing
Write the test plan before the tests. State in the PR description what behavior needs verifying and why each case matters — a few lines, not a document.
- Test the behavior in the plan. Coverage is not a target.
- Test the behavior this change adds or modifies. Don't assert the correctness of components this code merely calls.
- One behavior per test method. No omnibus tests asserting several unrelated things.
- A failing test must point to broken behavior. Don't add one that would fail only because an internal detail changed while the observable behavior is still correct.
- Don't add tests for unreachable states, or tests that only restate the implementation.
- Minimal test setup:
PartitionSpec.unpartitioned()when partitioning isn't needed. - Test classes and methods should be package private unless required by inheritance.
- Compute expected values, don't hardcode. Tests belong in the module that owns the code.
- Write the most direct test for the bug. Parameterized tests for type variations.
- JUnit 5 + AssertJ:
@Test,assertThat,assertThatThrownBy. - Avoid using
testprefixes for newly added tests. waitUntilAfterfor time-dependent tests. Separate tests over combined.
REST / OpenAPI Spec
- Spec describes behavior, not implementation. RFC 2119: "MUST" = absolute, "SHOULD" = may reject.
- Include client-side guidance. Consistent encoding terminology. 409 for "already exists", not 400.
- Favor the client: required response fields reduce client complexity.
Commands
- Build (no tests):
./gradlew build -x test -x integrationTest - Single test class:
./gradlew :iceberg-core:test --tests org.apache.iceberg.TestTableMetadata - Single test method:
./gradlew :iceberg-core:test --tests "org.apache.iceberg.TestTableMetadata.testJsonSerialization" - Spark-versioned module:
./gradlew :iceberg-spark:iceberg-spark-4.1_2.13:test --tests "org.apache.iceberg.spark.source.TestSparkReaderDeletes" - Format code:
./gradlew spotlessApply - Check formatting:
./gradlew spotlessCheck - Checkstyle (core module):
./gradlew :iceberg-core:checkstyleMain :iceberg-core:checkstyleTest(replace the module path for other modules). - API compatibility:
./gradlew revApi
PR & Commit Conventions
- Never open a PR generated from an issue without a human in the loop.
- Search open PRs and issues for the same problem before starting. Don't add a duplicate.
- PR titles follow
Module: Descriptionformat (e.g.,Core: Fix ...,Spark: Add ...,Docs: Update ...). - One concern per PR. Unrelated whitespace, import, or formatting changes go in separate PRs.
- Keep first version of a PR minimal — defer recovery, optimization, and edge cases to follow-ups.
- Before opening a PR, run
./gradlew spotlessApply, runcheckstyleMainandcheckstyleTestfor the modules you changed, and build and test those modules (see Commands). Never submit code you have not compiled and run. - PR description is one paragraph, under 120 words: the problem, the approach, and anything a reviewer would not guess from the diff. Plus the issue link, the test plan, and the AI Disclosure block. Nothing else.
- Never restate the diff: no file-by-file walkthrough, no per-method summaries, no "Changes made" checklist, no "Summary", "Background", "Motivation", or "Testing" headings, no emoji.
- Commit messages describe the what and why, not implementation details.
- Apache License header required on all new files (enforced by spotless pre-commit hook).
AI-Generated PR Disclosure
Pull requests that are authored or substantially generated by AI agents must disclose that in the PR description. Always include an AI Disclosure block at the bottom, using the template below.
- Fill in the fields you know. For fields you cannot determine, use
[unknown - human to fill in]. - Never self-certify review. An agent must not set Human Oversight to
fully reviewed— leave that for the human to state what they actually reviewed. - Name the specific parts that are generated, not merely that AI was used (e.g. "the parser changes and their tests are generated; the spec interpretation is the author's").
- Never auto-generate replies to review comments.
- AI-generated review comments must be reviewed for accuracy before posting. Auto-posting unreviewed AI comments is discouraged.
See the ASF generative tooling guidelines for additional policy on AI-generated contributions. Generated files must still follow Iceberg's Apache License header and license check requirements unless explicitly excluded by project policy. For commits authored using generative AI tooling, include a Generated-by: <tool> token in the commit message.
Required Fields
- Model: Set this to your model identifier and version (e.g.,
Claude Opus 4.6,GPT-4o,Gemini 2.5 Pro). - Platform/Tool: Set this to the tool or platform that orchestrated the generation (e.g.,
GitHub Copilot,Cursor,Aider,Claude Code,custom script). - Human Oversight: Set this to
fully reviewed,partially reviewed, orunreviewed. If unknown, use[unknown - human to fill in]. - Prompt Summary: A brief description of the prompt or task given to the agent.
PR Description Template
Add the following block at the bottom of PR descriptions:
---
**AI Disclosure**
- Model: [model name and version]
- Platform/Tool: [tool or platform name]
- Human Oversight: [fully reviewed | partially reviewed | unreviewed]
- Prompt Summary: [brief description of the task]Boundaries
- Never modify
.asf.yaml,LICENSE,NOTICE, orversions.propswithout explicit discussion. - Never add Jackson annotations to serialization classes — always use custom
XxxParserclasses. - Never break public API without an approved
revapi.ymlexception. - Never add Hadoop dependencies where
FileIOabstractions exist. - Never commit secrets, credentials, or cloud-specific tokens.
- Ask first before adding new third-party dependencies (license compatibility matters).
- Ask first before promoting package-private classes/methods to public.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

