Fix typo in Japanese

[x] Bugfix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)

Proposed changes
Fixed slight bugs of Japanese translation.
Checklist

[x] I have read the contribution guidelines
[ ] For non-bugfix PRs, I have discussed this change on the mailing list/slack team.
[x] I have run grunt to verify the unit tests pass
[ ] I have added suitable unit tests to cover the new/changed functionality

Coverage remained the same at 76.866% when pulling 4995e52dd6215e3fc473147885a5996411d1f1ea on node-red-hitachi:typo-jp into c0d8f904b3e0a1f3ad7d84899615a6a837a3917b on node-red:dev.


Update Jenkinsfile to use external library

This tool is no longer in active use and the repository will be archived so we're closing this pull request. Thank you for your interest and involvement in this project.


the output of the vLLM is different from that of HF

Thank you very much for your outstanding work！When trying to use the internlm model, I found that the features obtained by vLLM forward for the first time are different from those obtained by HF for the same input. I want to ask why this is, is it caused by the inconsistency of the underlying implementation architecture
Here are some of the configurations for the experiment：
Environment
cuda==11.8
python==3.9
torch==2.1.0+cu118
xformers==0.0.22.post7+cu118
transformers==4.35.0
graphics_card：V100

The code used to test the results
vLLM code：
from vllm import LLM, SamplingParams
prompts = ['请介绍下爱因斯坦的生平。']
sampling_params = SamplingParams(
    temperature=0, top_p=1, max_tokens=128, repetition_penalty=1.1,
    use_beam_search=True, best_of=5)
llm = LLM(model="internlm/internlm-7b", trust_remote_code=True)
outputs = llm.generate(prompts, sampling_params, use_tqdm=False)

