#Events and EventBus
1 messages ยท Page 4 of 1
Nah, that's a slippery slope... the jit does a pretty good job usually
maty we're gonna need a decision on what to do with this PR
(aka link the PR you're talking about)
honestly if squiddev's stuff brings a 40% boost roll with that
ASM code gen doesn't need maintenance and that code is mostly clean and easy to understand
it's not like by using LMF we aren't simply moving the code gen somewhere else to a worse impl
the asm transformations were always the biggest problem to me, generation is fine by me
i wish java methodrefs worked like C#
no runtime codegen, just an object that contains an object and a method handle [and a linked list for some reason] that the runtime knows how to call
Yeah heh
didn't I bring up at some point that the asm stuff causes issues with class reloading in dev
no jbr lets you do nearly anything
but not everyone has the jbr
How could the asm stuff cause issues then? If the method signatures don't change it shouldn't matter
I haven't encountered it in a long time since I use jbr now but as far as i can remember it was some asm for either @vernal latch or @Mod.EventBusSubscriber
It was SubscribeEvent, if your method wasnโt public it would transform it for access iirc
There was also the fact that any custom Events would also kill your hotswap unless you implemented what the event transformer did yourself
Single Class Hotswap is nice for allowing you to work around that
Yep, listeners afaik where fine
Yeah that looks fine either way
I'm not sure if this is related, but why is EventBusSubscriber inside of Mod? Also, is it possible to use SubscribeEvent without EventBusSubscriber and if not, why is one in EventBus and the other in FML Java?
@SubscribeEvent is also used when you register a class or an instance thereof via IEventBus#register()
looks at !events
Hm yes I forgot about that functionality
The reason EBS is in fmljava is that the auto subscriber that uses it is part of fmljava. Could it be extracted to a higher level? Maybe
I just think that EventBusSubscriber should be in the same package as Mod, but not an inner class of Mod. EventBusSubscriber has its own inner class too (Bus) so there are three levels of classes.
It would be nice if EBS could be part of EventBus though
The annotation could be, the functionality can't because it relies on FML's annotation collector
Ok, that's fine then. I see it has Minecraft-specific fields too.
I would still like to know why EBS is an inner class of Mod and not in its own file
Had a bit of time to test Squid's snippet
It works great with a small tweak (one if the ALOAD 0 should be inside an if check)
Testing shows about 120 ns for 100 listeners in the besg case, which is IMO good enough (I get 80 for LMF, but I prefer not reflecting into JDK internals)
I'll try changing IEventListener to an abstract class tomorrow
@agile slate can we get a 20.2 FML branch so I can make the event changes there?
I can have everything written for tomorrow
oh right I have permissions on that repo now... will do (after minecraft live)
Not sure if you saw, but I submitted a PR to your fork with a fixed (and slightly cleaned up) version of that.
you should be able to do it yourself?
https://github.com/neoforged/FancyModLoader/tree/20.2 branch created
Missing a webhook?
maybe but I did it through the UI so no push
I didn't see! Apparently I wasn't watching the repo
looks great, thanks for the PR
Ahh, sorry. Should have pinged you about it. Was hoping to do it to the main repo, but GH doesn't handle staged PRs very well :/.
I like it like this
somehow typetools doesn't work anymore after your PR
no clue why
Oh, that's very odd. Do we pull in a more recent version via modlauncher/sjh?
Hrrm, odd. Happy to take a look if you want to focus on other stuff. Was sure I ran tests, but clearly not on the final branch :/.
fuuuck I know what's up
I hate typetools
typetools lambda resolution is disabled because it can't find sun.misc.Unsafe at some point during its startup
Wait, why does that need unsafe?
look at this ๐คฎ
(TypeResolver.java)
that's weird, if I add back the dependencies in the test build.gradle it works again
implementation('cpw.mods:bootstraplauncher:1.1.0') makes a difference
SJH is enough
could it be that sun.misc.unsafe is not on the classpath by default?
Ahh, yep - adding a requires jdk.unsupported; to module-info.java fixes it.
indeed
why is this even necessary... it should be an automatic module
oh no yeah of course... automatic modules won't read jdk.unsupported unless another module requires it
Oh, is IEventBusInvokeDispatcher not actually used anywhere? Nice!
yeah and I fear that if someone ever passes a custom instance to the bus it will force-deoptimize post and destroy performance
Yeah. I was assuming it was used somewhere in Forge, but if not that's awesome.
it isn't heh
(might have been used before mod busses were a thing)
@outer steeple https://github.com/neoforged/Bus/pull/24 is good now ๐
Yeah, I got slightly side tracked yesterday at putting all the event listeners in a single method handle. It's not viable for many reasons (IEventBusInvokeDispatcher being only one of them), but it is fast :).
How so? Spinning a class that does the entire dispatch?
Hidden classes are GC'ed so technically this would be possible ^^
So the custom exception handler is a bit of a pain (it requires the index of the erroring handler, though I feel it's not the end of the world if it's removed - it's mostly reconstructable from the stack trace), but my main concern is the dynamic registring/de-registering of event handlers.
MethodHandles are pretty good at only generating classes when needed, but I've also seen some pretty nasty mods which register (and unregister) event listeners for each block entity, and I'm sure they'd hold up in the face of that :).
@outer steeple do you have some time for eventbus tonight? Can I get some green?
Or just let me finish it 
not tonight

@rigid gust question: with the removal of IEventBusInvokeDispatcher how do you plan on making mod bus posts use the priority
I want to add post(Event, EventPriority) to only post for a specific priority
note that IEventBusInvokeDispatcher is not used atm, the entire eventbus invocation is wrapped
that should give an idea: https://github.com/neoforged/FancyModLoader/pull/8/files
well then, can't see anything obviously bad in that pr
alright, thanks!
@outer steeple almost last PR: https://github.com/neoforged/Bus/pull/25
then there's the question of abstract events that needs resolving and we'll be good to go
penultimate PR ๐
(there will be more things to adjust I suspect but at least this will make the refactor completeโข๏ธ)
I screm at the fact that the "an exception will be thrown" exists in the prose body and not as a @throws
copy/pasted from the other post ๐
which you wrote 
oh... oh yeah I did 

back to abstract events
should something like the following be allowed?
public abstract class Event {...}
public class ParentEvent extends Event {}
public abstract class SubEvent extends ParentEvent {}
public class ActualEvent extends SubEvent {}
this means that you could listen to ParentEvent or ActualEvent but not to Event or SubEvent
what would be the reason not to allow it?
you could register a listener to ParentEvent and filter for SubEvent instances, that would be equivalent to registering a listener to SubEvent
I don't think people would do it by mistake, it's just a bit odd
so would the question more be -- do we require all superclasses of an abstract event to also be abstract...?
or wait, no, that wouldn't be checkable until SubEvent is dispatched
indeed
how would we prevent such a situation, even?
setting aside the question of should we -- could we?
well it would be checked when dispatching one of the subevents
on its face, sounds like a performance penalty -- crawling event inheritance on dispatch
oh don't worry about that - this is only checked once when creating the listener list
all of this has no performance impact on dispatch
i... don't follow
if we can only check during the dispatch of the event (as you've said above), that means the check must happen during or after that disptach, no?
so such a check would have to happen at least once
the first time either a dispatch or a registration occurs, a ListenerList is created
hmmm
what I am saying is that this does not impact firing the event again
hmmm
i can't think of a situation at present in which we would have an event strucutre laid out above
so I'd lean towards disallowing it
if ever we're wrong, we can allow it again and it shouldn't pose any compatibility issue with preexisting code
good point
just a stray thought to put out there: once you've finished with your so-far-planned changes, Tech, we'd probably want to consider closing this thread down and moving discussion to another channel
yeah sure
maty here's another PR for you ๐
https://github.com/neoforged/Bus/pull/21
thanks sci
if you want to look at https://github.com/neoforged/Bus/pull/25 too ๐
huh, does Bus have no license headers?
not on the new files, no
we need to figure out licensing for every project because the copyright is shared between neoforged and mcf
prelim thoughts:
leave license headers on existing files (that are for MCF)
add new license header solely with "NeoForged and contributors"
make it policy so if a class is heavily rewritten since the fork such that it's not substantially similar, the license header should be updated
@rigid gust what's the unwrapping done for?
...I might be starting to understand, right after I pinged you 
okay yeah, I think I get enough of the why
Yeah that's reasonable. I think quilt developed a tool to solve this very problem?
Yeah, I believe their licenser plugin can do it
To remove the isCanceled check, both for performance and for correctness (need to get rid of the cast) ๐
We already have a tool that can do it.
// Skip legacy Forge Development LLC headers skipExistingHeaders = true
the Cadix licenser can do this with the flag set
New headers become NeoForged and contributors
Existing files stay MCF
And manual review ("make it a policy") will change the header if a class is heavily rewritten
Let's try not to get too deep into NIH when we have perfectly good tools that do what we need :p
Ah cool
fuck ๐
do a pass on all docs to make sure they don't reference bad stuff or have incorrect docs, format all classes to same-line brackets, and rename constants (like this one)
and that's an order 
Technically that constant is in order
static final fields should only be capitalized if they are constants
but yes I'll do it after this last PR is merged
no

i'll
the technicalities out of you
smh
https://github.com/neoforged/Bus/pull/25/files#r1363490647 this really is bad for perf 
eh
we can do it
maybe as a bus parameter
yeah
Benchmark Mode Cnt Score Error Units
ManyBussesBenchmark.testManyBusses avgt 15 1314.180 โ 81.052 ns/op
ManyBussesBenchmark.testManyBussesPerPhase avgt 15 6869.793 โ 447.127 ns/op
better
I updated the PR
- return listenerLists.computeIfAbsent(eventType, ListenerList::new);
+ return listenerLists.computeIfAbsent(eventType, e -> new ListenerList(e, allowPerPhasePost));
This change now means we need to allocate a lambda each call. I'm not sure if that actually matters in practice though, possible the call to computeIfAbsent gets inlined.
the lambda is only allocated when the first get call returned null (i.e. at most once per event type)
and the second lambda already captures this to call getListenerList
and the second lambda already captures this to call getListenerList
Ahh, so it does. Gah.
usually the value gets computed
the value can only be already in the map in computeIfAbsent in multithreaded contexts
@outer steeple do you have time for eventbus review? so I can update FML ๐
thanks
shouldn't we remove the "this event is/is not cancellable
@rigid gust IMO no, nothing requires that every "leaf" of an event inheritance "tree" implementsICancellableEvent, it could also be a parent class that may not be in the same file
hmmm yeah
i think I would much rather have each "leaf" add implements ICancellableEvent to the type again instead of adding it to the documentation of each event. The information density is just higher imo, this info can be documented by the type, so there should not be a need for it to also have it in one line in a 5 to 10 line javadoc.
It should be in the documentation, because the documentation should explain what cancelling it does
Don't tell us what in the docs, tell us how/why
The point is that events that are NOT cancellable also have this javadoc
A bit cursed:P
Ah, yeah. I'd say that since the default is non cancellable, it's only worth mentioning when events are, and it should have information about why and how that works
"this event isn't cancellable" isn't very useful - like, no shit it isn't cancellable. Cool. I don't even know what cancellable would mean in this context
Unless there's a notable reason it isn't cancellable, that is
Yeah IMO javadoc for cancellable events only
However I won't be changing this now, we'll see later with the rest of the team
less cursed than three lines of javadoc for "does not have a result" "is not cancellable" and "fired on the mod event bus". The first is removed, but the other two are the presence of interfaces and java already has a really nice way of showing the existance of interfaces. And yeah, some events have not directly obvious results when cancelling events, but minimum 50% of the events are obvious by the name of the event or the documentation of the Event without that part. But not having to write "this event is not cancellable" on each not cancellable event is already a plus
If an event is cancellable the docs should say why and explicitly say what that means. If it isn't the docs need not mention it
damn, getting sniped by my own changes ๐
we really shouldn't
why does the bus start so late?
it only starts after mod loading is fully complete
(atm)
so we have two options here:
- start forge bus earlier
- go back to ignoring these events
I think 2) is better... I'm happy to consider 1) at a later time but not for the 20.2 initial release
ok with this change I can get into a world in forgedev again using all the updated deps
gonna merge in a few minutes if nobody objects
that would mean silent failure if something tries to fire an event on a shutdown bus
which doesn't sound ideal
look at this
how did that not trigger in the past?
IMO throwing an exception is too dangerous because events are posted in many places and there's always a chance that some forge bus event could be fired "too early"
because of the silent failure
... 
very well then
though it should probably be noted on the post methods' docs that posting on a shutdown bus does nothing
there's also the idea of having some form of optional logging for events posted on shutdown bus, like controlled via a system property or logged via a (deny-by-default) logging marker
if we do this we're gonna spam the user with forge-posted events
something like If this bus was not started yet, the event is returned without being dispatched.?
first, that's why I said optional -- explicitly to be enabled only when requested, like during some sort of debugging session
second, that's only going to happen to events posted before the bus starts up, which I would assume to be a minority of all events posted to the bus
maybe a linkplain to start() on that "started yet", but overall, yep
I don't want users to start the forge bus ๐
idk if they would but maybe we shouldn't link the method?
there's no way to query whether a bus is started yet, right?
if there was, I would suggest that getter
i like linking the method because it links the reader to what "started" means, in the context of the event bus
but eh, probably fine to omit the link in this case
not atm
we could add it but heh I'm not a fan of the system... ideally that should not be a public method on the bus
amended the javadoc
Probably a discussion for a later time, but if bus now requires Java 17, it might be nice to make EventListener a sealed class.
it's in a module so it should work fine with generated listeners
actually, we can't make it sealed unless we introduced a base class for the generated listeners
Yeah, what the JDK appears to normally do is have an internal non-sealed class which everything else extends from. So something like https://github.com/SquidDev/Bus/commit/108368690970b31a8d669d0d4d677a962d6453c4.
Haha, beat me to it :p
oh lol sorry ๐
Hrm, GeneratedEventListener should maybe have a package-private constructor. Really net.neoforged.bus; shouldn't be exported at all - I think the only thing used from it is the EventBusErrorMessage, though obviously haven't checked the latest versions of NeoForge :p.
Maybe that stuff should wait until the other breaking changes though. Definitely not a priority :D
if a mod tries to use a nonexported package it will just crash at runtime
I don't think IDEs support a module path for a non-modular project (the gradle java plugin doesn't)
I guess one could move things to an internal package, and chuck an @ApiStatus.Internal on it, but probably not worth it. Ahh, one of these days JPMS will actually be friendly to use, and I can be at peace.
All of non-api is internal
It works if the mod itself is a module, but we're not there yet
Oh I know! I guess my point is that that's not evident and/or enforced anywhere.
yeah I know... :/
i have dumb question about the codebase, why does one there is IEventBus EventBus but then BusBuilder and BusBuilderImpl?
Use the ones in the api package only
They mean that both IEventBus and BusBuilder are interfaces but one uses the I-/no affix convention while the other uses the no affix/-Impl convention
The consistency of interface naming has been brought into question but I think the plan is to hold a community vote first and then perform all renames at once
Why would only maintainers be able to vote?
because that is a design decision for the project
NeoForge does not allow the general public to vote on design decisions
I hope you can see the obvious problem with letting everyone vote on things like this
they'd just vote to name the interface BussyMcBusFace
damn there goes my name idea
I heard that the last time such a vote happened it was a community vote. Why would that be a bad idea?
random people voting don't necessarily know enough to give an informed opinion
having that said we have a non-binding community vote
Yes, but I feel like that applies less here considering it is only a naming convention. If say 70% of people want to remove the I- prefix, then that's something to consider, right?
People can make their voice heart
But we are under no obligation to listen to them
Even if they are the 99% majority
A poll is just a large-scale way of collecting that information
And if most mod devs do want that removed, that is something to consider and it substantially hurts a project to reject that sort of feedback - of course, we don't know what opinions most devs have on this because there hasn't been a poll
It would be weird if we did not
But there is no rule, or convention that forces us to listen
Yes, I understand there is no obligation
Sadly some within the community don't seem to understand that
So for right now
We are reserving the voting option within the community for those moments where the maintainers can not come to a reasonable idea first, or for those moments where we feel like community input is very valuable
I'm sorry, "some people in the community think the results of a poll are the be-all, end-all of decisions, and thus we're not going to bother reaching out to the community for feedback at all except when we're stumped"? In what world does that follow?
With respect to the format, we feel like that putting the vote to the communtiy would result in a deadlock
And as such we have decided for now that we are not putting that vote out
i would like to point out that given our "pollution" of the maintainer team, a maintainer vote isn't that much different imo
also i'm not sure how and when that was decided but w/e
How did you jump to that?!?! The fact that we are not putting out a vote on this issue is not related to the fact that there are some in the community which don't seem to understand that there is no obligation on us to follow the results, aka that they are informative only. It is based on the fact that as of now we feel like it would not bring us more information, beyond what we already have.
If decisions are made - like this - by "the neoforged team" to do or not do something, that decision and the process to reach it should be put somewhere public - because otherwise it's very hard to tell the difference between "we, neoforged, have decided" and "I, orion, have decided"
Sadly some within the community don't seem to understand that
So for right now
We are reserving the voting option within the community for those moments where the maintainers can not come to a reasonable idea first, or for those moments where we feel like community input is very valuable
...
Yes, but that does not indicate that we are not putting out a vote on the formatting topic, because there are people who do not understand the format of the poll......
We are reserving the voting option within the community for those moments where the maintainers can not come to a reasonable idea first, or for those moments where we feel like community input is very valuable
...
We simply feel like the topic right now is not ready for it, and we can not learn from a poll, more then what we already know: it is more or less half split on the interface with or without I issue. Given that this has already been researched in the past.
Which is literally exactly what I pointed out as flawed...
are we arguing over the name of a class
How do you know that's a 50/50 split at present? How long ago was this researched? Where's the data?
Couple of months ago
Somewhere in this discord
A reaction poll somewhere? That's hardly large scale enough to tell you jack
I know because we added spotless to NeoForge and this came up
there was an I-vs-no-I poll a long time ago (either for 1.13/14 or the MCP->Moj migration)
And several times later
We're arguing over Orion wanting to only look for community feedback when the maintainers are stumped, and saying that's the official position of neoforged when that seems to be not as clear
In different locations
Hell I am pretty sure it was discussed in the last month
Somebody even dug up the old oracle standards
It has been discussed to no end
IList 
personally I have the hot take that naming is not worth arguing over when there are other things to get done
Yes and now maintainer have put a pin in it
I've not seen a recent poll in a large, public space about this
And made the decision
We made the spotless configuration public
Under the pretense that we will revisit it in the future again
When we have collected feedback on the current applied style
This literally happened monday
So... what are the plans to collect feedback?
Where's the big "style feedback" discussion?
Where's the poll?
do we need a discussion thread on everything
Hard to "collect feedback" if you're waiting on random people to mention something in #squirrels-๐ฆ about it or whatever
Use it, provide feedback, here: 1131782966989828156
Shit thread ids don't work
There is a thread in #1105595318197825557
Discuss it in #squirrels-๐ฆ or #general or that thread
That sort of feedback is fundamentally flawed, as we saw from the versioning fiasco - it's really just "who's talking the most". A poll, on the other hand...
We donโt, and this isnโt a big enough thing to warrant one
yeah like I really don't care if half the interfaces start with I and half don't
same

I flip a coin whenever I PR new interfaces
I care for "make it consistent" far more than I care for "use I" or "don't"
Then why are you making it an issue?
Wut? what exactly do you think I'm taking issue with here...?
Might want to read the backlog a bit
he is making an issue of me telling that we are not putting it to a vote...... an informative community vote.....
A poll is different from a vote
I'm taking issue with Orion's approach to community feedback and his failure to clarify what is his view and what is the view of the whole neoforged team
As far as I am aware: I have not stated anything that is not the opinion at the moment of the NeoForge maintainers
I did/had, which is why Iโm surprised you agreed with it
I might be wrong
But I am human
If so, any other maintainer is free to point this out to me
As per our own guidelines
luke are you seriously trying to flip the table and demand a community vote on the letter I????????
Wut no?
it sounds like this is the concern at hand
so what's going on here. i'm not able to catch up everything and that seemed to be your beef
Someone did. It was never addressed: #1136448404495532133 message
A poll is not a vote
I am saying that information about what the community thinks should not be collected through random threads
wow, that's 100% pure context free gibberish
is it a serious impactful topic?
it is not
No
where there is some serious differences of opinion and it needs a widespread community input?
Which is literally what I said, as to why there is no vote.....
Or poll....
Or community input
If information is not collected by a poll, that is fine - however, don't go arond claiming you have collected community feedback then!!! That's the thing I'm taking issue with...
[Reference to](#1136448404495532133 message) #1136448404495532133 [โค ](#1136448404495532133 message)We are reserving the voting option within the community for those moments where the maintainers can not come to a reasonable idea first, or for those moments where we feel like community input is very valuable
community feedback was collected from prior polls on the subject, I'm pretty sure it's always been 50/50 split
But we did!
There was a whole thread on this
what is the topic?
Where's the poll?
Formatting, specifically I or no I
really so i was right?????
We are under no obligation to make it a poll!
Public polls aren't "random message burried in a thread somewhere"
gotta use <#id_here>, e.g. #1131782966989828156 -> #1131782966989828156
Then don't claim you've collected any community feedback other than "these people happen to talk in #1105595318197825557"... most mod devs aren't talking in those threads, or looking at them at all
you will never reach a community accord because it's the definition of trivial "colour of the bikeshed" stuff
Last month somebody dug up the oracle definitions from 1996 or something like that
Yet that is what the community is supposed to do, it is why we create those threads, else threads like the one you are in now can all be closed
...those threads are for, uh, brainstorming, right?
Might want to rename the channel if not...
these threads are exactly where community feedback happens luke.
brainstorming is a kind of feedback
brainstorming is literally where the community brainstorms on ideas around a topic to see if there's merit
Where exactly are we supposed to go to get the kind of community feedback you want then?
Oh look, it was already done:
https://github.com/neoforged/NeoForge/discussions/165
#announcements message
Survey, that's a better word than poll...
but that's pointless
for this specific topic
because it's literally been done to death a billion times
Any given topic can have different ways of collecting feedback......... Sometimes it is a github discussion, sometimes a twitter poll, sometimes a discord thread, sometimes a discussion in #squirrels-๐ฆ
if luke has somehow managed to sleep through every other debate in the entire world on the matter for the past 20+ years ,that's their problem, not ours
Okay, if that's the case then pull up those results, discuss it with the maintainers, make a decision, change everything to be consistent, and use said data which you already have to back it up if people try to start up the argument again...?
exactly orion. there's plenty of reasons to do all those things. but not for this particular topic
or we could just not do that
why? that would take days of time. and this is at about 100000000000000000000000000000000 on the lines of todo list
i see no reason to invest more than approximately 30 seconds in the formatter
some things aren't important
yup exactly embeddedt
Which is what tech did XD
great. what's the rule @orion?
Sure, but like... that would take a maintainer vote, right? How much more complicated is it to set up a community vote than a maintainer vote?
[Reference to](#1136448404495532133 message) #1136448404495532133 [โค ](#1136448404495532133 message)Maintainer vote at a later time probably
Apparently the lack of decision there is the whole issue
yup
this is literally the definition of trivia
it's even worse than the version number thing. because at least that has some actual meaning
Hmm?
cpw you seem to misunderstand what I'm taking issue with...
wondering what tech decided. i really don't care either way.
I'm not saying "we need a community vote right now"
aren't you?
...no? Wut?
hi!
that seems like acall to a community vote RN
I'm saying that a community vote for this would be more informative than a maintainer vote...?
We decided to table it, we are using the I for now because that is what we had
I'm not syaing either of those should happen right not
ah, good, problem solved, no vote needed then
ah ok. so we punted, with I being the current standard.
I'm saying when it does happen you should survey the community
Yet when I am telling you that it won't happen now, you seem to take offense to that
Nope! It's not standard, unfortunately, within basically any neoforged project
honestly formatting is one of the things I really wouldn't care if they skipped surveying the community on
I only stated that we are not required to, not that we won't or never will
it has zero impact on the runtime functionality of the code or the feature set
it's not a standard within neo itself but that's another matter
Sadly some within the community don't seem to understand that
So for right now
We are reserving the voting option within the community for those moments where the maintainers can not come to a reasonable idea first, or for those moments where we feel like community input is very valuable
You kinda did though...
That's what started this...
Those are three different messages
yes
do extremely sarcastic polls count luke?
#1136448404495532133 message Was discussed here iirc and it was, at the time, said it's not important so stick with the I prefix
[Reference to](#1136448404495532133 message) #1136448404495532133 [โค ](#1136448404495532133 message)went for ICancellableEvent
The first one was targetted at a comment made earlier
The other two at a different statement
How? they start with "so"...
...
I can't vote in twitter polls
guess it'll remain forever undecided
gonna keep flipping my PR coin
that's the point. NOTHING reaches the perfect audience. Community votes are just going to be my twitter post, with more buttery language.
Not sure what point you're trying to make with this, unless you're trying to prove that you're intentinally misunderstanding what I've said in spite of my clarifications and explanations in which case... good job, I guess?
actually, i'm trying to make the point that community votes are at best a "data point".
and usually not a very useful one
there can be times, as orion said, that we need to solicit wider feedback about something where we honestly can't decide.
but those are likely the exception, because they're going to have to have a lot of wider context. which most people will explicitly ignore.
Why shouldn't you solicit wider feedback in other situations as well? Especially for something as unimportant, but highly visible, as this, where it doesn't exactly require domain-specific knowledge?
a "community vote" isn't going to tell you much except who can vote on the GH discussion or twitter poll or whatever.
What's the wider context here, then? I'm curious
the wider context for I vs not I? there isn't any. i fully expect this vote to go down to 50/50. because that's what's happened every other time
my point here on this specific issue, is that it's meaningless.
a "data point". an unhelpful "data point" at that
Okay, then that makes sense to me - the survey already happened. That's very different from saying that you're not going to collect feedback in situations like this
but for real stuff, that actually matters, there will be context and it'll mostly be ignored.
and that's even assuming polls aren't botted or otherwise manipulated
which they will be
dude. we've been saying these surveys have happened DOZENS of times over the past 20+ years. it's a stylistic thing, and people just have different opinions. pick one, and just stay with it.
heh wrong reply LOL
Cool, that's not what I'm disagreeing with... I'm upset about the claim that
We are reserving the voting option within the community for those moments where the maintainers can not come to a reasonable idea first, or for those moments where we feel like community input is very valuable
if everything is put to a community vote nothing will get done
and yes, we've inherited a codebase that has been confused ont he matter. shit happens. there's 10+ year old code here and not everyone has always been "strict" about such trivia
I'm not saying that everything needs to be put to a community vote either...
except you seem to have beef with us saying that?
in this case
- the maintainers came to a reasonable idea first
- community input is not very valuable for this specific subject
How about a compromise then.
Yeah, we're going to use LOWERCASE i
I'm saying that when there's been an expressed interest in making something a community vote, and when it's a pretty simple yes/no thing, and when setting up a poll is thus fairly easy, and when it doesn't need domain specific knowledge, surveying the community is probably smart
I approve of this idea
Apple will probably be very happy as well ๐
interface names with an odd number of letters start with an i, interfaces with an even number of letters start with an N
if we put to vote everything that someone wanted a vote on, then we'd be voting on everything all the time.
Things that can reasonably be put to the community without causing endless bikes he'd, will be.
Things that are a matter of trivia and don't actually affect anything (such as naming conventions), will just be dealt with by the team we created for that exact purpose.
ALL BIKESHED all the time
That's worded very carefully on purpose because of a couple important points
First: the community and "the modders" are a very different group entirely. The vast majority of "the community" don't know what an interface is, and are incapable of voting in an informed way, and are unable to consider the consequences of the decision for other people
Second: there are communities dedicated to botting our polls.
we have the best audience. hi audience!
Third: the maintainers team itself consists of only modders. While there are thousands more modders not in our team, there are orders of magnitude more non-modders ("wrong demographic")
Any poll we run wouldn't be reliable at all, because you run into almost every bias there is
The results are not representative, they're almost certainly not the demographic you're trying to poll, and there's a very good chance that they simply don't understand what you're asking
(which leads to them picking what others have told them to pick, which is another bias)
from a pure statistics perspective, the results are probably not representative either way, but we cannot do anything about that
This is like, the worst way to run a project like this.
exactly embeddedt
I would be fine with that, since that falls under the "where the community input is very valuable section"
aside from expanding the maintainers team to include more perspectives (which is already being done)
Exactly.
yeah. we're increasing the size of the teams, with people who have demonstrated their knowledge in this domain area
the exact sort of people who we want to trust to make good decisions for the future
However I would like to note that pure polls should omly be used were appropriate
ah, like Bertrand Russell
or do you think that you can't trust the maintainers @granite nimbus
"What if there was a language where every word was just the letter I a different number of times"
brainfuck
That's the whitespace esolang
it's just .........[]<<>]]]
It's a textual Turing machine. Don't diss my brainfuck
The fact that whitespace was invented by someone who specialises in programming language theory (indeed, the person behind Idris) will never stop being funny to me.
hehe yeah
almost 
you've got both space and tab for that, so I guess, i and I 
spabs
You could do the binary lambda calculus instead I guess, that only requires two symbols.
I mean, Turing machines can encode any other Turing machine through just a sequence of 0s
mark vs space?
And using 1s as separations
So like
Technically that? Since words of only I still implies spaces to separate words
I am rather dissapointed in how my views here have been represented. I am not calling for the community to decide stuff like this - The purpose of a poll is to collect information, not make decisions. I would point to the "which IDE do you use" poll as precedent for this. Non-modders are unlikely to interact heavily on GH discussions compared to modders. Yes, it can be botted - good thing you're not making final decisions off the result, right?
Frankly, this whole thing is leaving a bad taste in my mouth. My point has been, almost exclusively, that polls should be used to collect community feedback in cases where knowing what developers think is useful - and for naming conventions, that is useful, because at the end of the day we're the ones that have to work with your classes. Beyond that, I have been specifically arguing against the idea that polls should only be used when the maintainer are themselves in disagreement or stumped - poll should happen before any such maintainer decisions are being made, to collect information to better inform a vote there!
Folks in development spaces here like to make a habit of misrepresenting what I'm saying. So, cpw, no, I don't trust the maintainers - partially because I disagree with fundamental design decisions and decisions on what to prioritize that they have made, and partially because attempts to point this out have been met with quite a bit of bad faith. Disagree with me if you will - criticize me if you well - but for god's sake, stop misrepresenting what I'm saying
perhaps be clearer in what you're trying to say then?
because it reads to me like you are upset that we're not driving every aspect of this project with community votes and feedback
That's the impression I've had too ^
Third
which is not a good way to run a project. and if you're not saying that, that's GREAT.
but then i'm unclear what you are trying to say?
Might want to start at the top: #1136448404495532133 message
that's a 10,000 message readback.
which isn't super helpful as a response.
i'm curious what "fundamental design decisions" you disagree with however.
"collecting feedback when it's trivial to do so and when there has been an expressed interest in the collection of such feedback" != "driving every aspect of the project with community votes and feedback". Like, come on, hyperbole is ingenuine...
Running a poll is almost always trivial. All that remains is for someone to say "let's make a poll" at every single decision point and we're no longer a sustainable project
It's not hyperbole, it's the implications of what you're asking from us
"collecting feedback when it's trivial to do so and when there has been an expressed interest in the collection of such feedback" is NOT trivial. not to make it an actually useful contribution to the debate.
Actions have consequences, and a policy like this is extremely easy to abuse
compare my twitter vote
and also what curle say. if we have to stop every single time we need to make any decision to hold a day long (or longer?) vote with the community?
Sure, you decide based on how many people are likely to notice the outcome of the decision too...
And how urgent you need a decision made...
okay, great, interface prefixing is neither urgent nor noticeable
Even impact size is subjective
It's highly noticeable and not urgent at all - perfect for a poll
but it's also extremely trivial
Highly noticeable? The users don't know whether there's an I or not in interfaces.
Wasn't there a poll about this eons ago in the MCP project?
Devs do though
i'm curious luke. is I REALLY the reason you're upset?
silk there's been polls since before forge even existed
No, as you'd know if you looked at any of my earlier messages... or heck, the later ones...
then what is?
luke I have very poor object permanance and can't remember anything that was said in the conversation more than like a minute ago
There's thousands of messages luke, it isn't feasible to go through all of them in a discord this large, sadly
I'm annoyed by Orion's characterization, which is apparently the NeoForged characterization, of what does or does not need community feedback
what?
Good news is I linked the first few!
orion speaks for orion
Really, cause he keeps claiming otherwise and then got pissy when I asked for clarification...
In most cases yes, but I used a royal we here
He has a point
I used a royal we here
i have not seen any official statement on this. what curle says is probably closer to "official" position. but we haven't made any definitive statement on the project position YET
No, Orion, you specifically said that it was the view of the neoforged project...
That is what I got upset about
luke have you tried not taking what people say literally
How else do I take "the position of neoforged is XYZ, and yes that is the position of neoforged and you can't question it", which is what I was told, not-literally? Give me a sec, I'll find a link
community votes will be one of various tools to solicit feedback, used as and when we need to seek such feedback.
it's ok. orion
And yes I did that because I know the opinion of the others and the maintainers
exactly
OMG. he's right!
Yes, the opinion of the maintainers.....
that's not quite the gotcha you think it is luke
I am not sure how that could have been mistaken for anyting other that what was written there
Because I was very carefull when I wrote my stufff
I knew the opinions of the maintainers
And i was even sure that I knew the opinions of other SC members on this topic
Because it is something we have interally discussed to death
Really? There's been a maintainer vote on this then?
So I was able to make my statement, in this particular case, a royal we
why would there need to be a vote when you're informed enough to assume things
I knew the opinions of the maintainers
I only pointed that out because a maintainer specifically stated they weren't sure when the decisions was made...
We corrected maty internally already,
And we corrected the record here
Several people did
I don't understand what I did wrong
nothing orion
Then, ah, correct me if I'm wrong, but... if there's not been a maintainer vote, how could a decision have been made on that?
And functioning team :p
votes are not the only way to achieve consensus on a matter
Cool, that's good to know that that's what orion meant...
sometimes a consensus just means someone went "speak now or forever hold your peace" and peace was held
does anyone who pull requests to neoforge and the pull requests gets accepted becomes mainteiner?
More or less yes
No
no kittech. it's a good first step tho
or it could mean there was a PR to the linter configs and nobody commented a disagreement on it
those who have a good track record of such, and are in good standing with the team
Perfectly worded, as always ๐
The requirement is: you have experience working with the project, you have made contributions to the code or to the community
yeah. sci is our language wiz
That's basically it
However, I would say that "consensus" is not necessarily a "decision", nor was this distinction clear in Orion's messages. "Decision" heavily implies "official". If consensus is considered the official stance of neoforged, that's fine - well, except for the part where I was told that's not how that works
sadly luke, to actually make progress, the project has made LOTS of consensus decisions. like the one to exist for a start
Sure, that's also fine
in general, most teams work under consensus -- falling back to votes on contentious matters where consensus is unclear
If it's a decision made by consensus, is it or is it not an official view of the neoforged team?
exactly. votes, and especially community votes, should be the exception, not the rule of everyday business sci
screm
Because I've been told conflicting stuff, so some clarification would do a world of good in general
generally, it's not the official position, no. because the project isn't a person, and can't have opinions
the project can be forced to have an opinion by holding a meeting to make it have one.
that involves votes and quorums and other stuff
i'm confused on what the word "correct" is supposed to mean in this context, i specifically said that's my (personal) opinion (yay for pleonasms)
Okey maybe not corrected then
But I think we layed out the arguments against it decently well
Especially since this was already a topic we discussed when we forked
yeah. it should be in the governing docs.
And I used the term "corrected" because luke put value on your opinion, to indicated that your opinion would mean that my statement above were I used the royal we, was factually incorrect, in the sense that it had not been decided.
generally, we act and work on consensus. votes are used to try and decide on topics where there is clear differences of opinion. the SC vote is overriding when the maintenance community cannot make a decision.
it does seem like only part of my concern was supposedly addressed, i haven't seen any mention of the first part which is what i based my entire argument to begin with - team pollution
soliciting community feedback is often a useful part of the maintenance decisionmaking. but that's ultimately something that that team should decide on the weight of and importance associated with it.
what do you mean team pollution? because we've added new members?
It is a valid point, and should be addressed
why is that a problem?
There are older maintainers that have not spoken up in months / years / since we split
And we are growing the group
So there is an argument for "pollution", at least that is how I interpretted it
Did I do that wrong maaty?
au contraire, we've "kept" people that haven't interacted in ages, and given them voting powers on decisions affecting the current state of the project (that the inactive members aren't even accustomed with)
give them a "retired maintainer" role, that has no contributing power.
Something like "Grand old wise"?
Someone go filter through the roles.
Or some reference to Gandalf ?!?
how old is old
We should also have the moderator team elect a new moderator lead
based on last commit to neoforged?
since they have contributed in the discord or github
Is daemon not active anymore?
we should veer this discussion off of this thread and somewhere more... not-#1105595318197825557
I thought I saw him post like within the last week?
He was a temporary appointment by me, not elected by the moderators
Yeah we can take this to #project-talk
ok
The moderators may choose to keep him
i thought he was elected?
Nope.
I completly missed that XD
I appointed him
I could have sworn he was elected.....
[Reference to](#moderation-private message) #moderation-private [โค ](#moderation-private message)Current votes: 2 for ashers, 3 for daemon, 1 for sci.
don't gaslight me

wait we can see that?
If someone links it yes
no, but the bot can
You need a message link
yes, that's what I mean
is it possible to predict message IDs with any level of accuracy
probably a #squirrels-๐ฆ question
not to any practical extent
@wheat sinew https://discord.com/channels/@me/747189626522959924/1140359582930182275 curse you for making me remember conversations we had that are no longer relevant
even if you guess one right, you don't know any surrounding context
sadface can't read that XD
you mean that DM group 
Exactly ๐
No it was personal between me and sci
well there was also that dm group in which we also discussed that
but given you just cursed sci for making you remember a convo in an i assume inconfortable context..
No it's a different thing entirely
i won't remind you 
It's completely different to anything we talked about maty
It was personal between me and sci.
i mean, my concern was valid at the time 
It still is
yea
then can i bring up that DM group? do you want me to? 