Skip to content

Conversation

@blackheaven
Copy link
Contributor

@blackheaven blackheaven commented Jan 9, 2026

Checklist

  • Add a new entry in an appropriate subdirectory of changelog.d
  • Read and follow the PR guidelines

@zebot zebot added the ok-to-test Approved for running tests in CI, overrides not-ok-to-test if both labels exist label Jan 9, 2026
@blackheaven blackheaven marked this pull request as ready for review January 13, 2026 18:02
@blackheaven blackheaven requested a review from a team as a code owner January 13, 2026 18:02
Copy link
Contributor

@battermann battermann left a comment

Choose a reason for hiding this comment

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

please add a changelog

Copy link
Contributor

Choose a reason for hiding this comment

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

does this have to stay in galley? why?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It depends on things only definable in galley, such as Opts.

Copy link
Contributor

Choose a reason for hiding this comment

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

That alone is solvable by extracting a dedicated config for the subsystem. Are there still other reasons?

Copy link
Contributor Author

@blackheaven blackheaven Jan 15, 2026

Choose a reason for hiding this comment

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

It seems so, but it is the wrong tradeoff.

Pros:

  • interpreters and effects are co-located (for one usage)

Cons:

  • high coupling of galley with all packages depending on wire-subsystems
  • low cohesion, as all changes will impact all the dependant packages

Having separated effects definitions/interpreters, enforcing high cohesion and low coupling, is the purpose of effects systems.

global <- inputs (view $ settings . checkGroupInfo)
guard (global == Just True)
mls <- getFeatureForTeam @MLSConfig tid
mls <- getFeatureForTeam @_ @MLSConfig tid
Copy link
Contributor

Choose a reason for hiding this comment

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

Can we change the order of the type parameters so that we do not have to pass a placeholder type?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I'm not sure, it's polysemy defined

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Just tried with foralls at effect level, it does not work

@blackheaven blackheaven requested review from a team as code owners January 14, 2026 15:01
@blackheaven
Copy link
Contributor Author

@akshaymankar @battermann I have moved the interpreters in wire-subsystems, can you have a look please?

Copy link
Contributor

@battermann battermann left a comment

Choose a reason for hiding this comment

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

FeatureConfigStore is not the right abstraction. It does CRUD operations via TeamFeatureStore + compute logic + membership checks. This looks more like a subsystem. I would suggest to rename it to FeatureConfigSubsystem.

Also FeatureConfigCompute does not have to be an effect. What do we gain? Do we ever want to mock it independently of the other store/orchestration layer? I would suggest to either inline this into the FeatureConfigSubsystem or have it in a plain module without all the Polysemy overhead.

Copy link
Contributor

Choose a reason for hiding this comment

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

This is doing more than just store operations. See overall PR comment.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

reworked

Copy link
Contributor

Choose a reason for hiding this comment

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

I know that this was just moved, but can we use code gen with makeSem instead of explicitly wrap each operation with send to reduce boilerplate?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

We cannot, there are singletons work in it.

… `FeaturesConfigSubsystem` (Leif feedabcks)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ok-to-test Approved for running tests in CI, overrides not-ok-to-test if both labels exist

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants