diff --git a/AGENTS.md b/AGENTS.md
index 3a26113e5..778677d14 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -367,9 +367,11 @@ are short, and a stale one is worse than none — if you change what a file desc
| [`WhatsNew/version_performance_control.md`](Sources/AngouriMath/Docs/WhatsNew/version_performance_control.md) | the inter-version performance table, and how to add a column |
| `Sources/Analyzers/` | the custom analyzers, including the static-field one behind `[ConstantField]` |
-`Docs/Contributing/RS1617Errors.md` is the one exception: it describes adding public members to a
-`PublicApi.*.txt`, and neither those files nor the analyzer that wanted them are in the tree any
-more. Do not follow it; delete or rewrite it if you are in there anyway.
+Anything added for the library's own purposes is not `public` — see
+[`Contributing/coding_rules.md`](Sources/AngouriMath/Docs/Contributing/coding_rules.md). Nothing
+checks that any more: the `PublicApiAnalyzers` package that required every public member to be
+listed in a `PublicApi.*.txt` is gone from the tree, so it is a rule to follow rather than one to
+be caught by.
## Where the work is
diff --git a/Sources/.editorconfig b/Sources/.editorconfig
index 5ba88dd3d..cbb98c043 100644
--- a/Sources/.editorconfig
+++ b/Sources/.editorconfig
@@ -3,12 +3,6 @@
# CS0660: 'IntervalPiece' defines operator == or operator != but does not override Object.Equals(object o)
dotnet_diagnostic.CS0660.severity = suggestion
-# RS0016: some public method is not mentioned as public API
-dotnet_diagnostic.RS0016.severity = error
-
-# RS0017: some method mentioned as public API is not public
-dotnet_diagnostic.RS0017.severity = error
-
# Missing header warning
dotnet_diagnostic.IDE0073.severity = warning
diff --git a/Sources/AngouriMath/Docs/Contributing/README.md b/Sources/AngouriMath/Docs/Contributing/README.md
index e3028dceb..850139295 100644
--- a/Sources/AngouriMath/Docs/Contributing/README.md
+++ b/Sources/AngouriMath/Docs/Contributing/README.md
@@ -12,8 +12,8 @@ If you aren't sure about what to add, you may want to check the current projects
3. Improve parser
4. Transformations — the layer the 1.x entry points sit on, and
how to add the next rule set or transformation
-5. Adding a public member — out of date; the `PublicApi.*.txt` files
- and the analyzer that required them are no longer in the tree
+5. Coding rules — sealed-or-abstract, immutability, and what may be
+ made `public`
See also BREAKING-CHANGES.md, where a change that makes
the same input give a different answer is recorded, and
diff --git a/Sources/AngouriMath/Docs/Contributing/RS1617Errors.md b/Sources/AngouriMath/Docs/Contributing/RS1617Errors.md
deleted file mode 100644
index 93148283e..000000000
--- a/Sources/AngouriMath/Docs/Contributing/RS1617Errors.md
+++ /dev/null
@@ -1,11 +0,0 @@
-## Public methods and classes
-
-When adding a class for purposes inside the library, you must not mark them as `public`.
-When adding a method, make sure that it's either not `public` or the class you are adding the method to
-is not `public`.
-
-However, if you intentionally want to add a publicly-exposed functional, you will get the
-RS0016 error.
-
-That means you're required to report about this public method or class. You can simply add it to the
-PublicApi.*.txt file or hit `ctrl + .` to do it.
\ No newline at end of file
diff --git a/Sources/AngouriMath/Docs/Contributing/coding_rules.md b/Sources/AngouriMath/Docs/Contributing/coding_rules.md
index c5e8f2177..bf5bff144 100644
--- a/Sources/AngouriMath/Docs/Contributing/coding_rules.md
+++ b/Sources/AngouriMath/Docs/Contributing/coding_rules.md
@@ -8,4 +8,16 @@ Each inheritable type is either abstract or sealed.
### Immutability
-It should be guaranteed that the user cannot change fields of a record which is inherited from `Entity`.
\ No newline at end of file
+It should be guaranteed that the user cannot change fields of a record which is inherited from `Entity`.
+
+### Visibility
+
+Anything added for the library's own purposes is not `public`. A type used internally stays
+`internal`; a method added to a `public` type stays `internal` or `private` unless it is meant for
+callers. `public` is a promise that
+[BREAKING-CHANGES.md](../../../../BREAKING-CHANGES.md) then has to keep, so it is worth making
+deliberately rather than by default.
+
+This used to be enforced by the `PublicApiAnalyzers` package, which required every public member to
+be listed in a `PublicApi.*.txt`. Neither the package nor those files are in the tree any more, so
+nothing checks it — which makes it a rule to follow rather than one to be caught by.
\ No newline at end of file