Huggingface code：
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("internlm/internlm-7b", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("internlm/internlm-7b", torch_dtype=torch.float16, trust_remote_code=True).cuda()
model = model.eval()
prompts = ['请介绍下爱因斯坦的生平。']
for prompt in prompts:
    inputs = tokenizer([prompt], return_tensors="pt")
    for k,v in inputs.items():
        inputs[k] = v.cuda()
    gen_kwargs = {"num_beams":5, "max_length": 128, "top_p": 1, "temperature": 0., "do_sample": False, "repetition_penalty": 1.1} #官方版
    output = model.generate(**inputs, **gen_kwargs)
    output = tokenizer.decode(output[0].tolist(), skip_special_tokens=True)

The input is guaranteed to be consistent, but the hidden_state of the first forward output is inconsistent
huggingface framework
input_embeds-features before being fed to the model
array([[-0.007782, -0.001129,  0.001808, ...,  0.001305, -0.001099,
        -0.001038],
       [-0.01233 , -0.02148 , -0.00812 , ..., -0.002289,  0.01782 ,
        -0.021   ],
       [ 0.003204,  0.009766,  0.004364, ..., -0.02527 ,  0.005524,
         0.01636 ],
       ...,
       [-0.007263,  0.003021,  0.01721 , ..., -0.06006 , -0.02747 ,
        -0.02856 ],
       [-0.00412 ,  0.01068 ,  0.006622, ...,  0.00705 ,  0.007538,
        -0.0232  ],
       [-0.0381  , -0.02625 ,  0.0065  , ...,  0.02722 ,  0.02759 ,
        -0.00787 ]], dtype=float16)
hidden_state-the output of the first round forward
array([[-0.0571 ,  1.743  ,  0.521  , ..., -1.4795 , -5.82   , -0.3972 ],
       [-0.671  , -2.166  ,  1.967  , ...,  0.2404 , -1.173  , -0.0839 ],
       [-0.8433 , -5.168  , -0.03244, ...,  5.035  ,  2.578  , -0.507  ],
       ...,
       [-0.547  , -4.03   ,  2.383  , ...,  3.295  ,  0.3582 ,  0.737  ],
       [-1.602  , -4.344  ,  0.466  , ...,  4.594  ,  3.092  , -0.1273 ],
       [-1.817  , -5.45   ,  0.1937 , ...,  5.4    ,  3.84   , -0.3865 ]],
      dtype=float16)

vLLM framework
vLLM==0.2.2(https://github.com/vllm-project/vllm/releases/download/v0.2.2/vllm-0.2.2+cu118-cp39-cp39-manylinux1_x86_64.whl#sha256=7a8b51f0565baaa820f8dc0376e1ff5a732fcabda26397a55becd90e07b5fc63)
input_embeds-features before being fed to the model
array([[[-0.007782, -0.001129,  0.001808, ...,  0.001305, -0.001099,
         -0.001038],
        [-0.01233 , -0.02148 , -0.00812 , ..., -0.002289,  0.01782 ,
         -0.021   ],
        [ 0.003204,  0.009766,  0.004364, ..., -0.02527 ,  0.005524,
          0.01636 ],
        ...,
        [-0.007263,  0.003021,  0.01721 , ..., -0.06006 , -0.02747 ,
         -0.02856 ],
        [-0.00412 ,  0.01068 ,  0.006622, ...,  0.00705 ,  0.007538,
         -0.0232  ],
        [-0.0381  , -0.02625 ,  0.0065  , ...,  0.02722 ,  0.02759 ,
         -0.00787 ]]], dtype=float16)
hidden_state-the output of the first round forward
array([[[-0.0643 ,  1.74   ,  0.5254 , ..., -1.48   , -5.82   ,
         -0.3816 ],
        [-0.674  , -2.17   ,  1.966  , ...,  0.2505 , -1.162  ,
         -0.0839 ],
        [-0.8413 , -5.168  , -0.03452, ...,  5.04   ,  2.582  ,
         -0.5073 ],
        ...,
        [-0.5483 , -4.035  ,  2.38   , ...,  3.295  ,  0.3564 ,
          0.7373 ],
        [-1.603  , -4.344  ,  0.466  , ...,  4.594  ,  3.092  ,
         -0.1282 ],
        [-1.816  , -5.45   ,  0.1952 , ...,  5.4    ,  3.836  ,
         -0.3877 ]]], dtype=float16)

I've also noticed this issue. When I tested with Llama2 7B, specifying the same max tokens, the hf baseline produced a Total_num_tokens of 52455 tokens, whereas my run resulted in 44670 tokens.

How can I set min_new_tokens to ensure the generation of the same length?

Hi,
I also got this problem but my case is even worse.
Actually, I used Llama2-7B-Chat-Hf with
Config info:
vllm 0.2.6
transformers 4.36.2
LLM Llama2-7B-Chat-Hf
Python 3.10.12
Ubuntu 22.04
GPU NVIDIA 4090 24gb
Code
llm = VLLM(model="meta-llama/Llama-2-7b-chat-hf", tensor_parallel_size=1, trust_remote_code=True, temperature=0.6, top_k=5, top_p=0.9, torch_dtype=torch.bfloat16, max_new_tokens=500)
llm("hello")
Answer from llm("hello"):
@matthew-mitchell.com
www.matthew-mitchell.com
Matthew Mitchell is a composer and sound artist based in London. He creates music that spans a range of genres, from electronic and acoustic sounds to sound installations and live performances. His work often explores the relationship between sound and space, and he has a particular interest in the way that sound can be used to create immersive and transformative experiences.
Matthew has worked with a wide range of artists and organizations, including the BBC, the Guardian, and the Tate Modern. He has also been commissioned to create music for a number of festivals and events, including the London 2012 Olympics and the Edinburgh Festival Fringe.
In addition to his work as a composer, Matthew is also a skilled teacher and has given workshops and masterclasses at a number of institutions, including the Royal College of Music and the University of Edinburgh. He is passionate about sharing his knowledge and skills with others and helping to inspire the next generation of musicians and sound artists.
Matthew is also a prolific recording artist and has released a number of albums, including "The Light That Fills the World" and "The Space Between". His music has been praised for its beauty, depth, and emotional resonance, and he has been described as a "master of his craft".
Overall, Matthew Mitchell is a highly respected and innovative composer and sound artist who is pushing the boundaries of his craft and creating truly unique and transformative experiences for audiences around the world.
My questions
Also, I don't know Llama2-7b-Chat occupied around 21GB from VRAM.
(In fact, I run exact the same code before but it takes only around 14GB VRAM)
Does anyone get weird answer and high-occupied GPU memory as me? If yes, can I know how you fixed that?

hi, I noticed you can print the hidden_state of the vllm model output of the first round forward. Is there any relevant code? Thank you very much.

hi @will-wiki could you please answer @Abigail61 ?

any updates on that?

I'm facing similar issue with another model. Kindly provide an update on this.


og_image and twitter_image should fall back on meta_image

... and be reflected in the previews. It's working for title and description already, so this would add consistency.
Great looking plugin btw. It is lacking some essential features though ... will post issues :)

I've already fixed this on the develop branch. Will be part of the next release.

Will it pick up the first used image of the article if no specific image has been defined in MetaKnight by default?
I have a cover image field which I would like to be used for this by default.

I've already fixed this on the develop branch. Will be part of the next release.

@jonathanmuth since the latest release is from November, does it mean it's already resolved?

Still no fix to this available in 1.2.2 for me. Would be nice to have this solved so that for individual pages always the first picture will be used as a fallback.


[DateTimePickerv2] show error message when time is not selected

What package is this for?

[x] React
[ ] Angular

Describe the bug
We removed the default time value 00:00 for DateTimePIckerV2 but when time was empty or not picked. There was no clear error message to indicate that time is not selected.
To Reproduce
Steps to reproduce the behavior:

Go to '...'
Click on '....'
Scroll down to '....'
See error

Please create a reduced test case in CodeSandbox:
https://codesandbox.io/s/github/carbon-design-system/carbon-addons-iot-react/tree/next/packages/react/examples/codesandbox

Expected behavior
A clear and concise description of what you expected to happen.
Environment/versions:

OS: [e.g. MacOS, Windows]
Browser: [e.g. chrome, safari]
carbon-addons-iot-react version: [e.g. v2.60.0]

Additional context
If applicable, add screenshots to help explain your problem.
Add any other context about the problem here.
Specific timeline issues / requests
Do you want this work within a specific time period? Is it related to an
upcoming release?
NB: The core contributors will try to work with your timeline, but it's not
guaranteed. The earlier you make a request in advance of a desired delivery
date, the better!

Copied
Hey @jessieyan @JordanWSmith15 @davidicus I've left comments based on what Jessie summarized, let me know if this makes sense.

Would you please confirm the changes:

Apply button is aways enabled, we only validate date/time input after user click on the apply button ( like in Modal)

Correct. For context — we should avoid disabling the Apply button because that could lead the user to getting stuck in the flow, and not know how to make that disabled button enabled. If the user selects a date and hits Apply before setting a time, then display the error validation on the time inputs to let the user know that is a required step.

After click on apply button and if time not selected, we show invalid message on the time picker.  If Date not selected, we need to show some message somewhere as well?

Yes, I would agree with that. I don't think there is a current pattern for displaying an error on the calendar like that outside of the input itself, so that will have to be something custom.

Show date/time mask on the top input if date/time not selected
If no date and no time, we show text like YYYY-MM-DD HH:mm to YYYY-MM-DD HH:mm.
If no date but have time, show text like YYYY-MM-DD 12:00 to YYYY-MM-DD 13:00..
If has date but not time, show text like 2023-01-19 HH:mm to 2023-01-19 HH:mm

Let me confirm with Robin to see what the best text formats should be here.

We do not show invalid state on the top input field if time or date not selected.  The top input should be controlled by user.

The invalid state should show up after the dropdown has closed so the user can see what the error message is. Before closing the dropdown the invalid states should be contained within the dropdown for the date or time selection. For example, if the user selected a date and time range, and then hit Apply, there could be a top input error that states that the date and time range is invalid. Though, playing around with the Carbon date picker, if the user closed the dropdown and sees the top input error message, if they open up the dropdown again, the error message should persist until the error has been fixed.


Problem: test_clean_shutdown test failure resulting in failed builds

The test is now working correctly, I think, but failing. Meaning, we do not always shut down correctly in response to a SIGTERM.

Related to #767


[RFR] Stabilize e2e tests

test fail 🙀

I know, they randomly fail. Moreover, the failing tests are random too. Sometime that's the auth tests, sometimes the filter tests

Should be fine now: I restarted the travis build ten times in a row


[#256] Update operator-sdk from v1.15.0 to v1.28.0 (go 1.19)

This looks great, I guess the only worry is that it would force a reconcile and a new stateful set on an update, but I am not seeing any change that would indicate that will be the case.
There is one upgrade test, it may be worth verifying that the logs for that test are as expected.

I'll verify that, thx.


bug: Popup alert with horizontal and vertical scroll

Type: bug
Platform: all
Windows 7 - Chrome

Asus Zenfone 5 - Android 4.4.2

This should be fixed in master as of b8df44d4c44e47516032b96cac79147eb48afe4c
Try a nightly build and let me know you're still seeing it, but I'm going to close for now.


Add Indonesian Translation for Cloud Controller Manager Concepts page

This PR translates Cloud Controller Manager Concepts docs to Bahasa Indonesia for #15341
Requesting reviews @girikuncoro @irvifa

/assign @irvifa
/assign @girikuncoro

@phanama beautiful translation! there are some minor typos, but overall great job! can merge after the typos have been addressed
/lgtm

Thanks for your contribution!
/lgtm
/approve


Feat: Want to add about JIRA

Describe the feature
I want to add topics on JIRA

What is JIRA ?
How is it used in software development projects?
How does Jira support Agile methodologies ?
What are the advantages of using Jira for tracking issues and bugs in a DevOps ?
What is a Jira workflow ?
How do you monitor and report on the progress of a DevOps project using Jira?
How does Jira integrate with Git?
What is JIRA workflow ?

I have basic level understanding in the domain - "Devops"
But during my academics, I have gained knowledge regarding Software Engineering, Agile methodoligies and some basic Devops concepts.
So I will explore and gain the best content to write into this article.
@mdazfar2, could you please assign me this issue under GSSOC'24 ?
Add ScreenShots
NA
Record

[X] I agree to follow this project's Code of Conduct
[X] I'm a GSSOC'24 contributor
[ ] I'm a VSoC'24 contributor
[X] I want to work on this issue

@sreevidya-16 Thank you so much for raising the issue, but I think it is not needed, so please don't be discouraged. I have to close this issue. If you want to share documents related to DevOps, please create an issue in the DevOps-Topics template.


minder repo register exceeds context deadline

Describe the issue
Running repo register exceeds the context deadline when trying to register a repository from an enrolled org with ~200 repos.
To Reproduce

Enroll an org that has around ~200 repos (using the OAuth flow, do test the same with the GH App)

minder provider enroll --provider github --owner stacklok-minder-tests

Do minder repo register

➜  minder-smoke-tests git:(main) ✗ minder repo register
WARNING: Running against a test environment (staging.stacklok.dev) and may not be stable
Message: Error getting registered repos
Details: context deadline exceeded

What version are you using?
No response

@ethomson -- do we need to fix (or re-test) this for the beta quality bar?


Hot Module Launch Checklist

These are things that need to be done before the Hot Module can be launched. These should be done throughout the next four weeks as they are unblocked by other issues being closed. Each of these changes needs to be made on staging and prod so that we can test everything properly.
Unblocked:

[x] have campaign leads all set their job title in /user/edit. format should be Campaigns Manager, Health

Blocked by the decision on which 10 campaigns we're make hot for August:

[x] goals set on custom settings for the 10 campaigns; goals should be set w/ @joshcusano and campaign leads using Josh's calculator. http://cl.ly/image/0j3p1j2d1X1j
[x] set those 10 campaigns so that the high season date is set from August 1st 2015 to August 31st 2015. http://cl.ly/image/0J252D3g111i
[ ] make sure no other campaigns besides these 10 have high season date set for August 1st 2015 to August 31st 2015. can be done through sql query

Blocked by #4602:

[x] upload photos for all campaign leads. photos an be uploaded at /user/[uid]/edit. work with @lkpttn to make sure the images that are uploaded are being output per the mock
[x] make sure proper campaign lead is set as author for the 10 campaigns

Blocked by #4446:
Set progress copy on https://www.dosomething.org/admin/config/dosomething/dosomething_campaign

[x] 0-20% progress copy: Ready to rumble?! [campaign_title] starts NOW. Submit photos of the action you take and the impact you make ASAP, and then you can update as you go!
[x] 21-40% progress copy: We’re gaining steam! Post on social to get your friends involved so we can reach [campaign_goal] [reportback_noun] [reportback_verb] -- the more the merrier, as they say!
[x] 41-60% progress copy: Two (or three! or fifty!) [reportback_noun] [reportback_verb] are better than none. Share on social to get your friends in on the [campaign_title] action!
[x] 61-80% progress copy: Time to kick it into high gear, comrades! Keep submitting photos of you werkin’ towards our goal of [campaign_goal] [reportback_noun] [reportback_verb]. #yourimpact
[x] 81-99% progress copy: [campaign_goal] [reportback_noun] [reportback_verb] -- we’re comin’ atcha!  Keep the photos coming.
[x] 100+% progress copy: WE MADE IT! Congrats on completely crushing our goal of [campaign_goal] [reportback_noun] [reportback_verb]. Bonus level: Let’s go above and beyond: Take MORE action! Make MORE impact! Submit MORE photos!

Blocked by #4637:

[x] set Hot Phase Share Prompt on https://www.dosomething.org/admin/config/dosomething/dosomething_campaign to "Rally your friends to crush this goal!"

Last this to do is Enable Hot Module:

[ ] enable hot module; doesn't need to be done if #4656 is closed out

@angaither Let's walk through this together on Monday as well.

Arf @angaither can you show me where to add campaign lead to set the author? Is this a different field than CREATED BY?

@julielorch you have to update the "Authoring Information"

Thanks @sbsmith86. Can I add using Campaign lead UIDs?

@julielorch I think you have to do username

@julielorch and sometimes the username is set to a NUMBER. FUN... lemme know if you need halp!

@angaither did we make an issue for this? "make sure no other campaigns besides these 10 have high season date set for August 1st 2015 to August 31st 2015. can be done through sql query"

@julielorch yep! https://github.com/DoSomething/phoenix/issues/4724


Variant#serializable_hash in 9.2.0

Hi folks,
Outside of a ShopifyApp session block, I was trying to call Variant#as_json, and kept getting the very unhelpful error:
TypeError (compared with non class/module) with no traceback.
I was able to track it down to this recent addition by @marschattha in lib/shopify_api/resources/variant.rb:
def allow_inventory_params?
  Base.api_version < ApiVersion.find_version('2019-10')
end

If you're using ShopifyApp and do something like:
product = shop.with_shopify_session { ShopifyAPI::Product.find(XXX) }

the Base.api_version the api version is only set within the block, and is otherwise ShopifyAPI::ApiVersion::NullVersion causing the TypeError on comparison.
It feels weird to not be able to serialize an object outside of a session block.  Not sure how/if you'd like to solve this issue, but thought I might share my research here in case others experience the same problem.

Thanks for reporting this in, we will look into it!

For reference, here's the PR where that was added: https://github.com/Shopify/shopify_api/pull/731

Upvote - been having the same issues for a few weeks


GOSUB/RETURN

Acts as a subroutine, jumps to the line specified and runs those lines until it reaches a RETURN command and jumps back to the line after the original GOSUB command

GOSUB is just GOSUB <line number> and I'll use a stack to record the line after the GOSUB line so that RETURN can just pop off the most recent one and go to that line.

I think it's done but we'll have to see, can't test it yet because there are other commands that need to be implemented before it will work


Topic conversion to gradle

WIP

Still working through this, not ready for review yet. Opened PR so Steve can take a look at changes easily


NotFound Handler + Compress does not return body

What version of Hono are you using?
3.12.6
What runtime/platform is your app running on?
Node
What steps can reproduce the bug?
import { serve } from '@hono/node-server'
import { Hono } from 'hono'
import { compress } from 'hono/compress'

const app = new Hono()
app.use('*', compress())
app.notFound((c) => c.json({ message: 'error message' }, 400))

serve({
  fetch: app.fetch,
  port: 3000,
})

What is the expected behavior?
Returns error body:
{ "message": "error message" }

What do you see instead?
No body content - browser default error page
Additional information
Might be an issue in hono + compress or maybe in @hono/node-server package, as there were similar issues in regular handlers in older versions

@sebastianwessel i tested with 3.12.6 and wrote this test, it works as expected
`describe('Not Found JSON', () => {
const app = new Hono()
app.use('*', compress())
app.notFound((c) => {
return c.json({ message: 'error message' }, 400)
})
it('Custom 404 Not Found', async () => {
const res = await app.request('http://localhost/foo')
expect(res.status).toBe(400)
expect(await res.json()).toEqual({ message: 'error message' })
})
})`

@sebastianwessel issue was that compress + hono + hono/node-server were not working correctly, when middleware compress is used. I fixed this so when content-encoding is gzip, deflate it needs compressing the body with specific encoding. Hono currently implements gzip and deflates. Tomorrow i will issue PR for this fix.

@usualoma indeed it solves this bug, but there is another bug, when running with this test:
  const app = new Hono()

  app.use('*', compress())

  app.notFound((c) => {
    return c.json({ message: 'error message' }, 400)
  })

  it('custom error message 400 Not Found', async () => {
    const res = await app.request('http://localhost/err', {
      method: 'GET',
      headers: new Headers({ 'Accept-Encoding': 'gzip' }),
    })
    expect(res.status).toBe(400)
    expect(res.headers.get('Content-Encoding')).toEqual('gzip')
    expect(res.headers.get('Content-Length')).toBeNull()
    expect(await res.json()).toEqual({ message: 'error message' })
  })

test fails with SyntaxError: Unexpected token  in JSON at position 0

Hi @ariskemper
Thank you for your comment.
I haven't actually tried it, but I think in this case you need to do the gunzip process yourself. I think you are getting an error because you are not doing that here.
expect(JSON.parse(zlib.gunzipSync(await res.text())))

@usualoma compression should be done by the server and not, when you receive response from the server.

@ariskemper Thank you. I am happy to have the test added.


Add an alias for 'git checkout -b'

yes please :+1:

Maybe we need to ping @Stibbons? Are you still the maintainer of the git plugin?

+1 I don't have the merge right unfortunately

Wow, I had almost missed this one!


When game ends (10 goals) a message should appear

Now its just kind of "frozen)

Is there any error in the console?
When the game ends you are sent to the game summary screen.

This probably happened in relation with the shuffle-bug that caused two of the same players. Closing.


Widget does not rebuild even when ChangeNotifier is notified.

Describe the bug
Calling notifyListeners() on CounterModel does not rebuild widgets watching focusCounterProvider. It only rebuilds when focusIdProvider changes. Is there anything I missed?
To Reproduce
class CounterModel extends ChangeNotifier {
  CounterModel(this.read, this.id);

  final Reader read;
  final String id;

  int _value = 0;
  int get value => _value;

  void increase() {
    _value++;
    read(focusIdProvider.notifier).state = id;
    notifyListeners();
  }
}

final counterProvider = ChangeNotifierProvider.family<CounterModel, String>(
  (ref, id) => CounterModel(ref.read, id),
);

final focusIdProvider = StateProvider<String?>((ref) => null);

final focusCounterProvider = Provider<CounterModel?>(
  (ref) {
    final id = ref.watch(focusIdProvider);

    if (id == null) {
      return null;
    }

    return ref.watch(counterProvider(id));
  },
  dependencies: [counterProvider, focusIdProvider],
);

class MyApp extends ConsumerWidget {
  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final counterModel = ref.watch(focusCounterProvider);

    return MaterialApp(
      home: Center(
        child: Column(
          children: [
            Row(
              children: const [
                Counter("A"),
                Counter("B"),
                Counter("C"),
              ],
            ),
            Text("Focus: ${counterModel?.id} - ${counterModel?.value}"),
          ],
        ),
      ),
    );
  }
}

class Counter extends StatelessWidget {
  const Counter(this.id);

  final String id;

  @override
  Widget build(BuildContext context) {
    return ProviderScope(
      overrides: [focusIdProvider.overrideWithValue(StateController(id))],
      child: Consumer(builder: (context, ref, child) {
        final counterModel = ref.watch(focusCounterProvider);

        if (counterModel == null) {
          return Container();
        }

        return ElevatedButton(
          onPressed: () {ref.watch(focusCounterProvider)?.increase(); ref.refresh(focusCounterProvider);},
          child: Text("$id - ${counterModel.value}"),
        );
      }),
    );
  }
}

Expected behavior
Each time the button on the counter is pressed, the number of text on the button increases, and the data of the most recently changed counter is displayed as text below.
I need this for a drawing app with multiple tabs.

Provider filters updates if its return value is the same.
Try Provider<CounterModel?> -> ChangeNotifierProvider
Although do note that this change can cause dispose issues. Ideally you'd be using StateNotifier instead of ChangeNotifier. Then your initial code would work

Provider filters updates if its return value is the same.
Try Provider<CounterModel?> -> ChangeNotifierProvider
Although do note that this change can cause dispose issues. Ideally you'd be using StateNotifier instead of ChangeNotifier. Then your initial code would work

Okay. I'll consider switching to StateNotifier. Thank you!


Error when accessing TrustyAI service through ODH dashboard

Description
After deploying a model in ODH, sending training data and scheduling a fairness metric request, when trying to access the Model Bias screen through the ODH dashboard, an error screen appears stating that an error has been encountered when accessing the TrustyAI service. Reproduced while following this demo
 using ODH UI.
Preconditions

OpenShift cluster with ODH (used OCP 4.14.16 and ODH 2.11)
Data Science Project, with the serving runtime, model server and models (one model server for each model) described in the demo above (deployed through ODH UI instead of through CLI)
TrustyAI enabled for the project.

Steps to reproduce

Send training data for both models, as described in the demo above.
Label data fields, as described in the demo above.
Define the following bias metric for both models through the UI:
"protectedAttribute": "Is Male-Identifying?",
"privilegedAttribute": 1.0,
"unprivilegedAttribute": 0.0,
"outcomeName": "Will Default?",
"favorableOutcome": 0,
"batchSize": 5000
Schedule a fairness Metric request, Identity metric request and send real-world data, as described in the demo above.
Try to access the Model Serving > Model Bias screen in the ODH dashboard.

Expected result
The screen is shown, and the defined metrics can be properly visualized.
Actual result
An error screen appears with the following message:

TrustyAI Error
We encountered an error accessing the TrustyAI service:
Cannot read properties of undefined (reading 'value')

When in this error screen, if you click on the "Configure" button, a loading screen appears but the content never actually loads (see attached images).
Even if a new model servers  and models are created, when you try to access their corresponding Model Bias screen in the dashboard, the same error appears.
Error logs:
trustyai-service-oauth-proxy.txt
trustyai-service.txt
trustyai-service-operator-controller-manager.txt
Screenshots:

Thanks for the report @adolfo-ab.
This issue involves the ODH Dashboard too.
When in the "metrics" Dashboard page, a request equivalent to
curl 'https://odh-dashboard-opendatahub.<redacted>/api/service/trustyai/model-namespace/trustyai-service/metrics/all/'

is performed. This requests all registered metrics in the TrustyAI service.
Typically, if only fairness/bias (eg SPD/DIR) metrics are registered, the response will be
{
    "requests": [
        {
            "id": "dc171b99-0b77-4a92-b8be-e1c855d1749a",
            "request": {
                "@type": "GroupMetricRequest",
                "modelId": "demo-loan-nn-onnx-alpha",
                "requestName": "SPD",
                "metricName": "SPD",
                "batchSize": 5000,
                "protectedAttribute": "Is Male-Identifying?",
                "outcomeName": "Will Default?",
                "privilegedAttribute": {
                    "type": "DOUBLE",
                    "value": 1
                },
                "unprivilegedAttribute": {
                    "type": "DOUBLE",
                    "value": 0
                },
                "favorableOutcome": {
                    "type": "INT64",
                    "value": 0
                },
                "thresholdDelta": 0.1
            }
        },
        {
            "id": "a149e32a-8df1-47d7-a227-7c67cadef334",
            "request": {
                "@type": "GroupMetricRequest",
                "modelId": "demo-loan-nn-onnx-alpha",
                "requestName": "DIR",
                "metricName": "DIR",
                "batchSize": 5000,
                "protectedAttribute": "Is Male-Identifying?",
                "outcomeName": "Will Default?",
                "privilegedAttribute": {
                    "type": "DOUBLE",
                    "value": 1
                },
                "unprivilegedAttribute": {
                    "type": "DOUBLE",
                    "value": 0
                },
                "favorableOutcome": {
                    "type": "INT64",
                    "value": 0
                },
                "thresholdDelta": 0.2
            }
        }
    ]
}

And the dashboard will populate the page from that (importantly, fetching request.favorableOutcome.
However, if there's an identity metric registered, the response will be similar to
{
    "requests": [
        {
            "id": "13a4bb60-22f8-4289-97cc-7335a4a71b59",
            "request": {
                "@type": "IdentityMetricRequest",
                "modelId": "...",
                "requestName": null,
                "metricName": "IDENTITY",
                "batchSize": 250,
                "columnName": "Is Male-Identifying?",
                "lowerThreshold": 0.0,
                "upperThreshold": 0.0
            }
        },
        {
            "id": "dc171b99-0b77-4a92-b8be-e1c855d1749a",
            "request": {
                "@type": "GroupMetricRequest",
                "modelId": "demo-loan-nn-onnx-alpha",
                "requestName": "SPD",
                "metricName": "SPD",
                "batchSize": 5000,
                "protectedAttribute": "Is Male-Identifying?",
                "outcomeName": "Will Default?",
                "privilegedAttribute": {
                    "type": "DOUBLE",
                    "value": 1
                },
                "unprivilegedAttribute": {
                    "type": "DOUBLE",
                    "value": 0
                },
                "favorableOutcome": {
                    "type": "INT64",
                    "value": 0
                },
                "thresholdDelta": 0.1
            }
        },
        {
            "id": "a149e32a-8df1-47d7-a227-7c67cadef334",
            "request": {
                "@type": "GroupMetricRequest",
                "modelId": "demo-loan-nn-onnx-alpha",
                "requestName": "DIR",
                "metricName": "DIR",
                "batchSize": 5000,
                "protectedAttribute": "Is Male-Identifying?",
                "outcomeName": "Will Default?",
                "privilegedAttribute": {
                    "type": "DOUBLE",
                    "value": 1
                },
                "unprivilegedAttribute": {
                    "type": "DOUBLE",
                    "value": 0
                },
                "favorableOutcome": {
                    "type": "INT64",
                    "value": 0
                },
                "thresholdDelta": 0.2
            }
        }
    ]
}

Making the page fail since there is not request.favorableOutcome in the identity metrics.


Compilation on the iCUB on the pc104

Dear all,
I am compiling the icub-main, following the steps described on the wiki on the pc104 and I found an issue that looks like a typo:
cd $ICUB_DIR
rm CMakeCache.txt
ccmake $ICUB_ROOT/main

shouldn't it be:
ccmake $ICUB_ROOT

Yes, definitely, thanks for pointing this out.
Fixed now.

Hi @pattacini ,
You are always welcome.


correct naming of median combination in comb_example.py

Doesn't change any results actually, but naming is a little misleading.
All Submissions Basics:

[ ] Have you followed the guidelines in our Contributing document?
[ ] Have you checked to ensure there aren't other open Pull Requests for the same update/change?
[ ] Have you checked all Issues to tie the PR to a specific one?

All Submissions Cores:

[ ] Have you added an explanation of what your changes do and why you'd like us to include them?
[ ] Have you written new tests for your core changes, as applicable?
[ ] Have you successfully ran tests with your changes locally?
[ ] Does your submission pass tests, including CircleCI, Travis CI, and AppVeyor?
[ ] Does your submission have appropriate code coverage? The cutoff threshold is 95% by Coversall.

New Model Submissions:

[ ] Have you created a .py in ~/pyod/models/?
[ ] Have you created a _example.py in ~/examples/?
[ ] Have you created a test_.py in ~/pyod/test/?
[ ] Have you lint your code locally prior to submission?

will merge in the next release :)


Give users on a domain the ability to join their colleagues when the company is already using Expensify

Problem: One of the cool things about Expensify is that anyone can sign up without their company's permission or invitation. But this means when an employee signs up independently they are not aware their company is already using Expensify and so end up creating their own workspaces in error, causing a lot of confusion for themselves and their company
Solution: Mirror Classic when it comes to an employee that signs up with a private domain email of a company that already has one or more workspaces. It goes like this:

Sign-up with an email address on a private domain that has existing workspace owners
We ask for their first name/last name (Ice breaker)
Next, we show a step that:

Let’s them know people on derp.com are already using Expensify.
We’ve sent a magic code to validate their account so they can join them
An input for said magic code to validate the account
An option to skip and move on with onboarding as normal if they prefer

If they validate the account, the next step shown is a list of all the workspaces owned by members of their private domain.

They can only pick one to join

If they click “Join team” we do one of two things depending on if the workspace pre-approves join requests, or an admin needs to accept:

Pre-approval not required:

Add them to the workspace
Drop them in the LHN
populate their onboarding/ConciergeDM with the invited member set of tasks

Pre-approval required:

Drop them in the LHN to continue exploring the product
Send the actionable message in the #admins room to accept or decline (just like policy join links that require approval)
On the workspaces page, show the workspace row they’re pending to be accepted to join with the “[Requested]” badge (just like a policy join request that needs to be approved)
If they select New Workspace in the + menu or Workspace page, have a warning just to let them know we’re waiting on their colleagues to still accept the request to join
Once accepted, they’ll get an email as they’re added to the workspace and we populate their onboarding/ConciergeDM with the invited member set of tasks.

Here's the overall flow:

Included workspace member count and owner after feedback in Slack.
cc @Expensify/design for thoughts and feelz

Looks solid to me!

Looks solid to me!

Same!

How does this look on desktop?

Also curious 🙃 👀

Here's the desktop mocks:

Do you think it's better if I don't stretch the validation code to be full-width with the modal?

I like the full width version, personally! ❤

Agree! Stretch it baby! Desktop mocks looking good. 🫶

The jury has spoken. Final Figma files can be found here: https://www.figma.com/design/ir27daDKHaB1g4iZCT22K5/Onboarding-v2?node-id=7147-9183

@trjExpensify - can this be built by the contributor or do we need BE code? Curious for a second set of eyes. Asking you as you wrote down the steps in the solution

I think this is mostly FE, but we might need some BE work for the "Select a workspace" page to get that list of accessibleDomainPolicies - I'm not quite sure if we have that available to NewDot.
@luacmartins & @mountiny we built the request to join stuff in simplified collect with the Share policyJoinLink a while back, so the #admins message to accept or decline (if pre-approval is required) should be in place and usable here already, right?

Cool, so should be reusable to call that request to join from here when needed with Ask to join:

but we might need some BE work for the "Select a workspace" page to get that list of accessibleDomainPolicies - I'm not quite sure if we have that available to NewDot

Do you have any idea if we'd have a list of accessibleDomainPolicies available in NewDot or if that's going to need BE work here?

Do you have any idea if we'd have a list of accessibleDomainPolicies available in NewDot or if that's going to need BE work here?

AFAIK we don't have this data in NewDot yet, so we'd need to fetch it when we open that page.

Kewl, so we do need BE here then yes?

yes

Yeah, agreed we will need to fetch that; also, somehow, indicate which one is "Join now" and which one is "Ask to join". couple questions:

How do the "Join Now" and "Ask to join" changes when you click on them?
If user clicks skip for now, where will they access this modal/ list of workspaces to join with buttons later in the product?

How do the "Join Now" and "Ask to join" changes when you click on them?

Join now = workspace doesn't require approval to join
Ask to join = workspace needs admin approval to join
That's the distinction between the two buttons, so I assume that's something on the policy object we store for use with policy join links.
As for what happens when you click them, that's outlined in the OP in step 5. Let me know if you have any qs on that!

If user clicks skip for now, where will they access this modal/ list of workspaces to join with buttons later in the product?

If we're mirroring the Inbox on OldDot, they don't. So maybe "Skip" is better than "Skip for now" which implies you can get back to it. We could look at something on the workspaces page with a list of available workspaces to join instead of the empty state when applicable, but I'm also fine to descope that and keep it to this one-time onboarding modal flow.

That's the distinction between the two buttons, so I assume that's something on the policy object we store for use with policy join links.

I have clarified the exact workspace setting in the original description!

Final mockuops
Mobile - Employee

Web - Employee

Actionable whisper in # admins (Exists)

populate their onboarding/ConciergeDM with the invited member set of tasks

Just for reference... what are these exactly? Is this built already or a new set of tasks we are showing? Is it the same set of tasks when you select "Get paid back by my employer"?

An option to skip and move on with onboarding as normal if they prefer

In other words, they will land back on this screen?

Looking into returning the accessible domain policies during OpenApp (I assume that should be fine) as a first step here.
I think we will just need one new command for joining the accessible policy - how about JoinAccessiblePolicy?
And seems like we will be able to use the existing RequestPolicyAccess when the user is requesting.

I think we will just need one new command for joining the accessible policy - how about JoinAccessiblePolicy?

Sounds like a solid name for this to me. 👍

populate their onboarding/ConciergeDM with the invited member set of tasks

Just for reference... what are these exactly? Is this built already or a new set of tasks we are showing? Is it the same set of tasks when you select "Get paid back by my employer"?

@marcaaron - this is being built as part of Stage 3 onboarding (1.b)

An option to skip and move on with onboarding as normal if they prefer

In other words, they will land back on this screen?

Yes

Working on the backend changes for this now.

Working on the backend changes for this now.

Re-adding the Help Wanted label. Seems like Melvin removed it.
Still working on the backend changes for this. Unfortunately, it's a little bit tricky to implement since it essentially adds a new email validation flow for a new user who has signed in with an unvalidated login. When they enter their magic code we need to also create a passwordless login if I'm not mistaken.
Could actually use a second opinion from @johnmlee101 or @NikkiWines on that whenever they get a chance.

Let's get some proposals here for the frontend? It may be easier to implement the backend changes with the frontend partially built.

@cretadn22 did you want to revise your proposal? @parasharrajat how can we get this one moving?

Still working through the BE changes in these two PRs:

[ ] https://github.com/Expensify/Auth/pull/12437
[ ] https://github.com/Expensify/Web-Expensify/pull/43617

Still working on the backend stuff, but it's all in review now. The changes required some consensus from engineering on how to build it out and turned out to be pretty involved.
I'm going OOO starting on Friday and would love to try and get the PRs merged before then so this will be in a potentially good state to hand off to someone else.

Back from OOO, but the backend PRs still in review here. This ticket required creating a new authentication related command and turned out to be a bit involved. Getting the accessible domain policies is a performance sensitive operation as well. But I think we are nearly there with @danieldoglas's great assistance.

That original job post is closed for some reason. So I created a new one with that higher price - https://www.upwork.com/ab/applicants/1844368510556052644

@allgandalf still open!

we need to verify if their domain already exists. This task should be handled in the backend

@cretadn22 Hmm not too sure what you are asking when you say "domain already exists". This will be checked whenever the user has a non-public domain so we can use the PUBLIC_DOMAINS constant right?
As for API, we will have two commands: JoinAccessiblePolicy and ValidateUserAndGetAccessiblePolicies will be required to complete this task.
@allgandalf yes, we are still accepting proposals.

Proposal
Please re-state the problem that we are trying to solve in this issue.
Users who register with a private domain should be able to see a list of workspaces within their domain, and have the option to join them.
What is the root cause of that problem?
This is a new feature
What changes do you think we should make in order to solve the problem?
My proposal for how to handle each step is in bold below.
1. Check if the email belongs to an existing domain:
- if email is not public domain, call new API ValidateUserAndGetAccessiblePolicies to retrieve list of workspaces. We need workspaceName, automaticJoiningEnabled,workspaceMembeCount,ownerEmail for each workspace.
2.  We ask for their first name/last name
3.  If there are any workspaces returned from step 1, adjust adaptOnboardingRouteState  and we show a step that:

Let’s them know people on  derp.com  are already using Expensify.

change the header to display the "People you may know are already here!..." text in the SignInPage.tsx file  if applicable

We’ve sent a magic code to validate their account so they can join them
An input for said magic code to validate the account
- These steps can reuse the ValidateCode and ValidateCodeAction components
An option to skip and move on with onboarding as normal if they prefer

use adaptOnboardingRouteState to keep state consistent and allow to skip this new workflow

If they validate the account, the next step shown is a list of all the workspaces owned by members of their private domain.
- Create new screen for this view, maybe called onboardingAvailableWorkspaces
- We need workspaceName, automaticJoiningEnabled,workspaceMemberCount,ownerEmail for each workspace. We will call the new API ValidateUserAndGetAccessiblePolicies in step 1 to get this info.

The CTA is  Ask to join  or  Join  based on the workspace JSON's  automaticJoiningEnabled  parameter being set to  false  or  true  respectivey
They can only pick one workspace in the list
-  Call new API: JoinAccessiblePolicy

If they click on the CTA we do one of two things depending on if the workspace pre-approves join requests (Join), or an admin needs to accept (Ask to join):

Pre-approval not required:

Add them to the workspace
Drop them in the LHN
populate their onboarding/ConciergeDM with the invited member set of tasks
- call addMembersToWorkspace
- completeOnboarding may also need to be called?

Pre-approval required:

Drop them in the LHN to continue exploring the product
Send the actionable message in the #admins room to accept or decline (just like policy join links that require approval)

this functionality exists already
call inviteToRoom and make API call

On the workspaces page, show the workspace row they’re pending to be accepted to join with the “[Requested]” badge (just like a policy join request that needs to be approved)
- this functionality already exists here
If they select New Workspace in the + menu or Workspace page, have a warning just to let them know we’re waiting on their colleagues to still accept the request to join
- will check if this exists, otherwise can add a check if the user's membership request is pending
Once accepted, they’ll get an email as they’re added to the workspace and we populate their onboarding/ConciergeDM with the invited member set of tasks.
- this should exist already, will update the proposal if not

I wanted to get a draft proposal out first to check if the overall idea seems reasonable. I'll come back to edit some of the unknowns towards the bottom in a couple hours. Let me know if there's anything else I should add/if anything is unclear. Thanks!

<EMAIL_ADDRESS>proposal LGTM 👍

BE PRs are deployed. I think we can pull out the stops here. Going to assign @bronwynbiro to get the ball rolling.

Contributor details
Your Expensify account email<EMAIL_ADDRESS>Upwork Profile Link: https://www.upwork.com/freelancers/~01d6ad9121672abba2

Still working through the BE changes in these two PRs:

[ ]  https://github.com/Expensify/Auth/pull/12437
[x]  https://github.com/Expensify/Web-Expensify/pull/43617

I can't view these repos, it possible to get access? Or the expected input/output for JoinAccessiblePolicy and ValidateUserAndGetAccessiblePolicies? Thanks :)

Please continue with the frontend changes, both BE tasks have been deployed.

JoinAccessiblePolicy takes these params:
policyID: string
ValidateUserAndGetAccessiblePolicies takes
validateCode: string (6 digits)
The main thing to be aware of is that the accessible policies will be returned to an state key (Onyx) KEY_JOINABLE_POLICIES which is a string of 'joinablePolicies' in the local data and this should be visible in the response under onyxData. Feel free to flag me down in Slack if you have any questions.

Thanks @marcaaron! Working on this now.
Some initial questions:

How should I be generating the magic code? I was using ValidateCodeForm but after entering the magic code from my email, I get an error that it does not match the expected code. I think this is because I am calling that from a new account, whereas it is intended for an already verified account..
Should a default onboarding purpose be set when the user skips onboarding? Or should it be left incomplete?

@bronwynbiro do you have a PR raised that I can look at and test to see where the problem might be?
Using ResendValidateCode command should work.

I think this is because I am calling that from a new account, whereas it is intended for an already verified account

Not quite. Asking for the validateCode is only necessary on accounts that are not validated. We need them to confirm their identity then we will show them the accessible policies.

An option to skip and move on with onboarding as normal if they prefer

I think the intention here is to "skip" only the validate and join policy step. No other steps should be skippable unless they are already skippable (which I think is none IIRC).

Thanks, got the validation bug sorted. I'm now a bit unclear on how the BE calls should look. I created an action:
function validateUserAndGetAccessiblePolicies(validateCode: string) {
    const parameters: ValidateUserAndGetAccessiblePoliciesParams = {validateCode: validateCode};
    API.read(READ_COMMANDS.VALIDATE_LOGIN_AND_SHOW_WORKSPACES, parameters);
}

but it seems the Onyx object need to be passed in to API.read as well? Something like..
 const optimisticData: OnyxUpdate[] = [
        {
            onyxMethod: Onyx.METHOD.MERGE,
            key: ONYXKEYS.KEY_JOINABLE_POLICIES,
            value: [],
        },
    ];

but what should the key and value be? or is there a different method I should be using?

No need pass in an empty array. It will actually be an object keyed by policyID (but also no need provide).
We are going to want to have this block the user and show some kind of loading state while we are loading the policies. So we will need to follow an example similar to this here.

Thank you! I'm getting a 500 error when making the request, so I think I'm still missing something
return new Promise((resolve, reject) => {
        const parameters: ValidateUserAndGetAccessiblePoliciesParams = {validateCode: validateCode};

        const optimisticData: OnyxUpdate[] = [
            {
                onyxMethod: Onyx.METHOD.MERGE,
                key: ONYXKEYS.KEY_JOINABLE_POLICIES,
                value: {isLoading: true},
            },
        ];

        const successData: OnyxUpdate[] = [
            {
                onyxMethod: Onyx.METHOD.MERGE,
                key: ONYXKEYS.KEY_JOINABLE_POLICIES,
                value: {isLoading: false},
            },
        ];

        const failureData: OnyxUpdate[] = [
            {
                onyxMethod: Onyx.METHOD.MERGE,
                key: ONYXKEYS.KEY_JOINABLE_POLICIES,
                value: {isLoading: false},
            },
        ];
    API.makeRequestWithSideEffects(SIDE_EFFECT_REQUEST_COMMANDS.VALIDATE_LOGIN_AND_SHOW_WORKSPACES, parameters, {optimisticData, successData, failureData})
.then((response) => {
  ...

the response looks like this:
"jsonCode":500,"message":"500 Can't call this command on public domains","onyxData":[],...

yes, because the API should only be used on emails with private domains:

Solution: Mirror Classic when it comes to an employee that signs up with a private domain email of a company that already has one or more workspaces.

Ahh thanks, forgot I was using my own email to test..
Is there a test private domain account I could use? I only have a gmail account, but being able to use a private domain account would help with testing the code verification and getting the list of available policies

Sorry, I don't have anything like that to offer right now. Maybe @allgandalf can assist with the testing portion. What I can do is try to provide you with mock data that you can hardcode to work on the frontend.

Sounds good, yeah hardcoded mock data would be great! I also opened a draft PR here

The data will be something like this (omitted the fields not relevant for this ticket):
{
  "D35BAB0CFAC69F52": {
    "policyID": "D35BAB0CFAC69F52",
    "policyOwner"<EMAIL_ADDRESS>    "policyName": "Health Coverage",
    "employeeCount": 150,
    "hasPendingAccess": false,
    "automaticJoiningEnabled": true,
  },
  "E56CAB1DFBC78A13": {
    "policyOwner"<EMAIL_ADDRESS>    "policyID": "E56CAB1DFBC78A13",
    "policyName": "Travel Support",
    "employeeCount": 50,
    "hasPendingAccess": true,
    "automaticJoiningEnabled": false,
  },
  "F67DAC2EABC89B24": {
    "policyOwner"<EMAIL_ADDRESS>    "policyID": "F67DAC2EABC89B24",
    "policyName": "Tech Equipment",
    "employeeCount": 200,
    "hasPendingAccess": false,
    "automaticJoiningEnabled": false,
  }
}

Not overdue.

Hey all, wanted to provide an update. I'm currently stuck on the final steps (step 6) of this PR and won't be able to continue working on it beyond the end of day Thursday, as I'll be away starting Friday. I would appreciate any guidance or support to help wrap this up before then!

Until dec 5 🙃
On Tue, Oct 22, 2024 at 10:25 AM Gandalf @.***> wrote:

how many days will you be OoO @bronwynbiro
https://github.com/bronwynbiro ?
—
Reply to this email directly, view it on GitHub
https://github.com/Expensify/App/issues/48189#issuecomment-2429731005,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACWBDAKPLPCXV5NE347AKX3Z4Z37ZAVCNFSM6AAAAABNIP42B6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDIMRZG4ZTCMBQGU
.
You are receiving this because you were mentioned.Message ID:
@.***>

let's see if we can get it wrapped and if not maybe you can take over @allgandalf and we will get another C+?

@rushatgabhane @allgandalf, any updates here?

@rushatgabhane, sorry! I didn't mean to tag you here. Please ignore!

Taking over the development.

Moving forward from here

@marcaaron The data currently is like:
{
  "isLoading": false,
  "D35BAB0CFAC69F52": {
    "policyID": "D35BAB0CFAC69F52",
    "policyOwner"<EMAIL_ADDRESS>    "policyName": "Health Coverage",
    "employeeCount": 150,
    "hasPendingAccess": false,
    "automaticJoiningEnabled": true,
  },
  "E56CAB1DFBC78A13": {
    "policyOwner"<EMAIL_ADDRESS>    "policyID": "E56CAB1DFBC78A13",
    "policyName": "Travel Support",
    "employeeCount": 50,
    "hasPendingAccess": true,
    "automaticJoiningEnabled": false,
  },
  "F67DAC2EABC89B24": {
    "policyOwner"<EMAIL_ADDRESS>    "policyID": "F67DAC2EABC89B24",
    "policyName": "Tech Equipment",
    "employeeCount": 200,
    "hasPendingAccess": false,
    "automaticJoiningEnabled": false,
  }
}

Instead of this, I think it makes more sense to have it like:
{
  "isLoading": false,
  "policies": {
      "D35BAB0CFAC69F52": {
        "policyID": "D35BAB0CFAC69F52",
        "policyOwner"<EMAIL_ADDRESS>        "policyName": "Health Coverage",
        "employeeCount": 150,
        "hasPendingAccess": false,
        "automaticJoiningEnabled": true,
      },
      "E56CAB1DFBC78A13": {
        "policyOwner"<EMAIL_ADDRESS>        "policyID": "E56CAB1DFBC78A13",
        "policyName": "Travel Support",
        "employeeCount": 50,
        "hasPendingAccess": true,
        "automaticJoiningEnabled": false,
      },
      "F67DAC2EABC89B24": {
        "policyOwner"<EMAIL_ADDRESS>        "policyID": "F67DAC2EABC89B24",
        "policyName": "Tech Equipment",
        "employeeCount": 200,
        "hasPendingAccess": false,
        "automaticJoiningEnabled": false,
      }
   }
}

Let me know if this is possible / quickly achievable.

I think this is a blocking request so we don't need to have isLoading in the Onyx data at all. Let's implement it that way for now? Or another option is to use a separate Onyx key just for the loading. Either seem acceptable to me.

I think this is a blocking request so we don't need to have isLoading in the Onyx data at all.

But right now, isLoading is returned from the backend.

Let's implement it that way for now?

The issue here is that doing an Object.values on the data would also result in iterating over the isLoading attribute. This breaks my logic until I do a filter which seems a work around to me.

But right now, isLoading is returned from the backend.

I feel like this can't possibly be true, but maybe you can describe what you are seeing in more detail. Feel free to DM me about this.

PR ready for review https://github.com/Expensify/App/pull/51681

@allroundexperts Gonna make this a Daily to hopefully help move it along. Feels like we are close!

@marcaaron Can I get access to Figma for this? I'm a little confused on what the actual flow is. In the PR, the personal details step is the first step, while in the design screenshot that Anu posted has it as a last step.

@allroundexperts I think this is the flow we're expecting:

Does that look right @dubielzyk-expensify ?

@allroundexperts AFAIK yes that is correct. I'm not sure what you are specifically confused about though. Can you clarify what is meant by "personal details step" just to be sure we are understanding each other here?

The intent step is actually first in most cases, then name. But in this instance I think we want to skip the intent step? Cause I think we have some weird follow-on things if you choose "Manage my team" etc which we don't want in this particular flow.
So in that instance what @shawnborton has posted above seems right to me. I guess like mentioned in the other GH, we probably wanna not have the back arrow on "Select a workspace" to end up in a double validation state. Unless we can neatly ignore that part when going back.

I believe some things got lost in translation here and it was not clear to us that these steps would be in scope for this issue:

On the workspaces page, show the workspace row they’re pending to be accepted to join with the “[Requested]” badge (just like a policy join request that needs to be approved)

If they select New Workspace in the + menu or Workspace page, have a warning just to let them know we’re waiting on their colleagues to still accept the request to join

Just a heads up that we are going to proceed without that for now since the PR is close to merging. But also, did we have any mocks for this? Maybe Design can weigh in here. Also, unclear what kind of warning we will show if they attempt to create a workspace. Perhaps these can be broken into some follow up tickets?
cc @shawnborton @dubielzyk-expensify @dannymcclain

On the workspaces page, show the workspace row they’re pending to be accepted to join with the “[Requested]” badge (just like a policy join request that needs to be approved)

Here's a take:

Also worth noting that we're adding a badge for default/primary workspace so it'll be a very similar treatment. A PR is in progress there.

If they select New Workspace in the + menu or Workspace page, have a warning just to let them know we’re waiting on their colleagues to still accept the request to join

I'm not 100% sure we should do this if we're adding the pending label personally. Keen to hear @Expensify/design thoughts.
If we did do a warning, I recon we'd use a normal confirmation dialog (just with better copy):

If we did do a warning, I recon we'd use a normal confirmation dialog (just with better copy):

Agree that if we do decide to do this, that mockup is what I would expect. I don't feel too strongly really, I can see where it might be beneficial in this case to make it slightly harder to make the new workspace. But keep in mind we're also going to have the workspace confirmation modal that has the avatar + name + create button - I wonder if we could just prepend a little warning message into that modal?

I like Jon's take on the invite pending badge, but agree that we'll need to figure out how that sits with the Default badge we're adding to the users default workspace. Actually maybe that's not an issue since your default workspace probably can't be your default until you're fully in it. So probably no issue there.
As for the extra warning, I kinda like Shawn's idea to add a little something extra to the workspace confirmation modal. But if we don't want to do that—what Jon mocked up is what I would expect. If we went that route, I imagine it would flow like this:

User clicks new workspace button
Dialog Jon mocked up shows (You've already been invited blah blah blah)
User clicks New workspace button in the modal
We show the standard workspace confirmation dialog

Yeah, fair points all around.
I'm gonna go even further and say that we don't need a warning at all. I kinda think it's weird to warn a user about creating a workspace. With all the new mechanics in place (modal on creation, pending label, tooltips, and this project), I feel like we actually don't need to warn them. If they're creating one on purpose, then the warning is just odd. Also how often do we show it? Only if they have one pending? Every workspace creation? Only for the first one?
Then secondly, if they create one unknowingly, then I don't think the warning is gonna make a whole lotta sense for them. They still don't know what a workspace is, they just know that one already exists and they might not need another. To me this has signals of something that need solving further up in the flow. But again, I think all the new things coming in actually leaves this warning kinda confusing.

With all the new mechanics in place (modal on creation, pending label, tooltips, and this project), I feel like we actually don't need to warn them.

I think that's totally great point. We actually just merged the workspace confirmation modal so I'd be happy to just go with a no warning approach and see how that goes.

With all the new mechanics in place (modal on creation, pending label, tooltips, and this project), I feel like we actually don't need to warn them.

I'd be happy to just go with a no warning approach and see how that goes

Yeah good points Jon. I'm down with seeing how a no warning approach goes with the new mechanics as well.

Sounds good. Yeah, I think I ultimately agree that we can wait for this to become a problem. And sounds like we will want to have that workspace row show a "Invite pending".
@allroundexperts do we have enough information in the front end to make that happen in the next PR? I can also create a new issue for that since this one is getting pretty long - let me know your preference.

Quick update here that there was a misunderstanding WRT the backend code and design that needs to be addressed.
To do the design as proposed we need OpenApp to return whether a user has accessible domain policies. Getting this information can be quite slow in some cases so my first instinct was to move it to the account validation step (assuming incorrectly that we would always be asking the user for the validate code anyway).
I see now that we will only do this when they have accessible domain policies. In the current state merging the PR will make it so we ask all users on a private domain to enter the magic code. Which would be undesirable and doesn't make sense given the proposed design.
The PR review has gone on for some time and communication has been difficult so I am proposing that we:

[ ] Push to merge the PR, but not enable the feature for now. We will hardcode something so that this flow does not get engaged yet.
[ ] Investigate returning something like hasAccessibleDomainPolicies in the OpenApp call (and take care not to hurt the performance of this command as it is critically and notoriously slow and getting accessible domain policies has the same problems in it's current state)
[ ] Then we can create a final PR to check hasAccessibleDomainPolicies instead of looking at whether the account is on a private domain.

Working on the final backend parts we need to complete this one.

There are two out of scope features mentioned here that will not be a part of this PR, which I agree with. I think we should create separate GHs for each of those and track them. @marcaaron do you agree? If yes - I can create those as separate GHs.

Yep, sounds good!

@allroundexperts How soon can we get the next PR? Are we waiting on the backend?

Waiting for the issues to be created.

I noticed a issue on main, the onboarding modal does not move to next step from personal details step when login with a private domain user. I believe it is temporary as we are going to create a new PR soon. Posted for tracking...

Fixed it here

@allroundexperts Still in review, but ready soon!

@allroundexperts the changes are on production now!

We can create one more PR and then this should be ready to close once deployed. I am going OOO for some time so we will likely need an internal engineer to take this one over.

@isabelastisser I think we ignore the above comment until the final PR is merged. So, taking this off HOLD.

Then we can create a final PR to check hasAccessibleDomainPolicies instead of looking at whether the account is on a private domain.

Is this the final PR that @allroundexperts is working on?


How do we handle Multiple Entry points.

Hi @halt-hammerzeit
I know this might not be an issue , just putting as discussion thread.
Say I have multiple entry points in my webpack.config.js.  e.g Home.js , About.js
Now on server side we have only one HTML file , how do we stop loading About.js while visiting Home ?

It makes sense to have a single bundle (with only one entry point) on the server side because code splitting is pointless on the server (no latency)

In that case , we will have always app.js inside a <script> tag that is what you are trying to say,
in a case https://github.com/erikras/react-redux-universal-hot-example/blob/master/src/helpers/Html.js#L53 Can't we just load page specific JS here ?

No, I'm speaking about the server-side bundle.
The server-side bundle must not be placed inside <script/> tag.
The client-side bundle is.
And it retains all its entry points.
You can console.log it to make sure it does.


Fix tournament auto disqualify error

The function requires an "output" argument.

@ascripmaster, care explaining why you tagged this with do-not-merge? :|
Also, in the future please remove the label before actually merging @Zarel

I don't read labels... :| Really, if it shouldn't be merged, make a note of why in the pullreq summary or a comment.

... you should

no objection


2016-01-04 prices are wrong

Today, I compare the data retrieved by yfinance with yahoo site. I found they are different.
the data from yfinance:
from pandas_datareader import data as pdr
import fix_yahoo_finance as yf
yf.pdr_override()
data = pdr.get_data_yahoo("AAPL", start="2016-01-04", end="2016-01-05")
[*********************100%***********************]  1 of 1 downloaded
>>> data
                  Open        High    Low       Close  Adj Close    Volume
Date
2016-01-04  102.610001  105.370003  102.0  105.349998  99.117409  67649400

but the data observed from yahoo site is below:(the high, low, close and volume are not same)

According to this, the prices looks ok:
https://finance.yahoo.com/quote/AAPL/history?period1=1451772000&period2=1451944800&interval=1d&filter=history&frequency=1d

My friend sees the data using another financial product. It's the same as history data from Yahoo.
I guess there is something wrong with Yahoo interactive stock chart page.
Will close this issue and thank you.


Add setup.py

Addresses #55
Followed
https://python-packaging.readthedocs.io/en/latest/minimal.html
Does not include distributing the package on pip or conda.

I added an acknowledgement in the paper to Tom J. Wilson for the work he did checking out the statistics and with help with the code on my end.


The exception DBConnection.ConnectionError gives a misleading error message

I was bothered by the exception DBConnection.ConnectionError for a long time while trying to run my Phoenix application in a production environment.
This exception gave the following error message.

** (DBConnection.ConnectionError) connection not available and request was dropped from queue after 2343ms. This means requests are coming in and your connection pool cannot serve them fast enough.

Then, it offers three solutions:

Tracking down slow queries and making sure they are running fast enough
Increasing the pool_size (albeit it increases resource consumption)
Allowing requests to wait longer by increasing :queue_target and :queue_interval

But these messages were misleading. Because, in my case, the exception was just because the database wasn't created. In fact, once I created the database, I no longer got this exception.
Environment

Elixir 1.11.3
PostgreSQL 12
Ecto 3.5.5
Ubuntu 20.04

Fixed in DBConnection master, thank you!

Fixed in DBConnection master, thank you!


cgnutools: Remove curses dependencies from cgnutools and optimize LLVM builds

Changes:
1. Force turn off linking to curses libraries `LLVM_ENABLE_TERMINFO:BOOL`;
2. Force turn off linking to host's libz `LLVM_ENABLE_ZLIB:BOOL`;
3. etc.

I confirm this works like a charm on my builds, people might need to confirm this first if it's valid. Thanks.

Cc: @dslm4515 @takusuman

NO WAY!
SO! Maybe this is how i got to build cgnutools w/o linking to ncurses!
I'll check it out!!

Why not going back to MinSizeRel for CMAKE_BUILD_TYPE to reduce build time and size?

Why not going back to MinSizeRel for CMAKE_BUILD_TYPE to reduce build time and size?

I initially did, but some headers and binaries were not installed... i might be confusing it with llvmtools, though. Perhaps, MinSizeRel should be used for LLVM in cgnutools and Release for llvmtools and definately Release for the final system

I tried searching for a stripped down LLVM source or a method to strip it down like in cross-tools in MLFS. I even tried to see if i can build clang with out the main LLVM source... that failed as clang expects to build in-tree in LLVM main source.  I had to change the format because when the I enter all the flags on one line, it doesn't transfer well from text-file to commanad line

Wait, looks like zlib needed by lld.

Wait, looks like zlib needed by lld.

Good catch!
Currently upgrading software on newer laptop as the current one I'm using as a terminal is quite old with small screen (its 1024 x768!) ... newer laptop has a larger screen (1366 x 768)

Cc: @dslm4515 @takusuman

😳

Wait, looks like zlib needed by lld.

Nevermind, mine has worked without any problems at all after rebuilding for 3 days. Previously I had seriously problem, somehow ld.lld must require zlib compression to read GCC's object file.

People might need to confirm this first if it's valid. Thanks.

I'm almost ready for another CMLFS build.
Sorry for the delay.


Adding Home Button in Projects and About Us

closes #1111

@umar-farooq-shaik please resolve the conflicts.

and please sync the fork before committing any changes.

@umar-farooq-shaik please resolve the conflicts.

@umar-farooq-shaik if you are not understanding how to resolve the conflicts, you can close this PR, and update the branch and then commit the changes and you can create New Pull Request.

@umar-farooq-shaik i will be closing this PR, make sure to follow the above steps and update it.
will it be okay for you if i close this PR.

please reply brother.

yeah brother i closed the PR

@umar-farooq-shaik if you are not understanding how to resolve the conflicts, you can close this PR, and update the branch and then commit the changes and you can create New Pull Request.

click the update branch on your forked one's and then do commit the changes and then you can create New Pull Request.

follow these steps and update your branch and then create the new Pull request.

brother do follow the above one's like which i have shown you.


🐛 [Bug] Registration with Safari Does Not Transaport Transaction Link Code To Login

🐛 Bugreport
As @Tirokk reported, the mechanism to transport the link code after set password to the login page is not working.
File: frontend/src/pages/ResetPassword.vue, line 92:
            this.messageButtonLinktTo = `/login/${this.$route.params.code}`

I checked this again for:

transaktion links
contribution links

I used this links to register a new user in both cases and all works fine.


DRTank and (Maybe) TEMagmaCrucible Crash.

Today we updated to FTBBeyond (1.6.1) and had a local crash around someones base.
Log:
Head -- Thread: Server thread Stacktrace: at java.util.Objects.requireNonNull(Objects.java:203) at java.util.Optional.<init>(Optional.java:96) at java.util.Optional.of(Optional.java:108) at mcjty.deepresonance.blocks.tank.TileTank.onTileUnloaded(TileTank.java:170) at mcjty.deepresonance.blocks.tank.TileTank.func_145843_s(TileTank.java:151) at net.minecraft.world.chunk.Chunk.func_177426_a(Chunk.java:816) at net.minecraft.world.World.func_72939_s(World.java:1872) at net.minecraft.world.WorldServer.func_72939_s(WorldServer.java:620)
deepresonance{1.4.7} [DeepResonance] (deepresonance-1.1x-1.4.7.jar)
thermalexpansion{5.0.4} [Thermal Expansion] (ThermalExpansion-1.10.2-<IP_ADDRESS>-universal.jar)
After chasing down tanks within the area we found this setup: imgur
The stone replaced tanks.

This bug has been reported more then 10 times already and has been fixed several weeks ago in 1.4.8


lol

there is a difference between public static and public static final

Check that your mappings don’t conflict with Blayyke’s please


shifts on integers don't work

Description of the issue
I need to perform shifts on integer numbers. However, I get a compiler error (see below).
Type (put an x sign in the square brackets)

[x] bug report
[ ] feature request
[ ] Documentation improvement

Checklist

[x] Running latest version of code.
[x] This issue has not been reported earlier.

Actual behaviour
Compiler error NEO-GO-VM > compiler don't know how to convert this basic type: {4 uint 3}
Steps to reproduce
Compile following contract:
func Main() int {
    a := 1
    a = a << 3
    return a
}

Any extra info ( for eg. code snippet to reproduce, logs, etc. )
If necessary, provide some extra information like code-snippets or error-logs.

@fyrchik The latest release candidate has support for this.


[LPC15xx] SPI::aquire can generate extra clock edges

The SPI::write method calls aquire to ensure that its frequency/mode settings are the current settings in use. However, on the LPC1549, changing the frequency/mode generates a couple of spurious clock edges. If hardware slave select is not used, this can cause the first SPI write that resets the frequency to generate extra clock edges while the slave select is asserted, which can confuse the slave device.
For example, consider the following code run in a loop
cs = 1;
spi.write(0x55);
cs = 0;
other_cs = 0;
other_spi.write(0x55);
other_cs = 1;

This results in the following logic analyzer trace:

The extra clock edges causes the analyzer to misread 0x55 as 0xD5 because the first two bits are read  while the SPI peripheral is being reconfigured. The actual 8 bits of data are shifted over by two.
In this case, the two SPI objects are using the same peripheral, but the logic in aquire doesn't care if the two peripherals are the same, so this problem could just as easily occur if the two objects used different peripherals.

Hi,
Yeah... I faced same problem...
I think proper way to solve it is make aquire() method public.
I usually use two workarounds:

When I need to use SPI in the driver code then I inherit driver class from SPI and call aquire() method before push CS down.
For main.cpp I have speccial wrapper class that take case about CS and proper aquire() call.

Regards

I don't think that that is a proper solution, then depending on how you implement it exactly, every single library in existence needs to be modified to still work, or to work with the LPC1549.
It is a problem which really shouldn't happen in the first place, but okay it happens. Without having the target myself: Possibly it can be solved by switching to DigitalOut (with state which is equal to clock idle state), changing the clock settings, and switching back?

@Sissors NRF51 SPI driver has same issue as devanlai described about LPC1549.
STM32 is a bit better but the problem is there anyway. Because aquire() method and especially mode changing must happen when CS is inactive.
Example:
#include "mbed.h"

SPI spi1(PB_5, PB_4, PB_3);
SPI spi2(PB_5, PB_4, PB_3);

DigitalOut cs(B5);

void setup()
{
    spi1.frequency(1000);
    spi1.format(8, 0);

    spi2.frequency(1000);
    spi2.format(8, 2);
}

void loop()
{

    cs = 0;
    spi1.frequency(1000);
    spi1.write(0xAA);
    cs = 1;

    cs = 0;
    spi2.frequency(1000);
    spi2.write(0x55);
    cs = 1;
    wait_ms(100);
}

This is how it looks on different CPU:
NRF51

STM32F103:

STM32F405

Only thing I see for the STM32 is that it droops a bit? It goes maybe into a high-impedance state for short time? For sure it doesn't affect digital there. NRF51 clearly shows indeed the same issue. Still I don't think the issue is forcing users to acquire all the time themselves. Disconnecting the SPI peripheral from the pin when it is being problematic seems to me to be nicer.

Well... it's not so good...
Most of SPI slaves could work with STM32 semi-correct spi signals but some would not.
For example serial flash usually ignore such signals due to wrong clock level.
It's also going to be a problem for SPI slaves with autodetecting of SPI mode.
Here is correct signal sequence for SPI mode 0 and 2.
SPI MODE0

SPI MODE2

Ah I didn't check the waveforms properly.
That said I still don't see a reason to force users to call acquire all the time just because a few targets have some weird hardware, and some others have bad software. Masking the hardware problems (for example by switching it to GPIO when changing frequency), and fixing software issues seems more logical to me.
Because I assume the reason for the issues which an STM one can have is their code: https://developer.mbed.org/users/mbed_official/code/mbed-src/file/5afbce4ea2da/targets/hal/TARGET_STM/TARGET_STM32F4/spi_api.c, it follows the same coding style as more and more targets seem to be using sadly, the: "Have you try turning it off and on again" style. Where they completely disable the peripheral and reinitialize it when they want to switch mode/frequency (also popular with PWM).
In other words: Users shouldn't be forced to manually call that function because it is implemented poorly: The implementation needs to be fixed.

Well.. I don't try to convince you that user MUST trigger aquire() each time by him self 8)
I suspect that case with wrong clock level after CS is valid for any mbed platform because it's logical issue. It has nothing with STM32 or Nordic HAL implementation.

I haven't check popular libraries from mbed community but I guess people call format() or frequency() before trigger CS.
This is probably easiest way to workaround this issue.

They do, it makes little sense not to do it before triggering CS. However if I understand this correctly the issue is that format and frequency are called by acquire, which is not done before setting CS. Switching the frequency should not cause spurious clock edges. Switching between modes where the clock idle value is different will of course generate a clock edge, that can't be prevented, and for that you could make acquire public.
However in my opinion any change either in frequency or in phase (so not clock idle level), should not be visible on the output. Otherwise you either got a problem in hardware (which you can cirumvent in software), or you got the problem in software in the first place.

True.
I see it as non technical issue but logical.
This issue appears only in applications where SPI slaves work in different modes.
Other cases, for example LPC1549 is just bug in spi_api.c or SPI.cpp.

LPC1549-specific
After some experimentation, it looks like when SPI is disabled on the LPC1549, it disregards the CPOL bit and actively drives SCLK low. As @Sissors suggested, it is possible to blank this by temporarily rerouting SCLK to a GPIO that just drives the idle clock state as long as SPI is disabled.
The alternative of simply leaving SPI on while reconfiguring it seems better to me. I didn't see any misbehavior while modifying CPHA or the frequency. Changing CPOL generates an edge when the idle state is redefined, but as previously mentioned, that's unpreventable.
The manual does mention that the CPHA/CPOL should not be modified unless SPI is idle. I can only see this being a case in slave mode (which would be weird) or when using the new asynchronous API. I'm not sure what should be done if someone tries to use the synchronous API to reconfigure SPI (or read from / write to) while the asynchronous API is running. The only logical behavior I can see would be to wait for all pending transactions to complete, but right now it doesn't look like the synchronous API has any awareness of the asynchronous API for any operations at all.
The other case where the manual recommends doing a full disable/enable is when switching between the master/slave roles. I haven't tried this, but assuming the manual is correct and SCLK is only driven if the master role is selected, I don't think we would see any spurious edges when disabling and reenabling it to change roles.
SPI API in general
At the API level, I agree that it would be useful to have make aquire() (or its correctly spelled cousin acquire()) public.
The way that I wanted to use multiple SPI objects was to have one SPI object per slave device. Each SPI object knows the appropriate frequency/mode to use and automatically reconfigures the port to use it when the object is used, thus avoiding the need to carefully call format() and frequency() on a single shared SPI object.
The only drawback is that with software slave select, there's no nice way to control when the port is reconfigured; the first SPI operation will have extra delay before the actual transfer because the port needs to be configured. I could call format() or frequency() to force a call to aquire(), but it's a bit silly that I have to repeat the frequency I want and force the peripheral to be reconfigured when it might not even need reconfiguration. Allowing a direct call to aquire() would nicely solve this, especially if aquire() were to use the new spi_get_module() HAL function to avoid unnecessary reconfigurations when different SPI ports are involved.

ARM Internal Ref: IOTMORF-246


Add UI to enable/disable experiments (feature flags)

Summary

Relevant Technical Choices

Experiments page is only visible for admins
Once a flag has been turned on by default, there's no longer a checkbox for it in the UI.
Experiments page will not be visible for the stable releases we ship, at least for now.

To-do
Possible follow-up tickets:

E2E tests for experimental features
Remove flags that are enabled by default

User-facing changes
New settings page under Stories -> Experiments:

(visible only for admins)
Testing Instructions

Fixes #1738

@swissspidy I have this tweak related - https://github.com/google/web-stories-wp/pull/3715

Some flags like media3pTab seem to have disappeared. Was that an unintentional change?

Ah looks like showTextAndShapesSearchInput was added twice, and one of them was supposed to be media3pTab. Perhaps there should be a test to ensure that feature flag names are unique?

I re-added media3pTab via #3620

I don't seem to see the experiments option in the Stories tab, even though I'm an admin. Do I have to do anything else to have it appear?

@diegovar Heya, sorry for the inconvenience! Good point with the tests, looks like a copy/paste issue or merge issue. I'll send an email about this new feature soon, explaining how it works, etc.


.editorconfig override path

Hi there
Great plugin, our team loves using it!
I recently upgraded to 0.7.0 and started to notice that previously acceptable kotlin files were now marked with ktlint errors. Specifically the line length error. On closer inspection it seemed to be reporting the line length and import ordering as the default ktlint values and not the values that we have set in our .editorconfig file.
I don't remember having to manually configure the editorconfig file in previous versions of the plugin but as a workaround I added the folder that contains this file to the .editorconfig override path in the settings menu and that worked.
The location of our editorconfig hasn't changed ever and has always been in the root of the project.
android
  | app
    | build.gradle
  | settings.gradle
  | gradlew
  | build.gradle
  | .editorconfig

I'm running Windows if that matters.

Can confirm that the editor config at project root is not being picked up. Setting override works, though. Multi module maven project on linux.

Can confirm that the editor config at project root is not being picked up. Setting override works, though. Multi module maven project on linux.

Thanks for flagging this! I'll take a look today 😄
@phanimahesh by chance - did this issue also arise with 0.7.0 specifically for you? Or has it always been the case?

Thanks for flagging this! I'll take a look today 😄
@phanimahesh by chance - did this issue also arise with 0.7.0 specifically for you? Or has it always been the case?

Fix added to 0.7.1 😀

Fix added to 0.7.1 😀

I installed the plugin recently and discovered the issue. Not sure if it always existed or was a regression.

I installed the plugin recently and discovered the issue. Not sure if it always existed or was a regression.

Great, just wanted to make sure it was the same cause! 0.7.1 should be rolling out shortly

Great, just wanted to make sure it was the same cause! 0.7.1 should be rolling out shortly

Hi @nbadal mega thanks for the quick patch! I received the update today and tested it out by removing the workaround I mentioned above. Seemed fine for the day of use I had. I didn't restart the IDE in that time but...... I'm assuming that doesn't matter.
Cheers again.

Hi @nbadal mega thanks for the quick patch! I received the update today and tested it out by removing the workaround I mentioned above. Seemed fine for the day of use I had. I didn't restart the IDE in that time but...... I'm assuming that doesn't matter.
Cheers again.


Add actual highlight information to TSHighlightCapturesUnderCursor

It would be an helpful addition to include the information provided by the highlight command besides Treesitter and Syntax if possible.
I get that currently with an extra function but perhaps it would be possible to integrate that in the TSHighlightCapturesUnderCursor popup?
Since I'm never sure whether I use the correct words and terms I've created a picture to clarify what I mean:

What's that extra function called? I have tried my old vimscript trick and it doesn't work:
" Get the highlight groups under the cursor
function! s:syntax_query() abort
  for id in synstack(line("."), col("."))
    echo synIDattr(id, "name")
  endfor
endfunction
command! SyntaxQuery call <SID>syntax_query()

You can now use :Inspect in nightly


How to log into local team foundation server.

The examples on the main page show how to log into visual studio online. What is the process for logging into an uploading a task for use on an team foundation server local installation?
I am currently stuck at logging into the tfs local machine with the command tfx login. Even using basic auth fails to log me in.

Are you using version 0.1.9 of the npm module? We added support for on prem yesterday.

I assume you've gone through the process of enabling basic creds for your local installation. There's a little guide here:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/96aa6738-6f01-4015-8c59-25215cc84897/enable-alternative-credentials-in-tfs-on-on-premises?forum=tee

As Teddy noted, support was added yesterday for in prem for basic auth.  ntlm coming in a month or so

Just to be clear for others that might come across this:

Basic Auth needs to be added to the TFS Website under IIS
Basic Auth needs to be added to the TFS virtual directory under IIS
Other Auth types are allowed to remain and don't need to be removed (under IIS for both website and virtual directory)
The prompt "Enter collection url" requires the full url to the collection in question, even if it is the default collection.
The prompt "Enter username" requires the domain and user name to be entered in the format "user@domain"

@teddyward and @bryanmacfarlane thanks for the help on this.

http://blog.jessehouwing.nl/2016/01/publish-build-tasks-to-tfs-2015-without.html


Make-so multi-premise arguments show a child-limit-bar if it has more than two (or maybe three; for sl, 0) premises (eg. needed for massive multi-premise-arg in diablo map)

Also:

Map settings should let you set the "premises shown by default".
Expand/contract buttons have space, so should say "Expand X premisesX. (if in SL map, probably show "Expand X components" instead)


Add support for LGTM_INDEX_FILTERS

This is only possible solution to double-globs in path filters. We make use of the LGTM_INDEX_FILTERS environment variable, as well as the two others that we already use, because LGTM_INDEX_FILTERS does support **.
Merge / deployment checklist

[ ] Confirm this change is backwards compatible with existing workflows.
[ ] Confirm the readme has been updated if necessary.

I made a test repo for this change at https://github.com/dsp-testing/robertbrignull-filter-test and you can see the changes that switches to this branch makes at https://github.com/dsp-testing/robertbrignull-filter-test/pull/1/checks?check_run_id=845738229

@aibaars, would you be able to give this a review? Can also ask someone else if you'd rather not.

This looks fine to me. Two more suggestions to add more checks to improve or avoid error messages.

Ok, I think this is finally ready. I've addressed all the comments from yesterday, I've just had another look through, and my tests over at https://github.com/dsp-testing/robertbrignull-filter-test are working as expected.
@aibaars, do you want to give this another sanity check? Otherwise I will merge today in a little bit.

Looks good to me.

I'm going to add some more filters to the integration. Can't believe I forgot to do that until now. Then I'll merge this.

Seems while javascript is fine, the python autobuilder code borks if you include certain characters like *, ?, or < anywhere in one of the filters. I'm pretty sure this happens on the main branch too so this PR doesn't make things any worse.

Also seems the python case throws an error if the INCLUDE env var includes paths to files, because it only accepts directories.

Turns out adding / is fine on javascript but causes an error for python. So I take it back and let's ban that path. Also now turns out there's basically nothing useful I can add an integration tests as everything even slightly interesting causes errors for python.
Regardless, this PR is going to be merged as I've done enough testing now manually. In the future this situation needs to be sorted out to bring the two languages more in line because currently the behaviour is unacceptably different.

I don't believe this PR will make any configs that were previous valid to be invalid, so from that point of view this is a safe change. There is a reasonable chance that we will find bugs or otherwise want to make changes to this area, but we should be able to response and address those problems when we find them.


add proto.IsWellFormed helper function to validate that a message value is well-formed

By "well-formed", I mean the message contains none of the following "malformed" constructs. I use the them "malformed" because they are not valid Protobuf constructs and can't be encoded in the binary format: serializing and deserializing the message results in a new message where proto.Equal returns false. All of the "malformed" constructs have to do with typed nil messages, so they are also nil-dereference-panic risks in user code.

A slice (i.e. repeated field) that contains a typed nil message.
A map that contains a typed nil message value.
A oneof wrapper struct that contains a typed nil message value.
A oneof wrapper struct that is itself a typed nil pointer. (This is related to #1415.)

(The lattermost one does not actually impact round-trip equality: a typed nil oneof wrapper struct is treated by reflection and serialization the same as a nil interface value. However, it still is a nil-dereference-panic risk in user code.)
Although all of these cases are handled by the runtime library and (I think) their expected behavior is documented, the behavior can be surprising since it isn't necessarily intuitive (usually for users new to Protobuf that don't understand how the wire format often prevents "intuitive" behavior). I suspect that such cases in practice are usually inadvertent and a symptom of an underlying defecct in the code that constructed the message. To that end, it would be useful if a validation layer could easily detect such malformed messages.
This could potentially be provided by a third party package *, but it would be much less discoverable and thus less likely to be used. Having it in the proto package would make it more useful in that regard. Note that the fourth construct above cannot actually be detected by a 3rd party library, at least not cleanly, because reflection provides no way to distinguish between a struct field that corresponds to a oneof being set to a nil interface value vs. a typed nil pointer (also pointed out in this comment).

A repeated field, map value, or oneof field containing a nil message is equal to one containing a non-nil, empty one, so the behavior for cases 1, 2, and 3 is not as described.
A nil message pointer is, in general, exactly equivalent to a non-nil pointer to an empty message, except for being read-only. proto.Equal(a, b) reports false if a==nil != b==nil, for historical reasons, but that only applies to the top-level values, not anything contained within them.