Skip to content

Add primary Massey products to ExtAlgebra - #247

Merged
JoeyBF merged 5 commits into
SpectralSequences:masterfrom
JoeyBF:claude/ext-algebra-massey
Jun 26, 2026
Merged

Add primary Massey products to ExtAlgebra#247
JoeyBF merged 5 commits into
SpectralSequences:masterfrom
JoeyBF:claude/ext-algebra-massey

Conversation

@JoeyBF

@JoeyBF JoeyBF commented Jun 26, 2026

Copy link
Copy Markdown
Collaborator

Introduce ExtAlgebra::massey and ExtAlgebra::massey_family in the new ext_algebra/massey.rs, computing triple Massey products <a, b, c> (and the optimized <a, b, -> family over all valid third factors). The result type MasseyResult carries an AffineSubspace.

These wrap ChainHomotopy: for each candidate c we lift the multiplication map, build the null-homotopy of the composite with b, and read off the bracket by pairing with a; the valid c are the kernel of multiplication by b. No new linear algebra is added — this repackages the logic of the massey example.

Refactors the massey example onto massey_iter_{a,c}; output is byte-identical to before (verified on S_2). Adds a unit test for the relation <h0, h1, h0> = h1^2 and that <h0, h1, h1> is undefined.

Claude-Session: https://claude.ai/code/session_01XYWcvWZPm3YJkVpCmeGYsP

Summary by CodeRabbit

  • New Features
    • Added triple Massey product support in the Ext algebra, with iterator-based enumeration.
    • Introduced a Massey result type (with representative extraction and a “contains zero” check).
    • Added a utility to construct scalar-side unit generators.
    • Updated the Massey example to use the new Ext algebra APIs.
  • Tests
    • Added unit tests covering known Massey relations and iterator consistency.
  • Bug Fixes / Chores
    • Normalized Massey-related benchmark equation/index encoding and RHS expression formatting.

Introduce `ExtAlgebra::massey` and `ExtAlgebra::massey_family` in the new
`ext_algebra/massey.rs`, computing triple Massey products <a, b, c> (and the
optimized <a, b, -> family over all valid third factors). The result type
`MasseyResult` carries a coset representative plus the indeterminacy
a·Ext + Ext·c (computed when M == k, otherwise the zero subspace).

These wrap `ChainHomotopy`: for each candidate c we lift the multiplication
map, build the null-homotopy of the composite with b, and read off the bracket
by pairing with a; the valid c are the kernel of multiplication by b. No new
linear algebra is added — this repackages the logic of the `massey` example.

Refactors the `massey` example onto `massey_family`; output is byte-identical
to before (verified on S_2). Adds a unit test for the relation
<h0, h1, h0> = h1^2 and that <h0, h1, h1> is undefined.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XYWcvWZPm3YJkVpCmeGYsP
@coderabbitai

coderabbitai Bot commented Jun 26, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@JoeyBF, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 31 minutes and 47 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 838fcf75-bd81-4a30-9c5b-9a8f76c136df

📥 Commits

Reviewing files that changed from the base of the PR and between 53b94c6 and 33b34a1.

📒 Files selected for processing (1)
  • ext/src/ext_algebra/massey.rs
📝 Walkthrough

Walkthrough

The PR adds Massey-product computation support to ExtAlgebra, introduces a MasseyResult coset type and helpers, updates the example binary to use the new API, and rewrites benchmark assignments to the bracketed index and + {} format.

Changes

Massey product API and fixtures

Layer / File(s) Summary
Public surface and helpers
ext/crates/fp/src/matrix/affine.rs, ext/src/ext_algebra/mod.rs
Adds AffineSubspace::contains_zero, exports the massey module, and adds unit_generator for unit-algebra generators.
Massey result type and shared computations
ext/src/ext_algebra/massey.rs
Defines MasseyResult and builds the shared bracket, kernel, and indeterminacy computations used by the Massey API.
Iterators, single product, and tests
ext/src/ext_algebra/massey.rs
Implements massey_iter_c, massey_iter_a, and massey, then adds unit tests for a sample relation and iterator agreement.
Example binary rewrite
ext/examples/massey.rs
Reworks the example to build ExtAlgebra from the queried resolution, construct unit elements from queried bidegrees, and print massey_iter_c results.
Benchmark assignment rewrites
ext/examples/benchmarks/massey-C2-P, ext/examples/benchmarks/massey-Ceta-P, ext/examples/benchmarks/massey-S_2-P
Rewrites benchmark assignments to the bracketed index-list form with + {} expressions.

Sequence Diagram(s)

sequenceDiagram
  participant Example as ext/examples/massey.rs
  participant ExtAlgebra as ExtAlgebra
  participant MasseyResult as MasseyResult
  participant AffineSubspace as AffineSubspace

  Example->>ExtAlgebra: from_resolution(...)
  Example->>ExtAlgebra: unit_generator(a_deg), unit_generator(b_deg)
  Example->>ExtAlgebra: massey_iter_c(&a, &b)
  ExtAlgebra-->>Example: Vec<(BidegreeElement, MasseyResult)>
  Example->>MasseyResult: contains_zero()
  MasseyResult->>AffineSubspace: contains_zero()
  Example->>Example: print each coset
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Suggested reviewers

  • hoodmane

Poem

🐇 I hopped through cosets, neat and bright,
With Massey hops in morning light.
A unit nibble, a bracketed grin,
And Ext sang softly from within.
Zero stayed tucked in a leafy bin.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: adding Massey product support to ExtAlgebra.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@ext/src/ext_algebra/massey.rs`:
- Around line 118-134: The homotopy construction in massey_iter_b is using b_hom
beyond its current range because it is only extended to shift while the rest of
the path runs to tot; extend b_hom to tot before creating ChainHomotopy and
calling homotopy.extend(tot), matching the pattern already used in massey_iter_a
before s_bc.extend(tot), so the b_hom and homotopy lifetimes/ranges stay
aligned.
- Around line 3-5: The module docs reference a non-existent
ExtAlgebra::massey_family API, so update the documentation in massey.rs to point
to the actual public method name (massey_iter_c or massey_iter_a) unless you
intend to add a massey_family wrapper. If adding the wrapper, define it on
ExtAlgebra and ensure it delegates to the existing Massey iteration logic;
otherwise, remove the broken doc link and describe the correct method name.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 4be6a489-58f4-4ec2-ad1b-2e647cee78ef

📥 Commits

Reviewing files that changed from the base of the PR and between dfd0fd5 and c1de963.

📒 Files selected for processing (7)
  • ext/crates/fp/src/matrix/affine.rs
  • ext/examples/benchmarks/massey-C2-P
  • ext/examples/benchmarks/massey-Ceta-P
  • ext/examples/benchmarks/massey-S_2-P
  • ext/examples/massey.rs
  • ext/src/ext_algebra/massey.rs
  • ext/src/ext_algebra/mod.rs

Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs
The module docs referenced ExtAlgebra::massey_family, which does not exist,
breaking the `docs` CI build (rustdoc broken-intra-doc-links under -D warnings).
Point to the actual method massey_iter_c, and document massey_iter_a alongside
it so the module overview covers all three entry points (massey, massey_iter_c,
massey_iter_a) and the shared ChainHomotopy machinery.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Comment on lines +37 to +40
/// Whether the origin lies in this coset, equivalently whether it is a linear subspace.
///
/// The offset is kept reduced modulo the linear part (see [`AffineSubspace::new`]), so this
/// holds exactly when the stored offset is zero.

@hoodmane hoodmane Jun 26, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// Whether the origin lies in this coset, equivalently whether it is a linear subspace.
///
/// The offset is kept reduced modulo the linear part (see [`AffineSubspace::new`]), so this
/// holds exactly when the stored offset is zero.
/// Returns whether the coset contains zero

<a, b, x_(18, 3, 0)> = [0]
<a, b, x_(18, 7, 0)> = [1]
<a, b, x_(18, 8, 0)> = [1]
<a, b, x_(0, 0, [1])> = [1] + {}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why did the name of x change?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We used to only compute on basis elements, now we compute on a basis of the kernel of multiplication by b. Those don't have to be basis elements of the ambient space, so we display BidegreeElement instead of BidegreeGenerator.

We also now display the indeterminacy and remove those that contain 0, so there are some lines "missing"

Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs
Comment thread ext/src/ext_algebra/massey.rs Outdated
/// the indeterminacy subspace.
#[derive(Debug, Clone)]
pub struct MasseyResult {
/// The bidegree of the bracket, `a.degree() + b.degree() + c.degree() - (1, 0)`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// The bidegree of the bracket, `a.degree() + b.degree() + c.degree() - (1, 0)`.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think stating the output bidegree once is good for documentation. We should clarify that (1,0) is
in (s,t) coordinates though

Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs Outdated
}

impl MasseyResult {
/// A representative of the Massey product, as an element of the bracket's bidegree.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// A representative of the Massey product, as an element of the bracket's bidegree.
/// Returns a representative element of the Massey product

Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment on lines +50 to +51
/// Whether `0` lies in the Massey product, i.e. the representative lies in the indeterminacy.
/// Such brackets carry no information and are typically omitted from output.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// Whether `0` lies in the Massey product, i.e. the representative lies in the indeterminacy.
/// Such brackets carry no information and are typically omitted from output.
/// Whether the Massey product contains zero.

Such brackets carry no information

Lies.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Find me a use for them then 😛

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The fact that it contains zero carries the information that it is possible to construct a cell complex with prescribed Atiyah-Hirzebruch differentials.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fair enough

Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs
Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs Outdated
Comment thread ext/src/ext_algebra/massey.rs Outdated

@hoodmane hoodmane left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems fine but see my comments on the comments.

@coderabbitai

coderabbitai Bot commented Jun 26, 2026

Copy link
Copy Markdown

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{}

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@ext/src/ext_algebra/massey.rs`:
- Around line 7-11: The module-level overview in the Massey algebra docs is out
of sync with the implemented homotopy path: it mentions the wrong composite (`a
∘ b`) for the shown flow. Update the comment near the `massey_iter_a` and
`massey_iter_c` explanation so it consistently describes the actual behavior,
where `massey_iter_c` rebuilds the `b ∘ c` homotopy per `c` and `massey_iter_a`
reuses it for fixed `b, c`.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: ccad5a2b-af9e-4bf0-995c-7d2f6bd65d82

