From 9a85b857eec528bf1a1dd045cedab6b483a792ec Mon Sep 17 00:00:00 2001
From: Jacek Laskowski <jacek@japila.pl>
Date: Sat, 11 Jan 2025 21:47:52 +0100
Subject: [PATCH] LegacyWriterFeature

---
 docs/identity-columns/index.md             |  2 +-
 docs/table-features/LegacyWriterFeature.md | 16 ++++++++++++++
 docs/table-features/TableFeature.md        | 25 +++++++++++-----------
 3 files changed, 29 insertions(+), 14 deletions(-)

diff --git a/docs/identity-columns/index.md b/docs/identity-columns/index.md
index 67a329e92..de383f680 100644
--- a/docs/identity-columns/index.md
+++ b/docs/identity-columns/index.md
@@ -1,6 +1,6 @@
 # Identity Columns
 
-**Identity Columns** is a new feature in Delta Lake 3.3.0 that allows assigning unique values for each record writted out into a table (unless column values are provided explicitly).
+**Identity Columns** is a new feature in Delta Lake 3.3.0 that allows assigning unique values for each record written out into a table (unless column values are provided explicitly).
 
 Identity Columns feature is enabled by default (using [spark.databricks.delta.identityColumn.enabled](../configuration-properties/index.md#spark.databricks.delta.identityColumn.enabled)).
 
diff --git a/docs/table-features/LegacyWriterFeature.md b/docs/table-features/LegacyWriterFeature.md
index 4d4eaf44f..f9da2dff3 100644
--- a/docs/table-features/LegacyWriterFeature.md
+++ b/docs/table-features/LegacyWriterFeature.md
@@ -1,7 +1,16 @@
 # LegacyWriterFeature
 
+`LegacyWriterFeature` is a marker extension of the [TableFeature](TableFeature.md) abstraction for [writer table features](#implementations) that were released before [Table Features](index.md) (as a `LegacyFeatureType`).
+
+`LegacyWriterFeature`s enforce that the [minimum reader protocol version required](TableFeature.md#minReaderVersion) is always `0`.
+
+`LegacyWriterFeature` is used when `TableFeatureSupport` is requested to [remove a table feature](TableFeatureSupport.md#removeFeature) (alongside [WriterFeature](WriterFeature.md)s).
+
 ## Implementations
 
+??? note "Sealed Abstract Class"
+    `LegacyWriterFeature` is a Scala **sealed abstract class** which means that all of the implementations are in the same compilation unit (a single file).
+
 * [AppendOnlyTableFeature](../append-only-tables/AppendOnlyTableFeature.md)
 * [ChangeDataFeedTableFeature](../change-data-feed/ChangeDataFeedTableFeature.md)
 * [CheckConstraintsTableFeature](../check-constraints/CheckConstraintsTableFeature.md)
@@ -9,3 +18,10 @@
 * [IdentityColumnsTableFeature](../identity-columns/IdentityColumnsTableFeature.md)
 * [InvariantsTableFeature](../column-invariants/InvariantsTableFeature.md)
 * `LegacyReaderWriterFeature`
+
+## Creating Instance
+
+`LegacyWriterFeature` takes the following to be created:
+
+* <span id="name"> [Name](TableFeature.md#name)
+* <span id="minWriterVersion"> [Minimum writer protocol version required](TableFeature.md#minWriterVersion)
diff --git a/docs/table-features/TableFeature.md b/docs/table-features/TableFeature.md
index bbacade80..78ac6abe8 100644
--- a/docs/table-features/TableFeature.md
+++ b/docs/table-features/TableFeature.md
@@ -8,9 +8,9 @@
 
 `TableFeature` takes the following to be created:
 
-* [name](#name)
-* <span id="minReaderVersion"> `minReaderVersion`
-* <span id="minWriterVersion"> `minWriterVersion`
+* [Name](#name)
+* <span id="minReaderVersion"> Minimum reader protocol version required
+* <span id="minWriterVersion"> Minimum writer protocol version required
 
 !!! note "Abstract Class"
     `TableFeature` is an abstract class and cannot be created directly. It is created indirectly for the [concrete TableFeatures](#implementations).
@@ -25,6 +25,8 @@ The name of this table feature
 
 The name can only be a combination of letters, `-`s (dashes) and `_`s (underscores).
 
+---
+
 Used when:
 
 * `DeltaLog` is requested to [assertTableFeaturesMatchMetadata](../DeltaLog.md#assertTableFeaturesMatchMetadata) (for reporting purposes)
@@ -55,7 +57,7 @@ Used when:
 
 ## Implementations
 
-* `LegacyWriterFeature`
+* [LegacyWriterFeature](LegacyWriterFeature.md)
 * [WriterFeature](WriterFeature.md)
 
 ??? note "Sealed Abstract Class"
@@ -69,20 +71,17 @@ allSupportedFeaturesMap: Map[String, TableFeature]
 
 `allSupportedFeaturesMap` is a collection of [TableFeature](TableFeature.md)s by their lower-case [name](#name):
 
-* `AllowColumnDefaultsTableFeature`
 * [AppendOnlyTableFeature](../append-only-tables/AppendOnlyTableFeature.md)
 * [ChangeDataFeedTableFeature](../change-data-feed/ChangeDataFeedTableFeature.md)
-* `CheckConstraintsTableFeature`
+* [CheckConstraintsTableFeature](../check-constraints/CheckConstraintsTableFeature.md)
 * [ClusteringTableFeature](../liquid-clustering/ClusteringTableFeature.md)
-* `ColumnMappingTableFeature`
+* [ColumnMappingTableFeature](../column-mapping/ColumnMappingTableFeature.md)
 * [DeletionVectorsTableFeature](../deletion-vectors/DeletionVectorsTableFeature.md)
 * [DomainMetadataTableFeature](DomainMetadataTableFeature.md)
-* `GeneratedColumnsTableFeature`
-* `IcebergCompatV1TableFeature`
-* `IcebergCompatV2TableFeature`
-* `InvariantsTableFeature`
-* `TimestampNTZTableFeature`
-* `V2CheckpointTableFeature`
+* [GeneratedColumnsTableFeature](../generated-columns/GeneratedColumnsTableFeature.md)
+* [IdentityColumnsTableFeature](../identity-columns/IdentityColumnsTableFeature.md)
+* [InvariantsTableFeature](../column-invariants/InvariantsTableFeature.md)
+* _others_
 
 ---