By default, it is only tables at the end of the chains that are returned to the application, so these tables are returned. It is perhaps easiest to visualize a context as a brand-new HTML document, with new depths and counts to compare to the remaining links in the chain. The top level HTML document is the first context. Each table in the document establishes a new context. Likewise, that same context keeps track of counts within the new depth scheme for comparison to the remaining links in the chain.
Headers still apply if they are present in a link, but they are always independent of context.
As it turns out, specifying a depth and count provides a unique address for a table within a context. For non-unique constraints, such as just a depth, or headers, there can be multiple matches for a given link. By default, chains are elastic . This means that when a particular link does not match on a table, it is passed down to subtables unchanged. If you want a chain to be inelastic, you can set the elastic parameter to 0 for the whole TableExtract object.