📥 Commits

Reviewing files that changed from the base of the PR and between d518d98 and 53b94c6.

📒 Files selected for processing (1)
  • ext/src/ext_algebra/massey.rs

Comment thread ext/src/ext_algebra/massey.rs Outdated
JoeyBF and others added 3 commits June 26, 2026 12:00
Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>
Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>
@JoeyBF
JoeyBF force-pushed the claude/ext-algebra-massey branch from 53b94c6 to 33b34a1 Compare June 26, 2026 16:00
@JoeyBF
JoeyBF merged commit faff1d6 into SpectralSequences:master Jun 26, 2026
31 of 38 checks passed
github-actions Bot added a commit that referenced this pull request Jun 26, 2026
* Add primary Massey products to ExtAlgebra

Introduce `ExtAlgebra::massey` and `ExtAlgebra::massey_iter_{a,c}` in the new
`ext_algebra/massey.rs`, computing triple Massey products <a, b, c> (and the
optimized <a, b, -> family over all valid third factors). The result type
`MasseyResult` carries a coset representative plus the indeterminacy
a·Ext + Ext·c (computed when M == k, otherwise the zero subspace).

These wrap `ChainHomotopy`: for each candidate c we lift the multiplication
map, build the null-homotopy of the composite with b, and read off the bracket
by pairing with a; the valid c are the kernel of multiplication by b. No new
linear algebra is added — this repackages the logic of the `massey` example.

Refactors the `massey` example onto `massey_family`; output is byte-identical
to before (verified on S_2). Adds a unit test for the relation
<h0, h1, h0> = h1^2 and that <h0, h1, h1> is undefined.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XYWcvWZPm3YJkVpCmeGYsP

* Fix broken doc link and round out massey module docs

The module docs referenced ExtAlgebra::massey_family, which does not exist,
breaking the `docs` CI build (rustdoc broken-intra-doc-links under -D warnings).
Point to the actual method massey_iter_c, and document massey_iter_a alongside
it so the module overview covers all three entry points (massey, massey_iter_c,
massey_iter_a) and the shared ChainHomotopy machinery.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Improve docs

Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>

* Change return type to descriptive struct

Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>

* Add ab == 0 check

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>
github-actions Bot added a commit to JoeyBF/sseq that referenced this pull request Jun 26, 2026
* Add primary Massey products to ExtAlgebra

Introduce `ExtAlgebra::massey` and `ExtAlgebra::massey_iter_{a,c}` in the new
`ext_algebra/massey.rs`, computing triple Massey products <a, b, c> (and the
optimized <a, b, -> family over all valid third factors). The result type
`MasseyResult` carries a coset representative plus the indeterminacy
a·Ext + Ext·c (computed when M == k, otherwise the zero subspace).

These wrap `ChainHomotopy`: for each candidate c we lift the multiplication
map, build the null-homotopy of the composite with b, and read off the bracket
by pairing with a; the valid c are the kernel of multiplication by b. No new
linear algebra is added — this repackages the logic of the `massey` example.

Refactors the `massey` example onto `massey_family`; output is byte-identical
to before (verified on S_2). Adds a unit test for the relation
<h0, h1, h0> = h1^2 and that <h0, h1, h1> is undefined.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XYWcvWZPm3YJkVpCmeGYsP

* Fix broken doc link and round out massey module docs

The module docs referenced ExtAlgebra::massey_family, which does not exist,
breaking the `docs` CI build (rustdoc broken-intra-doc-links under -D warnings).
Point to the actual method massey_iter_c, and document massey_iter_a alongside
it so the module overview covers all three entry points (massey, massey_iter_c,
massey_iter_a) and the shared ChainHomotopy machinery.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Improve docs

Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>

* Change return type to descriptive struct

Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>

* Add ab == 0 check

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>
JoeyBF pushed a commit to JoeyBF/sseq that referenced this pull request Jul 13, 2026
…o it

The secondary Massey example hand-rolled ~500 lines of Z/p² + λ bookkeeping —
building the two secondary lifts, the chain homotopy, the E3 kernel, and the
Mod_{Cλ²} read-off — the same plumbing SpectralSequences#247 abstracted for primary Massey.

Encapsulate it as `SecondaryExtModule::secondary_massey(a, b, job)`, the
Mod_{Cλ²} analogue of `ExtModule::massey_iter_a`. `a ∈ Ext(M, k)` comes from the
module side, `b, - ∈ Ext(k, k)` from the shared ring side; both are
`SecondaryClass`es (an Ext part plus an optional λ part, since secondary Massey
needs non-standard lifts). A new `SecondaryClass` input type and a shared
`build_secondary_hom` helper (generalising the example's `get_hom`) construct the
secondary lift + optional λ chain map from coordinates. `job = Some(s)` shards the
chain-homotopy computation, matching the other secondary scripts.

The read-off is ported verbatim, so behaviour is unchanged: a new regression test
(`test_sphere_secondary_massey`) pins `<-, h_0, h_1>` on S_2 against the exact
bracket family the pre-refactor example printed, and the refactored example
reproduces that output byte-for-byte. `secondary_massey.rs` is now just the
interactive front-end (querying classes, formatting output).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Nk9J57zb6GpvZxrduhGSdY
@JoeyBF
JoeyBF deleted the claude/ext-algebra-massey branch July 16, 2026 05:43
JoeyBF pushed a commit to JoeyBF/sseq that referenced this pull request Aug 1, 2026
…o it

The secondary Massey example hand-rolled ~500 lines of Z/p² + λ bookkeeping —
building the two secondary lifts, the chain homotopy, the E3 kernel, and the
Mod_{Cλ²} read-off — the same plumbing SpectralSequences#247 abstracted for primary Massey.

Encapsulate it as `SecondaryExtModule::secondary_massey(a, b, job)`, the
Mod_{Cλ²} analogue of `ExtModule::massey_iter_a`. `a ∈ Ext(M, k)` comes from the
module side, `b, - ∈ Ext(k, k)` from the shared ring side; both are
`SecondaryClass`es (an Ext part plus an optional λ part, since secondary Massey
needs non-standard lifts). A new `SecondaryClass` input type and a shared
`build_secondary_hom` helper (generalising the example's `get_hom`) construct the
secondary lift + optional λ chain map from coordinates. `job = Some(s)` shards the
chain-homotopy computation, matching the other secondary scripts.

The read-off is ported verbatim, so behaviour is unchanged: a new regression test
(`test_sphere_secondary_massey`) pins `<-, h_0, h_1>` on S_2 against the exact
bracket family the pre-refactor example printed, and the refactored example
reproduces that output byte-for-byte. `secondary_massey.rs` is now just the
interactive front-end (querying classes, formatting output).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Nk9J57zb6GpvZxrduhGSdY
JoeyBF pushed a commit to JoeyBF/sseq that referenced this pull request Aug 1, 2026
…o it

The secondary Massey example hand-rolled ~500 lines of Z/p² + λ bookkeeping —
building the two secondary lifts, the chain homotopy, the E3 kernel, and the
Mod_{Cλ²} read-off — the same plumbing SpectralSequences#247 abstracted for primary Massey.

Encapsulate it as `SecondaryExtModule::secondary_massey(a, b, job)`, the
Mod_{Cλ²} analogue of `ExtModule::massey_iter_a`. `a ∈ Ext(M, k)` comes from the
module side, `b, - ∈ Ext(k, k)` from the shared ring side; both are
`SecondaryClass`es (an Ext part plus an optional λ part, since secondary Massey
needs non-standard lifts). A new `SecondaryClass` input type and a shared
`build_secondary_hom` helper (generalising the example's `get_hom`) construct the
secondary lift + optional λ chain map from coordinates. `job = Some(s)` shards the
chain-homotopy computation, matching the other secondary scripts.

The read-off is ported verbatim, so behaviour is unchanged: a new regression test
(`test_sphere_secondary_massey`) pins `<-, h_0, h_1>` on S_2 against the exact
bracket family the pre-refactor example printed, and the refactored example
reproduces that output byte-for-byte. `secondary_massey.rs` is now just the
interactive front-end (querying classes, formatting output).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Nk9J57zb6GpvZxrduhGSdY
JoeyBF pushed a commit to JoeyBF/sseq that referenced this pull request Aug 1, 2026
…o it

The secondary Massey example hand-rolled ~500 lines of Z/p² + λ bookkeeping —
building the two secondary lifts, the chain homotopy, the E3 kernel, and the
Mod_{Cλ²} read-off — the same plumbing SpectralSequences#247 abstracted for primary Massey.

Encapsulate it as `SecondaryExtModule::secondary_massey(a, b, job)`, the
Mod_{Cλ²} analogue of `ExtModule::massey_iter_a`. `a ∈ Ext(M, k)` comes from the
module side, `b, - ∈ Ext(k, k)` from the shared ring side; both are
`SecondaryClass`es (an Ext part plus an optional λ part, since secondary Massey
needs non-standard lifts). A new `SecondaryClass` input type and a shared
`build_secondary_hom` helper (generalising the example's `get_hom`) construct the
secondary lift + optional λ chain map from coordinates. `job = Some(s)` shards the
chain-homotopy computation, matching the other secondary scripts.

The read-off is ported verbatim, so behaviour is unchanged: a new regression test
(`test_sphere_secondary_massey`) pins `<-, h_0, h_1>` on S_2 against the exact
bracket family the pre-refactor example printed, and the refactored example
reproduces that output byte-for-byte. `secondary_massey.rs` is now just the
interactive front-end (querying classes, formatting output).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Nk9J57zb6GpvZxrduhGSdY
JoeyBF pushed a commit to JoeyBF/sseq that referenced this pull request Aug 26, 2026
…o it

The secondary Massey example hand-rolled ~500 lines of Z/p² + λ bookkeeping —
building the two secondary lifts, the chain homotopy, the E3 kernel, and the
Mod_{Cλ²} read-off — the same plumbing SpectralSequences#247 abstracted for primary Massey.

Encapsulate it as `SecondaryExtModule::secondary_massey(a, b, job)`, the
Mod_{Cλ²} analogue of `ExtModule::massey_iter_a`. `a ∈ Ext(M, k)` comes from the
module side, `b, - ∈ Ext(k, k)` from the shared ring side; both are
`SecondaryClass`es (an Ext part plus an optional λ part, since secondary Massey
needs non-standard lifts). A new `SecondaryClass` input type and a shared
`build_secondary_hom` helper (generalising the example's `get_hom`) construct the
secondary lift + optional λ chain map from coordinates. `job = Some(s)` shards the
chain-homotopy computation, matching the other secondary scripts.

The read-off is ported verbatim, so behaviour is unchanged: a new regression test
(`test_sphere_secondary_massey`) pins `<-, h_0, h_1>` on S_2 against the exact
bracket family the pre-refactor example printed, and the refactored example
reproduces that output byte-for-byte. `secondary_massey.rs` is now just the
interactive front-end (querying classes, formatting output).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Nk9J57zb6GpvZxrduhGSdY
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants